什么是tmux?
Tmux是一個終端復用工具,用于在一個終端窗口中運行多個終端會話的能力。可以簡單的理解為他允許你在一個終端下模擬出多個終端來進行操作,而不是不停的打開終端標簽。尤其是對于遠程服務(wù)器而言:
- 運行一個腳本的時候,如果服務(wù)器斷掉當前進程被殺死,腳本就無法運行了
- 運行一個腳本或編輯一個文件的時候,想要切換目錄等操作就必須重新打開一個SSH連接
如果遇到上面兩個問題都都可以求助于tmux來解決。
Tmux安裝
對于linux來說,使用對應的包管理器安裝即可:
yum install tmux
Tmux基本概念
tmux采用C/S模型構(gòu)建,輸入tmux相當于開啟了一個服務(wù)器,此時默認將新建一個會話,然后會話中默認新建一個窗口中默認新建一個面板。這就是Tmux中最重要的三個概念:
- 會話(session):會話就相當于一個SSH連接,默認情況下SSH連接與啟動的會話是連在一起的,打開連接就開啟了一段會話,而關(guān)閉連接不管這個會話中進程是否運行完也隨之結(jié)束。而tmux實際上就是將會話與連接解綁,連接斷開后會話并不終止而是繼續(xù)運行,等到需要的時候還可以綁定到其他連接上,而對于本機而言SSH連接也等同于打開一個終端窗口。
- 窗口(window):一個會話可以包含多個窗口,其實就是一個會話可以綁定到多個窗口上。窗口默認會充滿會話界面,因此這些窗口中可以運行相關(guān)性不大的任務(wù)。
- 面板(pane):一個窗口可以被分割為多個面板,一個窗口下的面板都處于同一個界面下,這些面板適合運行相關(guān)性高的任務(wù),以便同時觀察他們的運行情況。
而我們使用Tmux實際上就是對這三個概念的新建、關(guān)閉、修改。
會話(session)
- 新建會話
tmux # 新建一個無名稱的會話,不推薦
tmux new -s demo #新建一個名稱為demo的會話,可以使用alias來創(chuàng)建別名
如果處于tmux中,終端下會出現(xiàn)一個狀態(tài)欄:

其中如果使用tmux創(chuàng)建無名會話的話,默認名稱會從0到1這樣的順序排列。
注意,在tmux會話中如果執(zhí)行這個命令彈出以下錯誤:
sessions should be nested with care, unset $TMUX to force
意思就是會話嵌套必須小心,也可以復位$TMUX來強制進行會話嵌套。當然建議還是不要進行會話嵌套,如果實在要在會話中新建一個會話的話可以使用:
ctrl+b :new
2.重命名會話
如果你使用tmux直接創(chuàng)建一個默認的會話時,其名稱是0,1,2這樣的名稱并不好記憶,此時就可以使用rename命令來重命名會話:
tmux rename-session -t old-name new-name
- 斷開當前會話
其實就是講當前的窗口與該會話解綁,然當前窗口執(zhí)行其他工作,而將會話置于后臺,此時會話并不會被關(guān)閉,而是在后臺繼續(xù)運行。
tmux detach #斷開當前會話
也可以使用ctrl+b d這個快捷鍵來斷開當前會話。
- 進入之前的會話
斷開會話后,如果想要接著上次留下的現(xiàn)場繼續(xù)工作,就需要接入會話了,使用attach命令來接入:
tmux attach-session -t demo #接入demo會話
tmux a -t demo #可以使用簡寫形式 a 就相當于 attach-session
tmux a #默認進入第一個會話
- 殺死會話
當一個會話的使命完成后,就可以使用kill命令來殺死他們,kill命令有kill-pane kill-server kill-session和kill-window四個,其中kill-session就是用來殺死會話的。
tmux kill-session -t demo #殺死demo會話
tmux kill-server #關(guān)閉服務(wù)器,就相當于殺死了所有的會話
- 查看所有會話
在你擁有多個會話的時候,不知道如何切換是就需要查看所有的會話了:
tmux list-session #查看所有會話
tmux ls #簡寫形式
也可以通過ctrl+b s來進入一個交互式會話列表,這里羅列了tmux管理的所有會話以及會話的窗口,你可以使用方向鍵在選中一個按下回車進入相應的會話窗口。

- 切換會話
如果我們想要從一個會話中切換到另一個會話中,有三種方法,最笨的就是首先detach斷開當前會話,然后attach到你想切換的會話中。最簡單的就是使用ctrl+b s進入交互式會話列表,然后選擇一個會話。還有一個tmux給出的switch命令也可以實現(xiàn)在會話中直接切換到其他會話:
tmux switch -t session-name
總結(jié)
| 命令 | 快捷鍵 | 描述 |
|---|---|---|
| tmux new -s session-name | ctrl+b :new | 創(chuàng)建新會話 |
| tmux rename-session -t oldname newname | ctrl+b $ | 重命名會話 |
| tmux detach | ctrl+b d | 斷開當前會話 |
| tmux attach-session -t session-name | 無 | 接入一個會話 |
| tmux kill-session -t session-name | 無 | 殺死一個會話 |
| tmux list-session | ctrl+b s | 列出當前會話 |
| tmux switch -t session-name | 無 | 切換會話 |
窗口(window)
一個會話默認開啟一個窗口,但是tmux允許你新建多個窗口。這可能就是進程和協(xié)程的關(guān)系,如果對于不同的任務(wù)開啟不同的會話其開銷肯定要比在一個會話中開啟多個窗口要低。所以說一般情況下我們應該都只需要開啟一個常住的會話,在其中開啟多個窗口來管理多個任務(wù)。如果需要臨時測試一個項目的時候在開啟一個會話用完銷毀就好了。
- 新建窗口
tmux new-window -n test #新建一個名稱為test的窗口
也可以通過chrl+b c來新建窗口
可以在狀態(tài)欄下左下角查看窗口的狀態(tài):

- 關(guān)閉窗口
tmux kill-window #關(guān)閉當前窗口
tmux kill-window -t window-name/window-num #關(guān)閉某個窗口,可以是名稱也可以說編號
也可以通過chtl+b &來關(guān)閉窗口
- 切換窗口
tmux select-window -t window-name/window-num #切換到某一個窗口
切換窗口有很多快捷鍵 ctrl+b 0~9切換到指定窗口,ctrl+b p切換到上一個窗口,ctrl+b n切換到下一個窗口。ctrl+b w打開一個選擇列表來選擇其中一個窗口切換。
- 重命名窗口
tmux rename-window new-name #為當前窗口重命名
快捷鍵為ctrl+b ,來重命名當前窗口。
總結(jié)
| 命令 | 快捷鍵 | 描述 |
|---|---|---|
| tmux new-window -n window-name | ctrl+b c | 新建窗口 |
| tmux kill-window -t window-name/window-num | ctrl+b & | 關(guān)閉窗口 |
| tmux select-window -t window-name/window-num | ctrl+b 0~9/p/n/w | 切換窗口 |
| tmux rename-window new-name | ctrl+b , | 重命名窗口 |
面板操作
Tmux可以將窗口分成多個面板,每個面板下可以運行不同的命令。
- 劃分面板
tmux split-window #上下劃分兩個面板 ctrl+b %
tmux split-window -h #左右劃分兩個面板 ctrl+b "
- 移動光標
tmux select-pane -U #切換到上方面板 ctrl+b 方向鍵來實現(xiàn)
tmux select-pane -D #切換到下方面板
tmux select-pane -L #切換到左方面板
tmux select-pane -R #切換到右方面板
- 交換窗格位置
tmux swap-pane -U #當前面板上移 ctrl+b {
tmux swap-pane -D #當前面板下移 ctrl+b }
- 關(guān)閉窗格
tmux kill-pane #關(guān)閉當前窗格 ctrl+b x
總結(jié)
| 命令 | 快捷鍵 | 描述 |
|---|---|---|
| tmux split-window | ctrl+b " | 上下劃分面板 |
| tmux split-window -h | ctrl+b % | 左右劃分面板 |
| tmux kill-pane | ctrl+b x | 關(guān)閉當前面板 |
| tmux resize-pane -Z | ctrl+b z | 最大化面板,再次重復命令恢復正常 |
| tmux display-panes | ctrl+b q | 顯示當前面板編號,在編號消失前輸入對應的數(shù)字可切換到對應面板 |
| tmux swap-pane -U | ctrl+b { | 向前置換當前面板 |
| tmux swap-pane -D | ctrl+b } | 向后置換當前面板 |
| tmux select-pane -UDLR | ctrl+b 方向鍵 | 移動光標切換面板 |
| tmuxse select-pane -t :.+ | ctrl+b o | 選擇下一個面板 |
| tmux resize-pane -UDLR 5 | ctrl+b alt+方向鍵 | 調(diào)整面板大小 |
| tmux clock-mode | ctrl+b t | 顯示時鐘 |
其他命令
tmux list-keys #列出所有快捷鍵
tmux list-commands #列出所有命令
參考:
tmux使用手冊