Tmux 是一個終端複用器(terminal multiplexer),非常有用,屬於常用的開發工具。
本文介紹如何使用 Tmux。
一、Tmux 是什麼?
1.1 會話與程式
命令列的典型使用方式是,開啟一個終端視窗(terminal window,以下簡稱"視窗"),在裡面輸入命令。使用者與計算機的這種臨時的互動,稱為一次"會話"(session) 。
會話的一個重要特點是,視窗與其中啟動的程式是連在一起的。開啟視窗,會話開始;關閉視窗,會話結束,會話內部的程式也會隨之終止,不管有沒有執行完。
一個典型的例子就是,SSH 登入遠端計算機,開啟一個遠端視窗執行命令。這時,網路突然斷線,再次登入的時候,是找不回上一次執行的命令的。因為上一次 SSH 會話已經終止了,裡面的程式也隨之消失了。
為了解決這個問題,會話與視窗可以"解綁":視窗關閉時,會話並不終止,而是繼續執行,等到以後需要的時候,再讓會話"繫結"其他視窗。
1.2 Tmux 的作用
Tmux 就是會話與視窗的"解綁"工具,將它們徹底分離。
(1)它允許在單個視窗中,同時訪問多個會話。這對於同時執行多個命令列程式很有用。
(2) 它可以讓新視窗"接入"已經存在的會話。
(3)它允許每個會話有多個連線視窗,因此可以多人實時共享會話。
(4)它還支援視窗任意的垂直和水平拆分。
類似的終端複用器還有 GNU Screen。Tmux 與它功能相似,但是更易用,也更強大。
二、基本用法
2.1 安裝
Tmux 一般需要自己安裝。
# Ubuntu 或 Debian $ sudo apt-get install tmux # CentOS 或 Fedora $ sudo yum install tmux # Mac $ brew install tmux
2.2 啟動與退出
安裝完成後,鍵入tmux
命令,就進入了 Tmux 視窗。
$ tmux
上面命令會啟動 Tmux 視窗,底部有一個狀態列。狀態列的左側是視窗資訊(編號和名稱),右側是系統資訊。
按下Ctrl+d
或者顯式輸入exit
命令,就可以退出 Tmux 視窗。
$ exit
2.3 字首鍵
Tmux 視窗有大量的快捷鍵。所有快捷鍵都要通過字首鍵喚起。預設的字首鍵是Ctrl+b
,即先按下Ctrl+b
,快捷鍵才會生效。
舉例來說,幫助命令的快捷鍵是Ctrl+b ?
。它的用法是,在 Tmux 視窗中,先按下Ctrl+b
,再按下?
,就會顯示幫助資訊。
然後,按下 ESC 鍵或q
鍵,就可以退出幫助。
三、會話管理
3.1 新建會話
第一個啟動的 Tmux 視窗,編號是0
,第二個視窗的編號是1
,以此類推。這些視窗對應的會話,就是 0 號會話、1 號會話。
使用編號區分會話,不太直觀,更好的方法是為會話起名。
$ tmux new -s <session-name>
上面命令新建一個指定名稱的會話。
3.2 分離會話
在 Tmux 視窗中,按下Ctrl+b d
或者輸入tmux detach
命令,就會將當前會話與視窗分離。
$ tmux detach
上面命令執行後,就會退出當前 Tmux 視窗,但是會話和裡面的程式仍然在後臺執行。
tmux ls
命令可以檢視當前所有的 Tmux 會話。
$ tmux ls # or $ tmux list-session
3.3 接入會話
tmux attach
命令用於重新接入某個已存在的會話。
# 使用會話編號 $ tmux attach -t 0 # 使用會話名稱 $ tmux attach -t <session-name>
3.4 殺死會話
tmux kill-session
命令用於殺死某個會話。
# 使用會話編號 $ tmux kill-session -t 0 # 使用會話名稱 $ tmux kill-session -t <session-name>
3.5 切換會話
tmux switch
命令用於切換會話。
# 使用會話編號 $ tmux switch -t 0 # 使用會話名稱 $ tmux switch -t <session-name>
3.6 重新命名會話
tmux rename-session
命令用於重新命名會話。
$ tmux rename-session -t 0 <new-name>
上面命令將0號會話重新命名。
3.7 會話快捷鍵
下面是一些會話相關的快捷鍵。
Ctrl+b d
:分離當前會話。Ctrl+b s
:列出所有會話。Ctrl+b $
:重新命名當前會話。
四、最簡操作流程
綜上所述,以下是 Tmux 的最簡操作流程。
- 新建會話
tmux new -s my_session
。- 在 Tmux 視窗執行所需的程式。
- 按下快捷鍵
Ctrl+b d
將會話分離。- 下次使用時,重新連線到會話
tmux attach-session -t my_session
。
五、窗格操作
Tmux 可以將視窗分成多個窗格(pane),每個窗格執行不同的命令。以下命令都是在 Tmux 視窗中執行。
5.1 劃分窗格
tmux split-window
命令用來劃分窗格。
# 劃分上下兩個窗格 $ tmux split-window # 劃分左右兩個窗格 $ tmux split-window -h
5.2 移動游標
tmux select-pane
命令用來移動游標位置。
# 游標切換到上方窗格 $ tmux select-pane -U # 游標切換到下方窗格 $ tmux select-pane -D # 游標切換到左邊窗格 $ tmux select-pane -L # 游標切換到右邊窗格 $ tmux select-pane -R
5.3 交換窗格位置
tmux swap-pane
命令用來交換窗格位置。
# 當前窗格上移 $ tmux swap-pane -U # 當前窗格下移 $ tmux swap-pane -D # 當前窗格左移 $ tmux swap-pane -L # 當前窗格左移 $ tmux swap-pane -R
5.4 窗格快捷鍵
下面是一些窗格操作的快捷鍵。
Ctrl+b %
:劃分左右兩個窗格。Ctrl+b "
:劃分上下兩個窗格。Ctrl+b <arrow key>
:游標切換到其他窗格。<arrow key>
是指向要切換到的窗格的方向鍵,比如切換到下方窗格,就按方向鍵↓
。Ctrl+b ;
:游標切換到上一個窗格。Ctrl+b o
:游標切換到下一個窗格。Ctrl+b {
:當前窗格左移。Ctrl+b }
:當前窗格右移。Ctrl+b Ctrl+o
:當前窗格上移。Ctrl+b Alt+o
:當前窗格下移。Ctrl+b x
:關閉當前窗格。Ctrl+b !
:將當前窗格拆分為一個獨立視窗。Ctrl+b z
:當前窗格全屏顯示,再使用一次會變回原來大小。Ctrl+b Ctrl+<arrow key>
:按箭頭方向調整窗格大小。Ctrl+b q
:顯示窗格編號。
六、視窗管理
除了將一個視窗劃分成多個窗格,Tmux 也允許新建多個視窗。
6.1 新建視窗
tmux new-window
命令用來建立新視窗。
$ tmux new-window # 新建一個指定名稱的視窗 $ tmux new-window -n <window-name>
6.2 切換視窗
tmux select-window
命令用來切換視窗。
# 切換到指定編號的視窗 $ tmux select-window -t <window-number> # 切換到指定名稱的視窗 $ tmux select-window -t <window-name>
6.3 重新命名視窗
tmux rename-window
命令用於為當前視窗起名(或重新命名)。
$ tmux rename-window <new-name>
6.4 視窗快捷鍵
下面是一些視窗操作的快捷鍵。
Ctrl+b c
:建立一個新視窗,狀態列會顯示多個視窗的資訊。Ctrl+b p
:切換到上一個視窗(按照狀態列上的順序)。Ctrl+b n
:切換到下一個視窗。Ctrl+b <number>
:切換到指定編號的視窗,其中的<number>
是狀態列上的視窗編號。Ctrl+b w
:從列表中選擇視窗。Ctrl+b ,
:視窗重新命名。
七、其他命令
下面是一些其他命令。
# 列出所有快捷鍵,及其對應的 Tmux 命令 $ tmux list-keys # 列出所有 Tmux 命令及其引數 $ tmux list-commands # 列出當前所有 Tmux 會話的資訊 $ tmux info # 重新載入當前的 Tmux 配置 $ tmux source-file ~/.tmux.conf
八、參考連結
- A Quick and Easy Guide to tmux
- Tactical tmux: The 10 Most Important Commands
- Getting started with Tmux
(完)