tmux
Tmux 是一個(gè)終端復(fù)用器(terminal multiplexer),非常有用,屬于常用的開(kāi)發(fā)工具。
本文介紹如何使用 Tmux。
一、Tmux 是什么?
1.1 會(huì)話與進(jìn)程
命令行的典型使用方式是,打開(kāi)一個(gè)終端窗口(terminal window,以下簡(jiǎn)稱"窗口"),在里面輸入命令。用戶與計(jì)算機(jī)的這種臨時(shí)的交互,稱為一次"會(huì)話"(session)?。
會(huì)話的一個(gè)重要特點(diǎn)是,窗口與其中啟動(dòng)的進(jìn)程是連在一起的。打開(kāi)窗口,會(huì)話開(kāi)始;關(guān)閉窗口,會(huì)話結(jié)束,會(huì)話內(nèi)部的進(jìn)程也會(huì)隨之終止,不管有沒(méi)有運(yùn)行完。
一個(gè)典型的例子就是,SSH 登錄遠(yuǎn)程計(jì)算機(jī),打開(kāi)一個(gè)遠(yuǎn)程窗口執(zhí)行命令。這時(shí),網(wǎng)絡(luò)突然斷線,再次登錄的時(shí)候,是找不回上一次執(zhí)行的命令的。因?yàn)樯弦淮?SSH 會(huì)話已經(jīng)終止了,里面的進(jìn)程也隨之消失了。
為了解決這個(gè)問(wèn)題,會(huì)話與窗口可以"解綁":窗口關(guān)閉時(shí),會(huì)話并不終止,而是繼續(xù)運(yùn)行,等到以后需要的時(shí)候,再讓會(huì)話"綁定"其他窗口。
1.2 Tmux 的作用
Tmux 就是會(huì)話與窗口的"解綁"工具,將它們徹底分離。
(1)它允許在單個(gè)窗口中,同時(shí)訪問(wèn)多個(gè)會(huì)話。這對(duì)于同時(shí)運(yùn)行多個(gè)命令行程序很有用。
(2) 它可以讓新窗口"接入"已經(jīng)存在的會(huì)話。
(3)它允許每個(gè)會(huì)話有多個(gè)連接窗口,因此可以多人實(shí)時(shí)共享會(huì)話。
(4)它還支持窗口任意的垂直和水平拆分。
類似的終端復(fù)用器還有 GNU Screen。Tmux 與它功能相似,但是更易用,也更強(qiáng)大。
二、基本用法
2.1 安裝
Tmux 一般需要自己安裝。
Ubuntu 或 Debian
$ sudo apt-get install tmux
CentOS 或 Fedora
$ sudo yum install tmux
Mac
$ brew install tmux
2.2 啟動(dòng)與退出
安裝完成后,鍵入tmux命令,就進(jìn)入了 Tmux 窗口。
$ tmux
上面命令會(huì)啟動(dòng) Tmux 窗口,底部有一個(gè)狀態(tài)欄。狀態(tài)欄的左側(cè)是窗口信息(編號(hào)和名稱),右側(cè)是系統(tǒng)信息。
按下Ctrl+d或者顯式輸入exit命令,就可以退出 Tmux 窗口。
$ exit
2.3 前綴鍵
Tmux 窗口有大量的快捷鍵。所有快捷鍵都要通過(guò)前綴鍵喚起。默認(rèn)的前綴鍵是Ctrl+b,即先按下Ctrl+b,快捷鍵才會(huì)生效。
舉例來(lái)說(shuō),幫助命令的快捷鍵是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就會(huì)顯示幫助信息。
然后,按下 ESC 鍵或q鍵,就可以退出幫助。
三、會(huì)話管理
3.1 新建會(huì)話
第一個(gè)啟動(dòng)的 Tmux 窗口,編號(hào)是0,第二個(gè)窗口的編號(hào)是1,以此類推。這些窗口對(duì)應(yīng)的會(huì)話,就是 0 號(hào)會(huì)話、1 號(hào)會(huì)話。
使用編號(hào)區(qū)分會(huì)話,不太直觀,更好的方法是為會(huì)話起名。
$ tmux new -s <session-name>
上面命令新建一個(gè)指定名稱的會(huì)話。
3.2 分離會(huì)話
在 Tmux 窗口中,按下Ctrl+b d或者輸入tmux detach命令,就會(huì)將當(dāng)前會(huì)話與窗口分離。
$ tmux detach
上面命令執(zhí)行后,就會(huì)退出當(dāng)前 Tmux 窗口,但是會(huì)話和里面的進(jìn)程仍然在后臺(tái)運(yùn)行。
tmux ls命令可以查看當(dāng)前所有的 Tmux 會(huì)話。
$ tmux ls
or
$ tmux list-session
3.3 接入會(huì)話
tmux attach命令用于重新接入某個(gè)已存在的會(huì)話。
使用會(huì)話編號(hào)
$ tmux attach -t 0
使用會(huì)話名稱
$ tmux attach -t <session-name>
3.4 殺死會(huì)話
tmux kill-session命令用于殺死某個(gè)會(huì)話。
使用會(huì)話編號(hào)
$ tmux kill-session -t 0
使用會(huì)話名稱
$ tmux kill-session -t <session-name>
3.5 切換會(huì)話
tmux switch命令用于切換會(huì)話。
使用會(huì)話編號(hào)
$ tmux switch -t 0
使用會(huì)話名稱
$ tmux switch -t <session-name>
3.6 重命名會(huì)話
tmux rename-session命令用于重命名會(huì)話。
$ tmux rename-session -t 0 <new-name>
上面命令將0號(hào)會(huì)話重命名。
3.7 會(huì)話快捷鍵
下面是一些會(huì)話相關(guān)的快捷鍵。
Ctrl+b d:分離當(dāng)前會(huì)話。
Ctrl+b s:列出所有會(huì)話。
Ctrl+b $:重命名當(dāng)前會(huì)話。
四、最簡(jiǎn)操作流程
綜上所述,以下是 Tmux 的最簡(jiǎn)操作流程。
- 新建會(huì)話tmux new -s my_session。
- 在 Tmux 窗口運(yùn)行所需的程序。
- 按下快捷鍵Ctrl+b d將會(huì)話分離。
- 下次使用時(shí),重新連接到會(huì)話tmux attach-session -t my_session。
五、窗格操作
Tmux 可以將窗口分成多個(gè)窗格(pane),每個(gè)窗格運(yùn)行不同的命令。以下命令都是在 Tmux 窗口中執(zhí)行。
5.1 劃分窗格
tmux split-window命令用來(lái)劃分窗格。
劃分上下兩個(gè)窗格
$ tmux split-window
劃分左右兩個(gè)窗格
$ tmux split-window -h
5.2 移動(dòng)光標(biāo)
tmux select-pane命令用來(lái)移動(dòng)光標(biāo)位置。
光標(biāo)切換到上方窗格
$ tmux select-pane -U
光標(biāo)切換到下方窗格
$ tmux select-pane -D
光標(biāo)切換到左邊窗格
$ tmux select-pane -L
光標(biāo)切換到右邊窗格
$ tmux select-pane -R
5.3 交換窗格位置
tmux swap-pane命令用來(lái)交換窗格位置。
當(dāng)前窗格上移
$ tmux swap-pane -U
當(dāng)前窗格下移
$ tmux swap-pane -D
5.4 窗格快捷鍵
下面是一些窗格操作的快捷鍵。
Ctrl+b %:劃分左右兩個(gè)窗格。
Ctrl+b ":劃分上下兩個(gè)窗格。
Ctrl+b <arrow key>:光標(biāo)切換到其他窗格。<arrow key>是指向要切換到的窗格的方向鍵,比如切換到下方窗格,就按方向鍵↓。
Ctrl+b ;:光標(biāo)切換到上一個(gè)窗格。
Ctrl+b o:光標(biāo)切換到下一個(gè)窗格。
Ctrl+b {:當(dāng)前窗格與上一個(gè)窗格交換位置。
Ctrl+b }:當(dāng)前窗格與下一個(gè)窗格交換位置。
Ctrl+b Ctrl+o:所有窗格向前移動(dòng)一個(gè)位置,第一個(gè)窗格變成最后一個(gè)窗格。
Ctrl+b Alt+o:所有窗格向后移動(dòng)一個(gè)位置,最后一個(gè)窗格變成第一個(gè)窗格。
Ctrl+b x:關(guān)閉當(dāng)前窗格。
Ctrl+b !:將當(dāng)前窗格拆分為一個(gè)獨(dú)立窗口。
Ctrl+b z:當(dāng)前窗格全屏顯示,再使用一次會(huì)變回原來(lái)大小。
Ctrl+b Ctrl+<arrow key>:按箭頭方向調(diào)整窗格大小。
Ctrl+b q:顯示窗格編號(hào)。
六、窗口管理
除了將一個(gè)窗口劃分成多個(gè)窗格,Tmux 也允許新建多個(gè)窗口。
6.1 新建窗口
tmux new-window命令用來(lái)創(chuàng)建新窗口。
$ tmux new-window
新建一個(gè)指定名稱的窗口
$ tmux new-window -n <window-name>
6.2 切換窗口
tmux select-window命令用來(lái)切換窗口。
切換到指定編號(hào)的窗口
$ tmux select-window -t <window-number>
切換到指定名稱的窗口
$ tmux select-window -t <window-name>
6.3 重命名窗口
tmux rename-window命令用于為當(dāng)前窗口起名(或重命名)。
$ tmux rename-window <new-name>
6.4 窗口快捷鍵
下面是一些窗口操作的快捷鍵。
Ctrl+b c:創(chuàng)建一個(gè)新窗口,狀態(tài)欄會(huì)顯示多個(gè)窗口的信息。
Ctrl+b p:切換到上一個(gè)窗口(按照狀態(tài)欄上的順序)。
Ctrl+b n:切換到下一個(gè)窗口。
Ctrl+b <number>:切換到指定編號(hào)的窗口,其中的<number>是狀態(tài)欄上的窗口編號(hào)。
Ctrl+b w:從列表中選擇窗口。
Ctrl+b ,:窗口重命名。
七、其他命令
下面是一些其他命令。
列出所有快捷鍵,及其對(duì)應(yīng)的 Tmux 命令
$ tmux list-keys
列出所有 Tmux 命令及其參數(shù)
$ tmux list-commands
列出當(dāng)前所有 Tmux 會(huì)話的信息
$ tmux info
重新加載當(dāng)前的 Tmux 配置
$ tmux source-file ~/.tmux.conf