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