“君子生非異也,善假於物也” 。–語出《荀子·勸學》
如果記得沒錯的話,《荀子·勸學》我們這一代高中的時候應該都讀過這篇文章。原意大概是君子的資質與一般人沒有什么區別,君子之所以高於一般人,是因為他能善於利用外物。對於技術人來說,好工具的選擇和使用往往可以省去很多不必要的麻煩,好的開源工具很多,看你如何去使用。對於終端復用工具這里推薦使用tmux,當然此類工具比較好的還有screen,不過相對screen 這里我更傾向於推薦tmux[強悍的分屏等]。
如果僅僅只是多標簽的功能,那么putty結合一些工具也可以做到,或者干脆使用xshell,當然tmux此類工具不僅僅是那么簡單。另外一個選擇使用tmux/screen工具的原因是,有時我們會經常需要SSH或者telent遠程登錄到Linux服務器,有一些任務需要長時間運行,比如系統備份、數據傳輸等。通常情況下我們都是開一個遠程終端窗口,因為執行時間比較長,一般需要等待它執行完畢,在此過程中不能關閉窗口或者網絡原因斷開連接,斷開之后就Game Over了。這個功能就有點類似nohup
和setsid
命令的實現了,而tmux/screen則集nohup/setsid和多標簽於一身。廢話少說,我們接下來看如何安裝使用它。
安裝
安裝的話這里就不過說明了,不同的Linux發行版相應的包管理機制不同,安裝tmux包即可。
使用技巧
幾個名詞
tmux主要包括以下幾個模塊:
session | 會話:一個服務器可以包含多個會話 |
window | 窗口:一個會話可以包含多個窗口 |
pane | 面板:一個窗口可以包含多個面板[強悍的分屏] |
小試牛刀
列出了tmux的幾個基本模塊之后,就要來點實實在在的干貨了,和screen
默認激活控制台的Ctrl+a
不同,tmux默認的是Ctrl+b
,使用快捷鍵之后就可以執行一些相應的指令了。當然如果你不習慣使用Ctrl+b
,也可以在~/.tmux
文件中加入以下內容把快捷鍵變為Ctrl+a
:
|
以下所有的操作都是激活控制台之后,即鍵入Ctrl+b
前提下才可以使用的命令【這里假設快捷鍵沒改,改了的話則用Ctrl+b
】。
基本操作:
? | 列出所有快捷鍵;按q返回 |
d | 脫離當前會話,可暫時返回Shell界面,輸入tmux attach能夠重新進入之前會話 |
s | 選擇並切換會話;在同時開啟了多個會話時使用 |
D | 選擇要脫離的會話;在同時開啟了多個會話時使用 |
: | 進入命令行模式;此時可輸入支持的命令,例如kill-server所有tmux會話 |
[ | 復制模式,光標移動到復制內容位置,空格鍵開始,方向鍵選擇復制,回車確認,q/Esc退出 |
] | 進入粘貼模式,粘貼之前復制的內容,按q/Esc退出 |
~ | 列出提示信息緩存;其中包含了之前tmux返回的各種提示信息 |
t | 顯示當前的時間 |
Ctrl+z | 掛起當前會話 |
窗口操作:
c | 創建新窗口 |
& | 關閉當前窗口 |
數字鍵 | 切換到指定窗口 |
p | 切換至上一窗口 |
n | 切換至下一窗口 |
l | 前后窗口間互相切換 |
w | 通過窗口列表切換窗口 |
, | 重命名當前窗口,便於識別 |
. | 修改當前窗口編號,相當於重新排序 |
f | 在所有窗口中查找關鍵詞,便於窗口多了切換 |
面板操作:
“ | 將當前面板上下分屏 |
% | 將當前面板左右分屏 |
x | 關閉當前分屏 |
! | 將當前面板置於新窗口,即新建一個窗口,其中僅包含當前面板 |
Ctrl+方向鍵 | 以1個單元格為單位移動邊緣以調整當前面板大小 |
Alt+方向鍵 | 以5個單元格為單位移動邊緣以調整當前面板大小 |
空格鍵 | 可以在默認面板布局中切換,試試就知道了 |
q | 顯示面板編號 |
o | 選擇當前窗口中下一個面板 |
方向鍵 | 移動光標選擇對應面板 |
{ | 向前置換當前面板 |
} | 向后置換當前面板 |
Alt+o | 逆時針旋轉當前窗口的面板 |
Ctrl+o | 順時針旋轉當前窗口的面板 |
z | tmux 1.8新特性,最大化當前所在面板 |
.tmux.conf基本配置
軟件到手了,自己怎么舒服就怎么用。定制主要還是在於.tmux.conf
配置文件的配置,以下列出我的配置文件:
|
開啟批量執行
如果已經修改prefix鍵位Ctrl+a
,則Ctrl+a
[默認Ctrl+b]后輸入:set synchronize-panes
,輸入:set sync [TAB]鍵可自動補齊
取消批量執行模式重復之前操作即可
腳本化啟動
把以下腳本內容加入到~/.bashrc,即可每次登錄進入到tmux
|
效果如下:
從 screen 切換到 tmux 十分平滑,tmux 的按鍵設置與 screen 大都相同,只是其默認按鍵前綴為 Ctrl-b。為了延續在 screen 中的使用習慣,我將其更改為 Ctrl-a。將下列內容加到 $HOME/.tmux.conf 中即可:
set -g prefix ^a
unbind ^b
bind a send-prefix
按鍵綁定
我還在 .tmux.conf 中定義了以下按鍵綁定:
-
水平或垂直分割窗口
unbind '"' bind - splitw -v # 分割成上下兩個窗口 unbind % bind | splitw -h # 分割成左右兩個窗口
-
選擇分割的窗格
bind k selectp -U # 選擇上窗格 bind j selectp -D # 選擇下窗格 bind h selectp -L # 選擇左窗格 bind l selectp -R # 選擇右窗格
-
重新調整窗格的大小
bind ^k resizep -U 10 # 跟選擇窗格的設置相同,只是多加 Ctrl(Ctrl-k) bind ^j resizep -D 10 # 同上 bind ^h resizep -L 10 # ... bind ^l resizep -R 10 # ...
-
交換兩個窗格
bind ^u swapp -U # 與上窗格交換 Ctrl-u bind ^d swapp -D # 與下窗格交換 Ctrl-d
-
執行命令,比如看 Manpage、查 Perl 函數
bind m command-prompt "splitw -h 'exec man %%'" bind @ command-prompt "splitw -h 'exec perldoc -f %%'"
定制狀態行
狀態行左邊默認就很好了,我對右邊定制了一下,顯示 uptime 和 loadavg:
set -g status-right "#[fg=green]#(uptime.pl)#[default] •
#[fg=green]#(cut -d ' ' -f 1-3 /proc/loadavg)#[default]"
下面兩行設置狀態行的背景和前景色:
set -g status-bg black
set -g status-fg yellow
默認啟動應用
當 tmux 啟動時,可以默認啟動一些應用:
new -s work mutt # 新建名為 work 的會話,並啟動 mutt
neww rtorrent # 啟動 rtorrent
neww vim # 啟動 vim
neww zsh
selectw -t 3 # 默認選擇標號為 3 的窗口
復制與粘貼操作
-
按 C-a [ 進入復制模式,如果有設置
setw -g mode-keys vi
的話,可按 vi 的按鍵模式操作。移動至待復制的文本處,按一下空格,結合 vi 移動命令開始選擇,選好后按回車確認。 -
按 C-a ] 粘貼已復制的內容。