tmux 可以在一個終端中管理多個視窗和分屏,還能在 SSH 斷開後繼續保持任務執行。
它的預設前綴鍵是 Ctrl+b。大多數快捷鍵都要分兩步按:
- 按下
Ctrl+b; - 鬆開兩個鍵;
- 再按動作鍵。
例如,新建視窗不是同時按
Ctrl+b+c,而是先按Ctrl+b,鬆開後再按c。
最需要記住的快捷鍵
|
|
恢復剛才退出的會話:
|
|
安裝並確認 tmux 可用
Debian、Ubuntu:
|
|
Fedora:
|
|
Arch Linux:
|
|
macOS 使用 Homebrew:
|
|
安裝後檢視版本:
|
|
終端返回類似 tmux 3.x 的資訊,說明命令已經進入當前環境的 PATH。
建立、退出和恢復會話
直接啟動匿名會話:
|
|
更推薦建立命名會話:
|
|
work 可以換成專案名、伺服器名或任務名。
臨時離開時按 Ctrl+b,鬆開後按 d。這個操作叫 detach,只讓當前終端與會話分離。會話中的編譯、下載、記錄監控和指令碼仍會執行。
如果在面板裡執行 exit,則會關閉當前 shell。最後一個面板退出後,相應視窗和會話也可能結束。
| 操作 | 命令或快捷鍵 |
|---|---|
| 新建命名會話 | tmux new -s 會話名 |
| 檢視會話 | tmux ls |
| 恢復最近會話 | tmux attach |
| 恢復指定會話 | tmux attach -t 會話名 |
| 臨時退出 | Ctrl+b,再按 d |
| 重新命名當前會話 | Ctrl+b,再按 $ |
| 刪除指定會話 | tmux kill-session -t 會話名 |
存在多個會話時,tmux attach 可能提示目標不明確。先檢視名稱: |
|
|
再恢復指定會話:
|
|
簡寫命令也有效:
|
|
視窗快捷鍵
視窗類似瀏覽器標籤頁。一個會話可以有多個視窗,每個視窗又能包含多個面板。
| 操作 | 快捷鍵 |
|---|---|
| 新建視窗 | Ctrl+b,再按 c |
| 下一個視窗 | Ctrl+b,再按 n |
| 上一個視窗 | Ctrl+b,再按 p |
| 最近使用的視窗 | Ctrl+b,再按 l |
| 切換到視窗 0–9 | Ctrl+b,再按數字鍵 |
| 檢視視窗列表 | Ctrl+b,再按 w |
| 重新命名視窗 | Ctrl+b,再按 , |
| 關閉當前視窗 | Ctrl+b,再按 & |
關閉視窗時 tmux 會要求確認。輸入 y 後,視窗中的所有面板和程式都會結束,不要把 & 和 detach 使用的 d 混淆。 |
|
視窗編號超過 9 時,使用 Ctrl+b w 從列表中選擇。也可以按 Ctrl+b ',輸入視窗編號後按 Enter。 |
分屏與面板操作
面板是同一個視窗中的獨立終端區域。
| 操作 | 快捷鍵 |
|---|---|
| 左右分屏 | Ctrl+b,再按 % |
| 上下分屏 | Ctrl+b,再按 " |
| 切換面板 | Ctrl+b,再按方向鍵 |
| 切換到下一個面板 | Ctrl+b,再按 o |
| 顯示面板編號 | Ctrl+b,再按 q |
| 當前面板全屏或恢復 | Ctrl+b,再按 z |
| 關閉當前面板 | Ctrl+b,再按 x |
| 輪換預設佈局 | Ctrl+b,再按空格 |
按 Ctrl+b q 後,每個面板會短暫顯示編號。編號仍在螢幕上時按對應數字,可以直接跳轉。 |
|
Ctrl+b z 只改變顯示範圍,不會刪除其他面板;再次執行即可恢復原佈局。 |
調整面板大小
常用操作是先按 Ctrl+b,再按住 Ctrl 並連續按方向鍵。若終端截獲組合鍵,可以使用 tmux 命令。
先按 Ctrl+b :,再輸入:
|
|
L、R、U、D 分別表示左、右、上、下,數字表示調整的單元數量。
按百分比設定當前面板寬度或高度:
|
|
滾動檢視歷史輸出
普通終端的滾輪有時無法直接滾動 tmux 歷史。先進入複製模式:
|
|
| 操作 | 按鍵 |
|---|---|
| 逐行移動 | 方向鍵 |
| 向上翻頁 | PageUp |
| 向下翻頁 | PageDown |
| 跳到頂部 | g,需使用 vi 模式 |
| 跳到底部 | G,需使用 vi 模式 |
| 搜尋 | /,需使用 vi 模式 |
| 退出複製模式 | q 或 Esc |
如果 g、G 和 / 的行為不同,通常是當前使用 emacs 風格按鍵。可在 ~/.tmux.conf 中啟用 vi 模式: |
|
|
複製和貼上文字
使用 vi 模式時,常見流程如下:
- 按
Ctrl+b [進入複製模式; - 移動到起點;
- 按空格開始選擇;
- 移動到終點;
- 按 Enter 複製到 tmux 緩衝區;
- 按
Ctrl+b ]貼上。 不同版本或自定義設定可能使用v開始選擇、y完成複製。按Ctrl+b ?可以檢視當前真實綁定。 檢視和儲存 tmux 緩衝區:
|
|
開啟滑鼠操作
希望用滑鼠選擇面板、調整邊界和滾動時,在 ~/.tmux.conf 中加入:
|
|
重新載入設定:
|
|
開啟滑鼠後,滾輪通常會自動進入複製模式。某些終端中滑鼠選擇會被 tmux 接管;需要使用終端原生選擇時,可以嘗試按住 Shift 再拖動。
一份夠用的基礎設定
編輯 ~/.tmux.conf:
|
|
儲存後執行:
|
|
也可以按 Ctrl+b :,輸入 source-file ~/.tmux.conf。設定有語法錯誤時,tmux 會指出行號;先註釋最近新增的設定再重試,不必刪除整個檔案。
修改預設前綴鍵
如果 Ctrl+b 與編輯器快捷鍵衝突,可以改成 Ctrl+a:
|
|
載入後,本文所有 Ctrl+b 操作都要替換為 Ctrl+a。最後一行用於把前綴傳送給巢狀 tmux。
SSH 斷開後恢復任務
遠端執行長任務時,可以按以下流程操作:
|
|
需要離開時按 Ctrl+b d,再退出 SSH。網路意外斷開時,會話通常也會繼續存在。
重新連線後執行:
|
|
tmux 只能儲存終端會話,不能讓已經報錯退出的程式自動復活。重要任務仍應儲存記錄:
|
|
常見錯誤與處理
no server running
執行 tmux ls 出現 no server running on /tmp/tmux-...,表示當前使用者沒有正在執行的 tmux server。重新建立會話即可:
|
|
sessions should be nested with care
這表示當前 shell 已在 tmux 中,又執行了 tmux。先檢查:
|
|
有輸出時,優先按 Ctrl+b c 新建視窗,或用以下命令切換會話:
|
|
attach 後畫面尺寸不正常
同一會話連線了尺寸不同的終端時,顯示區域可能受較小客戶端影響。可在恢復時斷開其他客戶端:
|
|
檢視現有客戶端:
|
|
快捷鍵沒有反應
依次檢查:
- 是否先按前綴並鬆開;
- 前綴是否已在設定中修改;
- 終端或遠端桌面是否截獲組合鍵;
- 是否處於巢狀 tmux;
- 當前綁定是否被外掛覆蓋。 顯示所有真實綁定:
|
|
從 shell 查詢分屏綁定:
|
|
誤關閉面板或會話
tmux 沒有通用的撤銷關閉功能。關閉前應確認沒有未儲存的編輯器、互動任務或未寫入檔案的輸出。使用 tee 儲存記錄,可以降低誤關面板後的損失。
安全關閉與清理
只結束一個會話:
|
|
保留 work,結束其他會話:
|
|
結束當前使用者的整個 tmux server:
|
|
kill-server 會關閉該 server 管理的全部會話及其中的程式。執行前先執行 tmux ls,確認沒有仍需保留的任務。
精確指定會話、視窗和面板
tmux 命令經常使用 -t 指定目標。完整目標格式是:
|
|
例如,work:1.2 表示 work 會話中的視窗 1、面板 2。
檢視當前目標:
|
|
列出所有視窗:
|
|
列出所有面板及其當前命令:
|
|
這種寫法適合在多個會話之間排查任務位置,也適合指令碼只操作指定面板,避免誤關其他終端。
目標可以省略部分欄位。當前會話中的視窗 2 可寫成 :2,當前視窗中的面板 1 可寫成 .1。自動化指令碼中建議使用完整目標,減少當前焦點變化帶來的歧義。
從 Shell 建立視窗和分屏
除了鍵盤快捷鍵,也可以直接呼叫 tmux 命令。向 work 會話新建視窗:
|
|
在視窗中建立左右分屏:
|
|
建立上下分屏:
|
|
建立面板時直接執行命令:
|
|
帶命令的面板會在命令結束後關閉。如果希望檢視最後輸出,可讓 shell 在命令後保留:
|
|
遠端生產環境中不要把需要密碼的命令直接寫進 Shell 歷史。使用現有認證機制,並限制記錄面板只讀取必要檔案。
向背景會話傳送命令
send-keys 可以向指定面板模擬鍵盤輸入:
|
|
向正在執行的前臺程式傳送 Ctrl+c:
|
|
傳送命令前先確認面板當前執行的程式:
|
|
如果輸出是編輯器、資料庫客戶端或其他互動程式,直接傳送文字可能造成資料修改。自動化時應為任務準備專用會話和固定視窗名,不要依賴臨時編號。
建立背景會話並啟動任務:
|
|
檢查會話是否存在:
|
|
返回碼為 0 表示目標會話存在。它只能說明 tmux 會話還在,不能證明指令碼成功,應同時檢查退出狀態、記錄或輸出檔案。
捕獲面板輸出用於排錯
不進入會話也可以讀取面板歷史:
|
|
只獲取最近 100 行:
|
|
儲存到檔案:
|
|
capture-pane 讀取的是 tmux 儲存的螢幕和歷史內容。若程式輸出超過 history-limit,更早內容已經無法恢復。
需要長期審計的任務應讓程式自身寫記錄,而不是隻依賴 tmux 歷史。記錄中若包含令牌、連線字串或使用者資料,還要設定合適的檔案權限和保留週期。
檢查會話是否仍有客戶端
下面的命令可以檢視哪些終端仍連線著 tmux:
|
|
如果維護視窗前需要獨佔會話,先通知其他使用者,再決定是否使用 attach -d 斷開其客戶端。
客戶端列表為空不代表任務已經結束,只表示當前沒有終端正在顯示該會話。
常見問題
detach 會停止程式嗎?
不會。Ctrl+b d 只斷開客戶端。程式是否繼續執行,還取決於伺服器是否關機、重啟或由其他機制終止程式。
為什麼 Ctrl+b % 輸入了百分號?
通常是沒有觸發前綴,或把按鍵按成了同時組合。先按 Ctrl+b 並全部鬆開,再輸入 %;多數鍵盤佈局需要按 Shift+5。
為什麼雙引號不好按?
先觸發前綴,再使用當前鍵盤佈局對應的雙引號組合,通常是 Shift+'。也可以在設定中重新綁定一個更方便的分屏鍵。
如何確認當前會話、視窗和面板?
|
|
輸出依次是會話名、視窗編號和面板編號。
快速回顧
tmux 的結構分為三層:會話儲存整套工作環境,視窗區分任務,面板負責分屏。
日常流程是用 tmux new -s 名稱 建立會話,透過視窗和分屏組織任務,按 Ctrl+b d 安全離開,再用 tmux attach -t 名稱 恢復。
忘記快捷鍵時按 Ctrl+b ? 檢視當前設定中的真實綁定,比死記完整列表更可靠。