習慣使用 linux terminal 遠端處理 server 工作的人,有時會遇到一個問題,就是在遠端 terminal 處理過程中,有時會遇到一些程式處理很久,或是需要同時查看 log,系統 loading 的狀況,這時,就需要再對同一台機器打開另一個 terminal,導致 terminal 的頁籤越來越多。更麻煩的是有時候遇到網路異常斷線,所有 terminal 的連線中斷了,就必須要重新一個一個再連接 server。
tmux 是一個 terminal multiplexer,可讓使用者以單一terminal,連接多個 terminal sessions或是windows。換句話說,就不需要再連接多個 terminal tab。另外,更重要的功能是,tmux 內建了一個 terminal server,即使 terminal 斷線,只要 tmux server 還存活,任何時候再重連,都可以取回剛剛工作中的 terminal sessions/windows,繼續工作。
安裝
在 centos 安裝 tmux
yum install tmux
在 macos 安裝 tmux
sudo port install tmux
tmux 指令
只要在 terminal 執行 tmux
,就會啟動 tmux server,另外還有一些常用的指令
# 啟動新的 terminal session
tmux new -s sessionanme
tmux new -s sessionanme -n windowname
# 列出所有 tmux sessions
tmux ls
# a/at/attach session
tmux at -t sessionname
tmux a #
# kill session
tmux kill-session -t sessioname
# 當 session 內所有shell都結束,該 session 就會中止
exit
進入 tmux 後,terminal 下方就會出現一條綠色的 status bar,很明確的顯示目前正在 tmux 工作 session 中。
tmux 專有名詞的概念
tmux server
啟動 tmux 會產生一個 server,負責管理所有 sessions
session
一個 terminal 可以有多個 sessions,通常一個 project 會使用一個 session。
window
一個 session 可以有多個 window,每一個 window 會佔滿整個 terminal 畫面,可以開多個 window,讓某些 window 在背景運作。
pane
每一個 windows 可切割多個區塊,每一個區塊就是一個 pane。通常會將 window 水平或垂直切割,增加多個 pane。
控制指令
進入 tmux 後,跟平常一樣,會在多個 shell 中切換執行工作,如果需要對 tmux 下指令,要用 Ctrl-b 功能鍵啟動。
因為 Ctrl-b 會有點難按,大部分都會改成其他的 function key,在 ~/.tmux.conf 設定檔中,可增加這些設定,將 Ctrl-b 改為 Ctrl-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
另外可在設定檔中加上快速鍵,以下設定,可以在 Ctrl-a 後,直接按 | ,就會水平方向增加一個 shell pane。
unbind %
bind | split-window -h
bind - split-window -v
啟用滑鼠,可用滑鼠修改 pane 的大小,捲動視窗
set -g mouse on
- session 處理的指令
大部分都是在原本的 terminal 中,不是 tmux 的 function
tmux ls
tmux attach -t 0
tmux kill-session -t 0
Ctrl-a (由 Ctrl-b 改為 Ctrl-a) 後的 fuction
Ctrl-a 後的 function | 功能 |
---|---|
d | detach session |
s | list session |
:new | new session |
$ | 為 session 命名 |
- window 指令
Ctrl-a 後的 function | 功能 |
---|---|
c | 產生新 window |
& | 關閉目前的 window |
p | 切換到上一個 window |
n | 切換到下一個 window |
w | list windows |
f | find window |
- pane 指令
Ctrl-a 後的 function | 功能 |
---|---|
% (改為 |) | 水平分割新的 pane |
" (改為 -) | 垂直分割新的 pane |
方向鍵 | 切換到其他 panes |
x | 關閉目前的 pane |
o | 交換 pane |
切換 layout | |
q | 顯示每個 pane 的編號,再按編號,可切換到該 pane |
{ | 跟上一個 pane 交換位置 |
} | 跟下一個 pane 交換位置 |
z | 切換 pane 最大/最小化 |
~/.tmux.conf 設定的內容
set -g default-terminal "screen-256color"
set -g display-time 3000
set -g escape-time 0
set -g history-limit 65535
set -g base-index 1
set -g pane-base-index 1
# Ctrl-b -> Ctrl-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# enable mouse
set -g mouse on
# split window
unbind %
bind | split-window -h
bind - split-window -v
# <prefix> or Ctrl- or <prefix> Ctrl-
# k --- previous pane
# h l --- previous window / next window
# j --- next pane
# navigate windows
unbind-key l
bind-key h select-window -t :-
bind-key C-h select-window -t :-
bind-key -n C-h select-window -t :-
bind-key l select-window -t :+
bind-key C-l select-window -t :+
bind-key -n C-l select-window -t :+
# navigate panes
bind-key j select-pane -t :.-
bind-key C-j select-pane -t :.-
bind-key -n C-j select-pane -t :.-
bind-key k select-pane -t :.+
bind-key C-k select-pane -t :.+
bind-key -n C-k select-pane -t :.+
References
tmux ,不只是 terminal multiplexer
沒有留言:
張貼留言