UNIX 下終端複用利器 tmux

tmux 是一個終端複用器(terminal multiplexer)。

簡介

tmux 是一個終端複用器類自由軟件,功能類似 GNU Screen,但使用 BSD 許可發佈。用戶可以通過 tmux 在一個終端內管理多個分離的會話,窗口及面板,對於同時使用多個命令行,或多個任務時非常方便。 — 維基百科

基本概念

tmux 的三個重要概念:會話(session)窗口(window)窗格(pane)


一個會話(session) 可以有多個窗口(window),一個窗口(window)又可以有多個窗格(pane)

安裝

<code># macOS
$ brew install tmux

# centos

$ yum install tmux/<code>

前綴鍵

tmux 的快捷鍵都要通過前綴鍵才可以使用。默認的前綴鍵是“Ctrl+b”,即先按下“Ctrl+b”進入快捷鍵模式,再按快捷鍵才會生效。


舉例:分離會話的快捷鍵是“Ctrl+b d”。用法是,在 tmux 窗口下,先按下“Ctrl+b”,再按下“d”,就會分離會話,進入正常命令行模式。

會話管理

  • tmux:創建一個無名稱的會話
  • tmux new -s daodaotest:創建名為 daodaotest 的會話
  • tmux new -s daodaotest -d:在後臺創建名為 daodaotest 的會話
  • tmux detach:分離會話
  • tmux ls:顯示會話列表
  • tmux a:接入最後一次會話
  • tmux a -t daodaotest:接入 daodaotest 會話
  • tmux kill-session:關閉最後一次會話
  • tmux kill-session -t 0:使用會話編號殺死會話
  • tmux kill-session -t daodaotest:使用會話名稱殺死會話
  • tmux kill-session -a -t daodaotest:關閉除 daodaotest 外的所有會話
  • tmux kill-server:關閉所有會話
  • tmux switch -t 0:使用會話編號切換會話
  • tmux switch -t daodaotest:使用會話名稱切換會話
  • tmux rename-session -t daodaotest daodaotest2:重命名會話名稱
  • exit 或 Ctrl+d:退出會話

會話快捷鍵

  • Ctrl+b s:列出會話,可進行切換
  • Ctrl+b d:分離當前會話
  • Ctrl+b $:重命名當前會話

窗口管理

  • tmux new-window:新建一個新窗口
  • tmux new-window -n daodaotest:新建一個 daodaotest 名稱的新窗口
  • tmux select-window -t 0~9:切換到指定編號的窗口
  • tmux select-window -t daodaotest:切換到 daodaotest 的窗口
  • tmux rename-window daodaotest2:重命名當前窗口為:daodaotest2

窗口快捷鍵

  • Ctrl+b c:新建一個新窗口
  • Ctrl+b ,:重命名當前窗口
  • Ctrl+b w:列出所有窗口,可進行切換
  • Ctrl+b n:進入下一個窗口
  • Ctrl+b p:進入上一個窗口
  • Ctrl+b l:進入之前操作的窗口
  • Ctrl+b 0~9:選擇編號0~9對應的窗口
  • Ctrl+b .:修改當前窗口索引編號
  • Ctrl+b ':切換至指定編號(可大於9)的窗口
  • Ctrl+b f:根據顯示的內容搜索窗格
  • Ctrl+b &:關閉當前窗口

窗格管理

  • tmux sp -h:水平方向創建窗格
  • tmux sp:垂直方向創建窗格
  • tmux select-pane -U:光標切換到上方窗格
  • tmux select-pane -D:光標切換到下方窗格
  • tmux select-pane -L:光標切換到左邊窗格
  • tmux select-pane -R:光標切換到右邊窗格
  • tmux swap-pane -U:當前窗格上移
  • tmux swap-pane -D:當前窗格下移

窗格快捷鍵

  • Ctrl+b %:水平方向創建窗格
  • Ctrl+b ":垂直方向創建窗格
  • Ctrl+b Up|Down|Left|Right:根據箭頭方向切換窗格
  • Ctrl+b q:顯示窗格編號
  • Ctrl+b o:順時針切換窗格
  • Ctrl+b }:與下一個窗格交換位置
  • Ctrl+b {:與上一個窗格交換位置
  • Ctrl+b x:關閉當前窗格
  • Ctrl+b space(空格鍵):重新排列當前窗口下的所有窗格
  • Ctrl+b !:將當前窗格置於新窗口
  • Ctrl+b Ctrl+o:逆時針旋轉當前窗口的窗格
  • Ctrl+b t:在當前窗格顯示時間
  • Ctrl+b z:放大當前窗格(再次按下將還原)
  • Ctrl+b i:顯示當前窗格信息

使用場景

後臺運行程序

在做自動化部署腳本時,遠程執行目標服務器 xStart.sh 腳本,來後臺啟動 java 應用。腳本如下:

<code># 啟動應用
start() {
......
if [ "X$pid" = "X" ]; then
# 關閉之前終端
tmux kill-session -t $SYSTEM_NAME-$PORT
# 創建終端
tmux new -s $SYSTEM_NAME-$PORT -d
# 終端啟動服務
tmux send -t $SYSTEM_NAME-$PORT "cd $PIDDIR;nohup java $JAVA_OPTS -jar $SYSTEM_NAME*.jar $SPRING_ACTIVE --server.port=$PORT $EXT_OPTS >/dev/null 2>&1 &" ENTER
else
echo "$SYSTEM_NAME is already running."

exit 1
fi
......
}
/<code>

大量數據遷移

在遷移 maven 私服 nexus 時,nexus 數據大概有 13G 左右,在使用scp進行遷移,終端超時關閉後就會中斷。操作命令如下:

<code># 創建 tmux 會話
$ tmux new -s nexus-scp

# 在 tmxu 會話中,執行 scp 命令
$ scp -R [email protected]:~/nexus .

# 分離會話,後臺執行即可
$ Ctrl+b d/<code>

快速恢復工作現場

日常工作中,每天都要查詢某些日誌或者監控某些指標時,可以通過tmux保存現場,下次快速恢復工作現場,提高工作效率。

nginx 操作現場


Linux/UNIX 下終端複用利器 tmux


分享到:


相關文章: