tmux 終端複用詳解

tmux是什麼

咱們在linux服務器上的工做通常都是經過一個遠程的終端鏈接軟件鏈接到遠端系統進行操做,例如使用xshell或者SecureCRT工具經過ssh進行遠程鏈接。在使用過程當中,若是要作比較耗時的操做,例若有時候進行編譯,或者下載大文件須要比較長的時間,通常狀況下是下班以後直接運行但願次日早上過來運行完成,這樣就不用耽誤工做時間。可是網絡有時候不穩定,可能在半夜會出現鏈接斷掉的狀況,一旦鏈接斷掉,咱們所執行的程序也就中斷,咱們固然能夠寫一個腳本後臺運行,可是仍是不方便。那麼有沒有一種工具能夠解決這樣的問題呢。這就是咱們這裏要提到的tmux了。其實相似tmux的工具還有不少。例如gnu screen等。tmux恰好能夠解決咱們描述的問題,當咱們在tmux中工做的時候,即便關掉SecureCRT的鏈接窗口,再次鏈接,進入tmux的會話咱們以前的工做仍然在繼續。linux

tmux是一個linux下面的工具,在使用以前須要安裝,就像安裝linux下的其餘工具同樣方便。首先咱們經過SecureCRT鏈接登入遠程的linux機器,咱們將此時的環境稱爲終端環境。若是這個機器上並無安裝tmux,咱們須要安裝。例如在CentOs上是yum install tmux,完成以後咱們就可使用tmux命令了。tmux中有3種概念,會話,窗口(window),窗格(pane)。會話有點像是tmux的服務,在後端運行,咱們能夠經過tmux命令建立這種服務,而且能夠經過tmux命令查看,附加到後端運行的會話中。一個會話能夠包含多個窗口,一個窗口能夠被分割成多個窗格(pane)。首先咱們來看一下tmux的會話。shell

tmux的會話

1. tmux new -s session1 新建會話windows

使用 tmux new -s 命令新建一個會話 -s (實際上是session的頭字母)。後面指定會話名便可。運行以後會從shell的終端環境進入到會話環境中,並停留在剛纔新建的會話中。例如:後端

session

能夠看到進入session以後的顯示,在下面有一條綠色的狀態指示欄,左邊顯示的是當前會話的名字,緊接着是會話中的窗口(window)序號以及窗口名字。關於窗口的概念咱們後面再說,窗口名字後面有一個星號*表示是咱們操做的當前窗口,一個會話中能夠有多個窗口。當進入一個會話以後,會自動建立一個窗口。如上圖所示,上面的環境在本章中稱爲會話環境。這樣咱們就已經開始了tmux的使用,若是此時關閉掉SecureCRT軟件,下次在進入,該會話仍然在運行工。也就是說咱們在剛剛進入的會話環境中使用wget下載一個超大的文件,或者是編譯一個很是耗時的項目,咱們關閉掉該SecureCRT的鏈接,下次再進入,這個會話依然存在,會話裏面運行的編譯命令或者wget下載命令仍然在運行,並不會由於關閉SecureCRT而終止,這正是咱們須要的功能。不受SecureCRT網絡鏈接的影響。甚至咱們能夠關掉整個SecureCRT程序。服務器

2. ctrl+b d 退出會話,回到shell的終端環境網絡

咱們剛纔是經過 tmux new -s 命令建立一個tmux會話並進入該會話的,若是要退出這個會話環境回到終端環境(會話裏面的程序不會退出在後臺保持繼續運行)。應該如何操做呢,例如上圖,當前咱們在tmux的會話環境中,使用一個快捷鍵 ctrl+b d (按ctrl+b 以後再按一個字母d便可,字母d是detach的縮寫)。操做以後的結果以下:session

detach

能夠看到綠色的狀態欄消失了,而頂部出現一個[detached],表示已經脫離tmux會話,如今已經不在tmux的會話環境中回到shell終端環境中了。ssh

這裏有必要說一下在tmux會話環境中,咱們常常會用到tmux的組合鍵,通常的組合鍵中都會加一個前綴也就是 ctrl+b 另外,在後面的描述中,咱們說的終端環境是指使用SecureCRT進入遠程linux以後可是沒有進入tmux的會話環境的狀態。工具

經過上面的操做 ctrl+b d 以後,回到終端環境,實際上如今tmux的會話還在後臺運行,如何查看呢。佈局

3. tmux ls 終端環境查看會話列表

在終端環境中,咱們能夠經過tmux ls 命令來查看後臺運行中的tmux的會話列表,例如:

tmuxls

能夠看到在列出的列表中,只有1行,說明只有一個session,其中左邊的session1表示該session的名字,中間2 windows說明該session1會話中有2個window,右邊表示該會話建立的時間。若是該機器中有多個tmux會話在後臺運行,那麼這裏會列出多行。由於tmux會話在後臺運行,咱們猜想實際上確定是有tmux的進程在後臺運行來維持這些會話。咱們能夠ps看一下:

pstmux

能夠看到咱們以前建立會話的命令還在後端運行。

4. ctrl+b s 會話環境查看會話列表

上面的命令中咱們已經退出了tmux的會話環境,在終端環境中經過tmux ls 來列出當前linux機器後臺運行的tmux會話列表。那麼假設咱們當前環境已經在tmux的會話環境中,咱們如何獲得當前tmux的會話列表呢,若是每次都要退出當前會話,先回到shell終端環境再運行tmux ls 來查看就很不方便,那麼在tmux的會話環境中,咱們能夠經過 ctrl+b s 來獲取當前linux機器上tmux全部的後臺會話列表,例如操做以後顯示以下:

sessionls

此時能夠經過方向鍵選擇會話並回車,在會話間進行切換。

5. tmux a -t session1 從終端環境進入會話

若是在終端環境中運行 tmux ls 查看有tmux會話正在後臺運行,如何進入到該正在後臺中運行的會話呢,經過運行 tmux a -t session1 便可進入到該已存在的會話 session1 中。其中a字母是attach的頭字母,表示附加, -t 指定要進入已存在的會話名,若是不存在則會報告 session not found 錯誤。

6. tmux kill-session -t session1 銷燬會話

咱們能夠在終端環境和會話環境中銷燬會話,例如在終端環境中運行 tmux kill-session -t session1 結束名字爲session1的tmux會話。

在會話環境中運行 ctrl+b : (注意按組合鍵以後再按一個冒號鍵),狀態欄變成黃色以後提示咱們能夠在會話環境中輸入命令,此時輸入 kill-session -t session1 回車便可。其中session1是要銷燬的會話名。

會話銷燬以後,在終端環境中運行tmux ls 或者在會話環境中運行 ctrl+b s 則被銷燬的會話不會再出如今會話列表中。

7. tmux rename -t old_session_name  new_session_name  重命名會話

咱們能夠在終端環境中將會話重命名,如上面的命令,重命名以後經過 tmux ls 命令在終端環境中看到的列表中會顯示會話的新名稱。

8. ctrl + b $ 重命名會話 (在會話環境中)

在會話環境中,咱們能夠經過前綴命令加上 $ 的組合來重命名當前打開的會話的名字

tmux的window

一個tmux的會話中能夠有多個窗口(window),每一個窗口又能夠分割成多個pane(窗格)。咱們工做的最小單位實際上是窗格。默認狀況下在一個window中,只有一個大窗格,佔滿整個窗口區域。咱們在這個區域工做。

本節咱們講解一下tmux窗口的相關操做,後面咱們再說一下關於窗格(pane)的相關知識。首先在新建立的一個會話裏面是會默認建立一個窗口的。正如咱們上面提到過的圖同樣,以下所示:

session

新建立的會話中會默認建立一個窗口,該窗口名字通常是登錄終端的用戶名@主機名,咱們能夠經過 crtl+b , (組合鍵以後按一個逗號)來修改當前窗口的名字,如上圖所示的窗口名字myserver1就是修改以後的名字。該名字後面有一個*號,表示該窗口是活動窗口(鍵盤輸入會輸入到該窗口中)

1. 建立window

能夠在當前會話窗口中建立多個窗口,例如 ctrl+b c 建立以後會多出一個窗口以下圖所示:

create_window

默認狀況下建立出來的窗口由窗口序號+窗口名字組成,窗口名字能夠由上面提到的方法修改,能夠看到新建立的窗口後面有*號,表示是當前窗口。

2. 切換window

在同一個會話的多個窗口之間能夠經過以下快捷鍵進行切換:

ctrl+b p (previous的首字母) 切換到上一個window。

ctrl+b n (next的首字母) 切換到下一個window。

ctrl+b 0 切換到0號window,依次類推,可換成任意窗口序號

ctrl+b w (windows的首字母) 列出當前session全部window,經過上、下鍵切換窗口

ctrl+b l (字母L的小寫)相鄰的window切換

3. ctrl+b & 關閉window

ctrl+b & 關閉當前window,會給出提示是否關閉當前窗口,按下y確認便可。

tmux的pane

tmux的一個窗口能夠被分紅多個pane(窗格),能夠作出分屏的效果。

1. ctrl+b % 垂直分屏(組合鍵以後按一個百分號),用一條垂線把當前窗口分紅左右兩屏。

pane_v

2. ctrl+b " 水平分屏(組合鍵以後按一個雙引號),用一條水平線把當前窗口分紅上下兩屏。

pane_h

分屏以後光標停留在哪一個pane上,表示該pane是活動的,另一般狀況下當前pane會被綠色的線條圍起來。通常分屏以後當前窗口名字會重置爲默認窗口名字。經過屢次分屏操做,咱們能夠獲得各類樣子的分屏效果,例以下圖顯示的是一次垂直分屏以後,在右邊pane中再次水平分屏的效果:

pane_multi

能夠看到右下角的分屏是綠色框,說明是當前活動pane

3. 切換pane

ctrl+b o 依次切換當前窗口下的各個pane。

ctrl+b Up|Down|Left|Right 根據按箭方向選擇切換到某個pane。

ctrl+b Space (空格鍵) 對當前窗口下的全部pane從新排列布局,每按一次,換一種樣式。

ctrl+b z 最大化當前pane。再按一次後恢復。

4. 關閉pane

ctrl+b x 關閉當前使用中的pane,操做以後會給出是否關閉的提示,按y確認即關閉。

tmux window中的歷史輸出查看

在tmux裏面,由於每一個窗口(tmux window)的歷史內容已經被tmux接管了,當咱們在每一個tmux的window之間進行來回切換,來回操做,那麼咱們沒有辦法看到一個window裏面屏幕上的歷史輸出。沒辦法使用鼠標滾動(例如在SecureCRT中)查看以前的內容,在SecureCRT中經過鼠標滾動看到的輸出必定是各個tmux的window的輸出混亂夾雜在一塊兒的,若是要看當前窗口的歷史內容,那麼應該怎麼辦呢,經過在當前的tmux window 按 ctrl-b 進入copy mode,而後就能夠用PgUp/PgDn來瀏覽歷史輸出了,按q退出。

總結

tmux中的最重要的三個概念會話,窗口,pane的使用方法已經介紹完畢,其實這是咱們操做tmux的最經常使用功能,若是掌握好,足以應付大多數工做。另外tmux還有一些高級用法,例如能夠個性化的配置其組合鍵(官方默認的ctrl+b組合鍵按起來不太方即可以修改,UI設置,鼠標支持,複製粘貼等),可是我以爲這些高級功能基本不太用的到。若有須要你們能夠自行查閱相關資料。

相關文章
相關標籤/搜索