Linux 終端復(fù)用神器 Tmux 使用詳解,看完可以回家躺平了~
Tmux 是 Terminal Multiplexer 的簡(jiǎn)稱,它是一款優(yōu)秀的終端復(fù)用軟件,類似 GNU screen,但比screen更出色。tmux來(lái)自于OpenBSD,采用BSD授權(quán)。使用它最直觀的好處就是, 通過(guò)一個(gè)終端登錄遠(yuǎn)程主機(jī)并運(yùn)行tmux后,在其中可以開啟多個(gè)控制臺(tái)而無(wú)需再“浪費(fèi)”多余的終端來(lái)連接這臺(tái)遠(yuǎn)程主機(jī), 還有一個(gè)好處就是當(dāng)終端關(guān)閉后該shell里面運(yùn)行的任務(wù)進(jìn)程也會(huì)隨之中斷,通過(guò)使用tmux就能很容易的解決這個(gè)問(wèn)題。
Tmux 可用于在一個(gè)終端窗口中運(yùn)行多個(gè)終端會(huì)話。不僅如此,還可以通過(guò) Tmux 使終端會(huì)話運(yùn)行于后臺(tái)或是按需接入、斷開會(huì)話,這個(gè)功能非常實(shí)用。
Tmux的使用場(chǎng)景
- 可以某個(gè)程序在執(zhí)行時(shí)一直是輸出狀態(tài),需要結(jié)合nohup、&來(lái)放在后臺(tái)執(zhí)行,并且ctrl+c結(jié)束。這時(shí)可以打開一個(gè)Tmux窗口,在該窗口里執(zhí)行這個(gè)程序,用來(lái)保證該程序一直在執(zhí)行中,只要Tmux這個(gè)窗口不關(guān)閉
- 處于異地的兩人可以對(duì)同一會(huì)話進(jìn)行操作,一方的操作另一方可以實(shí)時(shí)看到
- 可以在單個(gè)屏幕的靈活布局下開出很多終端,然后就能協(xié)作地使用它們
- 下班后,你需要斷開ssh或關(guān)閉電腦,將運(yùn)行的命令或任務(wù)放置后臺(tái)運(yùn)行
- 關(guān)閉終端,再次打開時(shí)原終端里面的任務(wù)進(jìn)程依然不會(huì)中斷
Tmux功能:
- 提供了強(qiáng)勁的、易于使用的命令行界面。
- 可橫向和縱向分割窗口。
- 窗格可以自由移動(dòng)和調(diào)整大小,或直接利用四個(gè)預(yù)設(shè)布局之一。
- 支持 UTF-8 編碼及 256 色終端。
- 可在多個(gè)緩沖區(qū)進(jìn)行復(fù)制和粘貼。
- 可通過(guò)交互式菜單來(lái)選擇窗口、會(huì)話及客戶端。
- 支持跨窗口搜索。
- 支持自動(dòng)及手動(dòng)鎖定窗口。
Tmux安裝
Ubuntu版本下可以直接使用apt安裝
- sudo apt-get install tmux
CentOS版本下使用yum安裝
- yum install -y tmux
在macOS中安裝
安裝 Homebrew
- ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝tmux
- brew install tmux
查看版本
- tmux -V
Tmux的使用
安裝完成后輸入命令tmux即可打開軟件,界面十分簡(jiǎn)單,類似一個(gè)下方帶有狀態(tài)欄的終端控制臺(tái);但根據(jù)tmux的定義,在開啟了tmux服務(wù)器后,會(huì)首先創(chuàng)建一個(gè)會(huì)話,而這個(gè)會(huì)話則會(huì)首先創(chuàng)建一個(gè)窗口,其中僅包含一個(gè)面板;也就是說(shuō),這里看到的所謂終端控制臺(tái)應(yīng)該稱作tmux的一個(gè)面板,雖然其使用方法與終端控制臺(tái)完全相同。
# tmux //直接進(jìn)入面板,如下效果:
Tmux的快捷鍵使用說(shuō)明:
Ctrl+b |
激活控制臺(tái);此時(shí)以下按鍵生效 |
|
系統(tǒng)操作 |
? |
列出所有快捷鍵;按q返回 |
d |
脫離當(dāng)前會(huì)話;這樣可以暫時(shí)返回Shell界面,輸入tmux attach能夠重新進(jìn)入之前的會(huì)話 |
|
D |
選擇要脫離的會(huì)話;在同時(shí)開啟了多個(gè)會(huì)話時(shí)使用 |
|
Ctrl+z |
掛起當(dāng)前會(huì)話 |
|
r |
強(qiáng)制重繪未脫離的會(huì)話 |
|
s |
選擇并切換會(huì)話;在同時(shí)開啟了多個(gè)會(huì)話時(shí)使用 |
|
: |
進(jìn)入命令行模式;此時(shí)可以輸入支持的命令,例如kill-server可以關(guān)閉服務(wù)器 |
|
[ |
進(jìn)入復(fù)制模式;此時(shí)的操作與vi/emacs相同,按q/Esc退出 |
|
~ |
列出提示信息緩存;其中包含了之前tmux返回的各種提示信息 |
|
窗口操作 |
c |
創(chuàng)建新窗口 |
& |
關(guān)閉當(dāng)前窗口 |
|
數(shù)字鍵 |
切換至指定窗口 |
|
p |
切換至上一窗口 |
|
n |
切換至下一窗口 |
|
l |
在前后兩個(gè)窗口間互相切換 |
|
w |
通過(guò)窗口列表切換窗口 |
|
, |
重命名當(dāng)前窗口;這樣便于識(shí)別 |
|
. |
修改當(dāng)前窗口編號(hào);相當(dāng)于窗口重新排序 |
|
f |
在所有窗口中查找指定文本 |
|
面板操作 |
” |
將當(dāng)前面板平分為上下兩塊 |
% |
將當(dāng)前面板平分為左右兩塊 |
|
x |
關(guān)閉當(dāng)前面板 |
|
! |
將當(dāng)前面板置于新窗口;即新建一個(gè)窗口,其中僅包含當(dāng)前面板 |
|
Ctrl+方向鍵 |
以1個(gè)單元格為單位移動(dòng)邊緣以調(diào)整當(dāng)前面板大小 |
|
Alt+方向鍵 |
以5個(gè)單元格為單位移動(dòng)邊緣以調(diào)整當(dāng)前面板大小 |
|
Space |
在預(yù)置的面板布局中循環(huán)切換;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled |
|
q |
顯示面板編號(hào) |
|
o |
在當(dāng)前窗口中選擇下一面板 |
|
方向鍵 |
移動(dòng)光標(biāo)以選擇面板 |
|
{ |
向前置換當(dāng)前面板 |
|
} |
向后置換當(dāng)前面板 |
|
Alt+o |
逆時(shí)針旋轉(zhuǎn)當(dāng)前窗口的面板 |
|
Ctrl+o |
順時(shí)針旋轉(zhuǎn)當(dāng)前窗口的面板 |
tmux的窗口
一個(gè)tmux的會(huì)話中可以有多個(gè)窗口,每個(gè)窗口又可以分割成多個(gè)窗格。我們工作的最小單位其實(shí)是窗格。默認(rèn)情況下在一個(gè)窗口中,只有一個(gè)大窗格,占滿整個(gè)窗口區(qū)域。我們?cè)谶@個(gè)區(qū)域工作。
先來(lái)看下tmux窗口的相關(guān)操作,后面我們?cè)僬f(shuō)一下關(guān)于窗格的相關(guān)知識(shí)。首先在新創(chuàng)建的一個(gè)會(huì)話里面是會(huì)默認(rèn)創(chuàng)建一個(gè)窗口的。正如我們上面提到過(guò)的圖一樣。
新創(chuàng)建的會(huì)話中會(huì)默認(rèn)創(chuàng)建一個(gè)窗口,本例中的窗口名字是0:bash,0是序號(hào),我們可以通過(guò) crtl+b , (組合鍵之后按一個(gè)逗號(hào))來(lái)修改當(dāng)前窗口的名字,如上圖所示的窗口名字linuxmi就是修改之后的名字。該名字后面有一個(gè)*號(hào),表示該窗口是活動(dòng)窗口(鍵盤輸入會(huì)輸入到該窗口中)
修改窗口名稱中
修改窗口名稱后
創(chuàng)建窗口
可以在當(dāng)前會(huì)話窗口中創(chuàng)建多個(gè)窗口,例如 ctrl+b c 創(chuàng)建之后會(huì)多出一個(gè)窗口如下圖所示:
默認(rèn)情況下創(chuàng)建出來(lái)的窗口由窗口序號(hào)+窗口名字組成,窗口名字可以由上面提到的方法修改,可以看到新創(chuàng)建的窗口后面有*號(hào),表示是當(dāng)前窗口。
切換窗口
這么多窗口,那么如何在同一個(gè)會(huì)話的多個(gè)窗口之間進(jìn)行切換呢?可以通過(guò)如下快捷鍵進(jìn)行操作:
ctrl+b p (previous的首字母) 切換到上一個(gè)窗口。
ctrl+b n (next的首字母) 切換到下一個(gè)窗口。
ctrl+b 0 切換到0號(hào)窗口,依次類推,可換成任意窗口序號(hào)
ctrl+b w (windows的首字母) 列出當(dāng)前session所有窗口,通過(guò)上、下鍵切換窗口
ctrl+b l (字母L的小寫)相鄰的窗口切換
3. ctrl+b & 關(guān)閉窗口
ctrl+b & 關(guān)閉當(dāng)前窗口,會(huì)給出提示是否關(guān)閉當(dāng)前窗口,按下y確認(rèn)即可。
tmux的窗格
tmux的一個(gè)窗口可以被分成多個(gè)窗格,可以做出分屏的效果。
1. ctrl+b % 垂直分屏(組合鍵之后按一個(gè)百分號(hào)),用一條垂線把當(dāng)前窗口分成左右兩屏。
2. ctrl+b " 水平分屏(組合鍵之后按一個(gè)雙引號(hào)),用一條水平線把當(dāng)前窗口分成上下兩屏。
分屏之后光標(biāo)停留在哪個(gè)窗格上,表示該窗格是活動(dòng)的,另外一般情況下當(dāng)前窗格會(huì)被綠色的線條圍起來(lái)。一般分屏之后當(dāng)前窗口名字會(huì)重置為默認(rèn)窗口名字。通過(guò)多次分屏操作,我們可以得到各種樣子的分屏效果,例如下圖顯示的是一次垂直分屏之后,在右邊窗格中再次水平分屏的效果:
可以看到右下角的分屏是綠色框,說(shuō)明是當(dāng)前活動(dòng)窗格
如何切換窗格
ctrl+b o 依次切換當(dāng)前窗口下的各個(gè)窗格。
ctrl+b Up|Down|Left|Right 根據(jù)按箭方向選擇切換到某個(gè)窗格。
ctrl+b Space (空格鍵) 對(duì)當(dāng)前窗口下的所有窗格重新排列布局,每按一次,換一種樣式。
ctrl+b z 最大化當(dāng)前窗格。再按一次后恢復(fù)。
還有一種切換方法是ctrl+b q,tmux會(huì)顯示每個(gè)窗格的序號(hào),按這個(gè)序號(hào)就可以跳到這里窗格去了(按慢了可不行,得在數(shù)字消失前按)。
關(guān)閉窗格
ctrl+b x 關(guān)閉當(dāng)前使用中的窗格,操作之后會(huì)給出是否關(guān)閉的提示,按y確認(rèn)即關(guān)閉。
終端內(nèi)顯示時(shí)間
快捷鍵:先按ctrl+b, 放開后再按t
退出時(shí)間界面:按q鍵
tmux ls 終端環(huán)境查看會(huì)話列表
在終端環(huán)境中,我們可以通過(guò)tmux ls 命令來(lái)查看后臺(tái)運(yùn)行中的tmux的會(huì)話列表,例如:
可以看到在列出的列表中,只有1行,說(shuō)明只有一個(gè)會(huì)話,其中左邊的0表示該會(huì)話的名字,中間3 windows說(shuō)明該會(huì)話0會(huì)話中有3個(gè)窗口,右邊表示該會(huì)話創(chuàng)建的時(shí)間。如果該機(jī)器中有多個(gè)tmux會(huì)話在后臺(tái)運(yùn)行,那么這里會(huì)列出多行。因?yàn)閠mux會(huì)話在后臺(tái)運(yùn)行,我們猜測(cè)實(shí)際上肯定是有tmux的進(jìn)程在后臺(tái)運(yùn)行來(lái)維持這些會(huì)話。
總結(jié)
tmux中的最重要的三個(gè)概念:會(huì)話,窗口,窗格的使用方法已經(jīng)介紹完畢,這也是我們操作tmux的最常用功能,只要熟練掌握,就足以應(yīng)付大多數(shù)日常工作。另外tmux還有一些高級(jí)用法,例如可以個(gè)性化的配置其組合鍵(官方默認(rèn)的ctrl+b組合鍵按起來(lái)不太方便可以修改,UI設(shè)置,鼠標(biāo)支持,復(fù)制粘貼等)。