xshell中途斷網——tmux解決方法
$ tmux1
啟動之後,可以看到命令列最底部多了一條綠色的狀態條,上面顯示了一些資訊,比如計算機名和時間等。 要退出 tmux,可以輸入 exit 回車或者按下組合鍵 [Ctrl+d] 。
其實剛才我們啟動 tmux 之後,它已經自動建立了一個會話(Session),會話是 tmux 的最主要的功能,接下來我們將介紹會話的一些功能。
新建會話
啟動 tmux 會自動建立會話,但並沒有為會話命名。為了以後使用方便,我們來建立一個自己命名的會話,命令如下:
$ tmux new-session -s <會話名稱>1
現在我們來建立一個會話,取名為 dev ,命令為:
$ tmux new-session -s dev1
建立完成之後,可以看到底部狀態條左邊標示出了當前的會話名為 dev 。
這個命令還有一個縮寫版本, new-session 縮寫成 new ,也就是上述命令可以簡寫成:
$ tmux new -s dev1
新建會話還可以帶上一個初始命令:
$ tmux new -s <會話名稱> 初始命令1
比如建立一個名為 monitor 的會話,初始命令為 top :
$ tmux new -s monitor top1
可以看到會話建立後,會自動執行 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 ...12
這時候 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 <目標會話名>1
簡寫為
$ tmux attach -t <目標會話名>1
或
$ tmux a -t <目標會話名>1
之前我們建立的會話名叫 dev ,所以命令就可以這樣寫:
$ tmux a -t dev1
因為我們只建立了一個會話,所以可以忽略 -t 的引數,直接寫成:
$ tmux a1
如果不指定目標會話名,tmux 將會連線你上次使用的會話。連線上 dev 會話之後,可以看到程式還在執行中,而且終端裡顯示的內容跟會話分離前沒什麼兩樣,只是多了幾行 HTTP 請求的日誌。
這時候,你還可以在多個終端,甚至是多臺電腦通過 ssh 連線上同一個會話,可以實現共同操作,非常強大,具體的感受可以自己體會。
接下來我們多建立幾個 tmux 會話,在這之前先把當前會話分離掉:
分離當前會話: [字首] d
新建一個名為 edit 的會話: tmuxnew−sedit分離edit會話:[字首]d新建一個名為telnet的會話:tmuxnew−sedit分離edit會話:[字首]d新建一個名為telnet的會話: tmux new -s telnet
分離 telnet 會話: [字首] d
ls會話
現在,會話已經足夠多了,接下來登場的就是列出所有會話的命令:
$ tmux list-sessions1
可以簡寫成
$ tmux ls1
螢幕上將會顯示出所有建立的會話,比如:
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 引數就派上用場了,你可以選擇連線到哪一個會話。