介紹最基本的 Tmux 使用方式以及相關設定。
看網址就知道又是古老的文章債了,到最近還有在使用,所以就整理一下發出來。
前言
大家在使用終端機時會不會常常開很多視窗,要找到特定視窗時都要消耗一些眼力。今天要來介紹的工具 Tmux 可以大幅減少這類困擾。此外,在遠端進行實驗時也常常會使用這個工具來保持運算的執行,不用擔心現在 ssh 的連線中斷導致正在跑的程式被砍掉。
一堆視窗
原理
tmux 是採用 client-server 架構 運作。
- Server:tmux 啟動後會建立一個背景常駐的 server process(通常是 tmux 本身),管理所有的 session、window、pane 等。
- Client:當你啟動 tmux 或 attach 到 session 時,你的終端會變成一個 tmux client,與 server 進行通訊。
tmux 有一套結構化的資源管理:
- Session:一組獨立的作業環境,像一個虛擬桌面。
- Window:Session 中的視窗,對應到一個完整的 shell。
- Pane:Window 中的分割區塊,每個 pane 是一個獨立的 pseudo-terminal。
tmux Server
└── Session 1
├── Window 1
│ ├── Pane 1
│ └── Pane 2
└── Window 2
└── Pane 1
安裝
sudo apt install tmux
使用方式
完整使用方式請參考 官方文件。
一開始使用可能會有點混亂,先說明一下底下的說明把 tmux 的環境切做外面跟裡面,外是你一開始打開的終端機 (還沒跑 tmux),當執行 tmux 後底下有一條狀態列的是裡面。通常 tmux ...
的指令是打在外面,而 ctrl-b ...
是在裡面按。
啟動 Tmux
tmux
下面出現一排綠色狀態就代表成功進入 tmux,此時代表了 Server 啟動,而且 Client (目前這個終端機畫面) 連上。
tmux 進入畫面
離開 Tmux
若只是要暫時離開 tmux 環境而不停止裡面正在執行的內容 (空閒的終端機也算正在執行的程式),可以使用 ctrl-b d
(先按 ctrl-b
接著再按 d
,在整個快捷鍵中會一直用到 ctrl-b
它又稱作 PREFIX)。此時可以當作 Client 與 Server 斷開連結。
若要離開 session 時沒有任何東西在前景執行則 session 就會被刪除。最直接的方法就是在空閒的終端機按下 ctrl-d
或是輸入 exit
後按下 enter
。
我們先暫時離開目前的 tmux 然後使用 tmux ls
觀察。它會顯示目前 session 0 中有一個 window 正在執行。
若想再進入剛剛的 tmux 環境可以使用 tmux attach
(tmux a
)。Client 就會再次連上 Server。
Session
若是原本就有 session 存在,在外面又輸入一次 tmux
(不是使用 tmux a
) 則會多新增一個 session。tmux 也支援自定義名稱: tmux new -s NAME
。tmux attach -t NAME
可以讓 Client 開啟特定的 session。
named session
在外刪除特定 session 可使用 tmux kill-session -t NAME
。想暴力一次刪除全部則可以使用 tmux kill-server
直接把 Server 刪除,底下的所有 session 也會消失。
Window
使用 ctrl-b c
新增新的視窗,*
表示目前正在哪個視窗。可以用 ctrl-b n
、ctrl-b p
前後移動,或是 ctrl-b 數字
跳到對應編號的 window。ctrl-b ,
可以對 window 重新命名。
Pane
除了 window,tmux 還可以分出左右或上下的窗格。垂直分割畫面 (左右) ctrl b %
,水平分割畫面 (上下) ctrl-b "
。在窗格間切換使用 ctrl-b 方向鍵
。
其他好用的快捷鍵
PREFIX w
: open the dashboard of all sessions and windowsPREFIX s
: open the dashboard of all sessionsPREFIX z
: zoom in/out the current panePREFIX t
: show current timePREFIX ?
: check all key bindingsPREFIX :
: change to command modePREFIX C-k
: clear history (scroll back buffer)PREFIX r
: reload config
個人化設定
套用新設定前需要刪除所有 session。或嘗試使用 PREFIX r
。
因為蠻多的預設按鍵我覺得不好按也不好記憶,所以有修改過這類設定,詳細設定可以參考 我個人的 .tmux.conf。下方列出最主要改動:
- PREFIX =
Ctrl-q
- Create window:
PREFIX n
- Create pane:
PREFIX |
: split rightPREFIX -
: split down
其他技巧
Force resize
如果其他 Client 正在連接同一個 Server 可能導致顯示的視窗會不怪怪的有些空間無法使用,這時候可以把該 client detach。 參考。
$ tmux list-client
/dev/pts/15: 0 [80x24 xterm-256color] (utf8)
$ tmux detach-client -s 0
重開機恢復
tmux server 預設重開機後就會跟 kill-server 一樣遺失所有 session。如果需要開機後自動復原可以使用 Tmux Plugin Manager 安裝一些外掛 tmux-plugins/tmux-resurrect
、tmux-plugins/tmux-continuum
。
本文使用 ChatGPT 4o 協作並產生部分內容