tmux快速入門、嵌套、窗口分割、批處理

本文介紹終端複用工具tmux,當然此類工具比較好的還有有些系統自帶的screen。

如果僅僅只是多標籤的功能,那麼putty結合一些工具也可以做到,或者乾脆使用xshell,當然tmux此類工具不僅僅是那麼簡單。另外一個選擇使用tmux/screen工具的原因是,有時我們會經常需要SSH或者telent遠程登錄到Linux服務器,有一些任務需要長時間運行,比如系統備份、數據傳輸等。通常情況下我們都是開一個遠程終端窗口,因爲執行時間比較長,一般需要等待它執行完畢,在此過程中不能關閉窗口或者網絡原因斷開連接,斷開之後就Game Over了。這個功能就有點類似nohupsetsid命令的實現了,而tmux/screen則集nohup/setsid和多標籤於一身。廢話少說,我們接下來看如何安裝使用它。

安裝

Ubuntu
sudo apt install tmux

Redhat/CentOS
yum install tmux

快速使用

tmux new-session -s name #創建新的session,session名爲name

ctrl+b c 創建新的窗口
ctrl+b n 切換到下一個窗口
ctrl+b p 切換到上一個窗口
ctrl+b 1 切換到1號窗口
ctrl+b d 脫離回話,回到原終端

tmux ls 顯示當前所有session
tmux a -t name 進入name這個回話
tmux kill-session -t name 介紹回話,裏面運行的所有程序會一起被結束

tmux嵌套  ctrl+b+b 再發指令就是發送到內層窗口

使用技巧

幾個名詞

tmux主要包括以下幾個模塊:

session 會話:一個服務器可以包含多個會話
window 窗口:一個會話可以包含多個窗口
pane 面板:一個窗口可以包含多個面板[強悍的分屏]

 

小試牛刀

列出了tmux的幾個基本模塊之後,就要來點實實在在的乾貨了,和screen默認激活控制檯的Ctrl+a不同,tmux默認的是Ctrl+b,使用快捷鍵之後就可以執行一些相應的指令了。當然如果你不習慣使用Ctrl+b,也可以在~/.tmux文件中加入以下內容把快捷鍵變爲Ctrl+a

# Set prefix key to Ctrl-a
unbind-key C-b
set-option -g prefix C-a

列出當前回話、連接回話

 

# tmux ls
0: 3 windows (created Mon Jul  2 16:50:03 2017) [150x40]
# tmux attach -t 0

以下所有的操作都是激活控制檯之後,即鍵入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 命令分割窗口

可以使用 tmux 命令在一個會話中分割窗口,改變佈局,甚至開啓程序。完成這些操作的關鍵是使用 -t target 開關。

當有一個命名 tmux 會話後,可以這樣與它進行關聯:

$ tmux attach -t [session_name]

我們使用 -t 開關將命令導向到相應的 tmux 會話。假設新建了一個命名爲development 的會話:

$ tmux new -s development

可以通過 tmux 命令對其窗口進行水平分割:

$ tmux split-window -h -t development

當與該會話關聯後,可以看到該會話的窗口被分割成了水平兩個窗格了。

分割主編輯器窗口,使其下面有一個小的終端窗口,可以使用 split-window 命令:

# scripting/development
tmux split-window -v -t development

也可以指定分割窗格所佔的百分比:

# scripting/development
tmux split-window -v -p 10 -t development

也可以選擇窗口使用的佈局:

# scripting/development
tmux select-layout -t development main-horizontal

此時,可以對首窗口進行分割和發送命令了。

向指定的窗口和窗格發送命令

每個窗口都有一個編號,其基編號由 set base-index 設置,而窗口中的每個窗格也有一個編號,其基編號由 setw pane-base-index 設置。要指定特定的窗口和窗格,使用格式: [session]:[window].[pane],如 development:1.2。因此,在會話的首窗口的第二個窗格中切換到項目目錄:

# scripting/development
tmux send-keys -t development:1.2 'cd ~/devproject' C-m

行末的 C-m 是 CTRL-m ,表示發送一個回車鍵。

批處理腳本

tmux new-session -s name1 -d #創建新的session,session名爲name1,並立即脫離
tmux send-keys -t name1 'nslookup g.cn' C-m #執行命令 
tmux new-window -t name1                    #開一個新窗口
tmux send-keys -t name1 'ping 8.8.8.8' C-m  #執行命令
tmux new-window -t name1
tmux send-keys -t name1 'ps -ef' C-m
tmux new-window -t name1
tmux send-keys -t name1 'netstat -antup' C-m

 

引用

http://kumu-linux.github.io/blog/2013/08/06/tmux/
http://www.atjiang.com/pragmatic-tmux-scripting-customized-envs/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章