tmux入門 : 3. 會話


 

上一節我們已經將 tmux 安裝好了,現在就可以通過以下命令來啟動它:

$ tmux
啟動之后,可以看到命令行最底部多了一條綠色的狀態條,上面顯示了一些信息,比如計算機名和時間等。 要退出 tmux,可以輸入 exit 回車或者按下組合鍵 [Ctrl+d] 。

其實剛才我們啟動 tmux 之后,它已經自動創建了一個會話(Session),會話是 tmux 的最主要的功能,接下來我們將介紹會話的一些功能。

新建會話

啟動 tmux 會自動創建會話,但並沒有為會話命名。為了以后使用方便,我們來創建一個自己命名的會話,命令如下:

$ tmux new-session -s <會話名稱>
現在我們來創建一個會話,取名為 dev ,命令為:

$ tmux new-session -s dev
創建完成之后,可以看到底部狀態條左邊標示出了當前的會話名為 dev 。

這個命令還有一個縮寫版本, new-session 縮寫成 new ,也就是上述命令可以簡寫成:

$ tmux new -s dev
新建會話還可以帶上一個初始命令:

$ tmux new -s <會話名稱> 初始命令
比如創建一個名為 monitor 的會話,初始命令為 top :

$ tmux new -s monitor top
可以看到會話創建后,會自動運行 top 命令。但是一旦退出 top 程序 (按 [q] ),會話也會自動退出,所以在實際應用中,初始命令幾乎不會用到。

分離會話(detach)

之前已經說過,退出 tmux 可以使用 exit 命令或者 [Ctrl+d] 組合鍵,退出 tmux 會把會話結束掉,就像平常關閉終端程序一樣。但是在實際應用中,可能你並不希望這樣,因為有些程序是要保持運行的,例如 rails 的測試服務、telnet連接遠程服務器等等。

這時候分離會話就可以派上用場了,分離后的會話並不會把運行中的程序結束掉,而是會保持運行,你還可以稍后重新連接上這些會話。

分離會話之前,我們先來啟動一個需要保持運行的程序,這里用 python 2.x 的 SimpleHTTPServer 為例, 當然你也可以選擇啟動 rails 或 django 的測試服務、telnet 連接或者更簡單的 top 命令。

先在之前創建的會話中運行一下命令來啟動一個簡單的 HTTP 服務:

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
這時候 HTTP 服務已經運行起來了,接下來就要做分離會話的操作了,快捷鍵是:

[Ctrl+b] [d]

也就是先按下組合鍵 [Ctrl+b] 然后再接着按 [d] 。d 代表了 detach,而 [Ctrl+b] 是一個命令前綴(官方稱之為 prefix),這個命令前綴是告訴終端程序,接下來的命令是針對 tmux 使用的。在之后的描述中,都將采用 [前綴] 來代替 tmux 的命令前綴。

可以看到,在按下快捷鍵之后,tmux 已經退出並回到平常的終端中,並帶着 [detached] 字樣的提示。

這時候可以在瀏覽器訪問一下剛才啟動的 HTTP 服務 http://localhost:8000,確實可以正常訪問,證明剛才的程序還在保持運行中,並沒有被結束,甚至你還可以把整個終端程序關閉。

可能有人會很不習慣這個默認的命令前綴,包括我自己在內,因為 [Ctrl+b] 是一個 Emacs 或 Vim 的快捷鍵,甚至是命令行本身的快捷鍵。在 Emacs 或者命令行中,它是后退一個字符的操作;而在 Vim 中,它是一個向上翻頁的操作。不過不用擔心,先忍耐忍耐,稍后的章節將講述如何配置 tmux,那時就可以擺脫快捷鍵沖突的困擾了。

連接會話(attach)

被分離的會話,還可以重新連接上,就讓我們來實踐一下,命令為:

$ tmux attach-session -t <目標會話名>
簡寫為

$ tmux attach -t <目標會話名>
或

$ tmux a -t <目標會話名>
之前我們創建的會話名叫 dev ,所以命令就可以這樣寫:

$ tmux a -t dev
因為我們只創建了一個會話,所以可以忽略 -t 的參數,直接寫成:

$ tmux a
如果不指定目標會話名,tmux 將會連接你上次使用的會話。連接上 dev 會話之后,可以看到程序還在運行中,而且終端里顯示的內容跟會話分離前沒什么兩樣,只是多了幾行 HTTP 請求的日志。

這時候,你還可以在多個終端,甚至是多台電腦通過 ssh 連接上同一個會話,可以實現共同操作,非常強大,具體的感受可以自己體會。

接下來我們多創建幾個 tmux 會話,在這之前先把當前會話分離掉:

分離當前會話: [前綴] d
新建一個名為 edit 的會話: $ tmux new -s edit
分離 edit 會話: [前綴] d
新建一個名為 telnet 的會話: $ tmux new -s telnet
分離 telnet 會話: [前綴] d
現在,會話已經足夠多了,接下來登場的就是列出所有會話的命令:

$ tmux list-sessions
可以簡寫成

$ tmux ls
屏幕上將會顯示出所有創建的會話,比如:

dev: 1 windows (created Tue Jun 10 15:10:32 2014) [80x24]
edit: 1 windows (created Tue Jun 10 16:26:20 2014) [80x24]
telnet: 1 windows (created Tue Jun 10 16:26:53 2014) [80x24]
這時候連接會話的 -t 參數就派上用場了,你可以選擇連接到哪一個會話。

如果沒有創建會話或者會話都全已退出,那么列出所有會話的命令將會提示一個 failed to connect to server 的信息,可以看得出來 tmux 是有運行一個服務的,這個服務管理着所有的會話,並讓他們持續運行。

小結

通過創建多會話,以及分離/連接的功能,還能實現多終端連接同一會話,已經完全可以輕松應付許多平常很以實現的功能。在下一章節中,我們將討論 tmux 里窗口(Window)的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM