上一節我們已經將 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)的功能。