🎯 重點摘要: tmux 是一個 terminal multiplexer(終端機多工器),一個視窗管理多個終端工作:
① Session 存活:SSH 斷線程式照跑,重連attach回來繼續工作
② 視窗分割:一個螢幕同時看編輯器、日誌、測試結果
③ 多重工作區:Session → Window → Pane 三層架構,像瀏覽器分頁一樣切換
④ 高度客製化:透過.tmux.conf打造專屬開發環境
你有沒有過這種經驗:SSH 連到伺服器跑一個長時間的編譯或訓練任務,網路一抖斷線,所有進度全部歸零?或者在一個終端機視窗裡開了七八個分頁,一邊跑 server、一邊看 log、一邊下指令,切到頭昏眼花?
tmux 就是為了解決這些問題而生的。它在伺服器(或本機)上建立一個常駐的終端工作環境,你的程式跑在 tmux 裡而不是 SSH 連線裡 — 連線斷了,工作照樣跑;回家重連,attach 上去什麼都還在。這篇文章會帶你從安裝、核心概念、日常操作快捷鍵,一路到 .tmux.conf 進階配置,把 tmux 學好學滿。
📌 本文對應 tmux 3.x 版本。tmux 採 ISC 授權,是 OpenBSD 專案的子計畫,macOS 與主流 Linux 發行版的套件庫都有收錄。
tmux 是什麼?為什麼你需要它?
tmux = terminal multiplexer,翻成中文就是「終端機多工器」。它做了三件大事:
- Session 持久化:終端工作階段獨立於連線存在,SSH 斷線、終端機關掉,session 裡的程式照跑不誤
- 畫面分割:一個視窗切成多個 pane,同時盯著編輯器、日誌和監控儀表
- 多工作區:多個 session、每個 session 多個 window,像瀏覽器分頁一樣自由切換
最經典的使用場景就是 SSH + 長時間任務:訓練模型、跑資料庫 migration、編譯大型專案,全部丟進 tmux 裡執行,網路再怎麼不穩都不用怕。
核心概念:Session、Window、Pane
tmux 的架構是三層式,理解這個架構,快捷鍵就不用死背:
| 層級 | 比喻 | 說明 |
|---|---|---|
| Session | 瀏覽器的「視窗」 | 最高層工作區,彼此獨立。例如一個 session 跑公司專案、一個跑 side project |
| Window | 瀏覽器的「分頁」 | Session 內的全螢幕工作區,狀態列上會顯示 0、1、2… 編號 |
| Pane | 分頁裡的「分割畫面」 | Window 內再切出的區塊,可以左右分、上下分,各自跑各自的 shell |
記住這個順序:Session 包 Window,Window 包 Pane。所有 tmux 快捷鍵都是在這三層之間移動和管理。
安裝教學
macOS (Homebrew)
brew install tmux
Linux 各發行版
# Ubuntu / Debian
sudo apt update && sudo apt install tmux
# Fedora / RHEL / CentOS
sudo dnf install tmux
# Arch Linux
sudo pacman -S tmux
# openSUSE
sudo zypper install tmux
Windows (WSL)
Windows 本身的終端機不支援 tmux,但透過 WSL2 就能完整使用:
# 先安裝 WSL2 + Ubuntu (PowerShell 系統管理員)
wsl --install
# 進入 WSL 後照 Ubuntu 的方式安裝
sudo apt update && sudo apt install tmux
從原始碼編譯(取得最新版)
如果系統套件庫的版本太舊(例如 CentOS 7 只有 tmux 1.8),可以自己編:
sudo apt install -y build-essential libevent-dev ncurses-dev git
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo make install
確認安裝成功
tmux -V
# 輸出類似: tmux 3.4
第一次使用:Session 生命週期
先掌握最基本的操作循環:建立 → 分離 → 回來。
# 建立一個新 session(匿名)
tmux
# 建立有名字的 session(推薦,之後好認)
tmux new -s work
# 分離 (detach):離開但 session 繼續跑
# 快捷鍵:Ctrl-b 然後按 d
# 列出所有 session
tmux ls
# 重新接回 session
tmux attach -t work
# 刪除指定 session
tmux kill-session -t work
💡 實測斷線存活:在 tmux 裡跑top,按Ctrl-b d分離,然後把終端機整個關掉。重新打開終端機輸入tmux attach— top 還在跑,畫面跟離開前一模一樣。
快捷鍵大全
tmux 所有快捷鍵都要先按 prefix(預設 Ctrl-b)再按功能鍵。例如分離是「按住 Ctrl 和 b,放開,再單獨按 d」。
Session 管理
| 快捷鍵 | 功能 |
|---|---|
Ctrl-b d |
分離目前 session(detach) |
Ctrl-b $ |
重新命名目前 session |
Ctrl-b s |
列出所有 session 並切換(互動式選單) |
Ctrl-b ( |
切到上一個 session |
Ctrl-b ) |
切到下一個 session |
Window 操作
| 快捷鍵 | 功能 |
|---|---|
Ctrl-b c |
建立新 window |
Ctrl-b , |
重新命名目前 window |
Ctrl-b n / Ctrl-b p |
下一個 / 上一個 window |
Ctrl-b 0-9 |
直接跳到指定編號的 window |
Ctrl-b w |
互動式列出所有 window(含 session) |
Ctrl-b & |
關閉目前 window(會要求確認) |
Pane 分割與切換
| 快捷鍵 | 功能 |
|---|---|
Ctrl-b % |
左右分割(垂直線切開) |
Ctrl-b " |
上下分割(水平線切開) |
Ctrl-b 方向鍵 |
在 pane 之間移動焦點 |
Ctrl-b o |
輪流切換到下一個 pane |
Ctrl-b x |
關閉目前 pane(會要求確認) |
Ctrl-b z |
目前 pane 全螢幕切換(zoom,再按一次還原) |
Ctrl-b Space |
循環切換 pane 佈局(水平、垂直、網格…) |
Ctrl-b Ctrl-方向鍵 |
調整目前 pane 的大小 |
Ctrl-b { / Ctrl-b } |
與前一個 / 後一個 pane 交換位置 |
💡 最常用組合推薦:Ctrl-b %左右分一個編輯器一個終端機,Ctrl-b "再上下分一塊出來看 log,Ctrl-b z臨時放大某個 pane 專心看 — 這四個鍵用熟,就夠應付八成的日常場景。
複製模式(捲動與複製)
終端機裡想往上捲看歷史輸出,要進入「copy mode」:
| 快捷鍵 | 功能 |
|---|---|
Ctrl-b [ |
進入 copy mode(可用方向鍵 / PgUp / PgDn 捲動) |
Ctrl-b PgUp |
進入 copy mode 並直接翻頁向上 |
Space |
copy mode 中開始選取 |
Enter |
選取完成,複製到 tmux buffer |
Ctrl-b ] |
貼上 buffer 內容 |
q |
離開 copy mode |
指令模式速查表
按 Ctrl-b : 進入指令模式,可以下所有 tmux 子指令。以下是最常用的幾條:
| 指令 | 說明 |
|---|---|
:new -s 名稱 |
建立新 session |
:split-window -h |
左右分割(等同 Ctrl-b %) |
:resize-pane -U 5 |
向上擴大 pane 5 行(-D/-L/-R 同理) |
:swap-window -t 0 |
把目前 window 搬到 0 號位置 |
:source-file ~/.tmux.conf |
重新載入配置(改完 conf 不用重開) |
:show-messages |
顯示 tmux 訊息歷史 |
不想進指令模式的話,這些也都有對應的 shell 指令,例如 tmux split-window -h、tmux resize-pane -D 5,適合寫進腳本自動化。
進階配置:打造順手的 .tmux.conf
tmux 的預設快捷鍵對新手不太友善,通常大家都會調整配置。在 home 目錄建立 ~/.tmux.conf,以下是推薦的入門配置:
# ===== 基本設定 =====
# 歷史緩衝行數(預設 2000 太少)
set -g history-limit 50000
# 支援滑鼠:可點擊切換 pane、拖曳調整大小、滾輪捲動
set -g mouse on
# 256 色 + true color 支援
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"
# 事件延遲降到最低,反應更快
set -sg escape-time 0
# 編號從 1 開始(0 離左手太遠)
set -g base-index 1
setw -g pane-base-index 1
# 關閉 window 後編號自動遞補
set -g renumber-windows on
# ===== 快捷鍵優化 =====
# prefix 改成 Ctrl-a(比 Ctrl-b 好按,跟 screen 一致)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 用更直覺的鍵分割 pane(| 左右、- 上下)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# 新 window / 分割 pane 時保留目前路徑
bind c new-window -c "#{pane_current_path}"
# vim 風格的 pane 切換(h j k l)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Ctrl-r 快速重載配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
⚠️ 改完配置要重載才會生效:按Ctrl-b :輸入source-file ~/.tmux.conf,或直接tmux source ~/.tmux.conf。prefix 改成Ctrl-a之後,上面所有快捷鍵教學的「Ctrl-b」都請自動代換成「Ctrl-a」。
實戰場景:SSH 遠端開發的正確姿勢
tmux 最殺的應用場景是遠端伺服器開發,推薦的工作流:
# 1. SSH 連上伺服器後,建立命名 session
ssh user@server
tmux new -s dev
# 2. 在裡面開好工作環境:一個 pane 跑編輯器、一個跑 server、一個看 log
# 3. 下班直接關終端機(或 Ctrl-b d 分離),session 留在伺服器上
# 4. 隔天重連,一鍵恢復昨天的完整工作環境
ssh user@server
tmux attach -t dev
進階一點,還可以讓多個終端機視窗同步顯示同一個 session,天然適合結對程式或教學演示:
# 第二個終端機視窗(或同事的 SSH 連線)也接上同一個 session
tmux attach -t dev
兩邊看到的畫面完全同步,你敲什麼對方就看到什麼 — 不用開螢幕分享也能 pair programming。
🚀 搭配工具推薦:想要「一鍵還原整套開發環境」(多個 session、每個 session 固定幾個 pane 各跑特定指令),可以再裝 tmuxinator 或 tmuxp,把版面寫成 YAML 定義檔。另外 btop 這類監控工具丟在獨立的 tmux window 裡常駐,也是常見的組合技。
常見問題排解
顏色跑掉、vim 配色怪怪的?
在 .tmux.conf 加上 true color 支援(見上方配置),並確認 echo $TERM 在 tmux 內外都合理(通常是 tmux-256color 或 xterm-256color)。
tmux attach 說 "no sessions"?
代表伺服器重開機過或 session 全被殺了 — tmux 的 session 存在記憶體裡,重開機就沒了。重要任務請搭配 nohup 或 systemd service 做雙保險。
滾輪不能往上捲?
確認配置裡有 set -g mouse on,重載後滾輪就會自動進入 copy mode 捲動歷史。
總結
tmux 的學習曲線看起來陡,但拆開來就是三件事:Session 管理保平安、Window 切工作區、Pane 分割螢幕。先把 new -s、Ctrl-b d、tmux attach 這條主線用熟,再慢慢補 pane 操作和配置優化,一週就能內化成肌肉記憶。
🎯 快速上手:brew install tmux(或apt install tmux)→tmux new -s dev開第一個 session →Ctrl-b %分割畫面 →Ctrl-b d分離 →tmux attach -t dev回來。記住:先讓 SSH 斷線不再恐懼,其他快捷鍵之後慢慢學都來得及。