Tmux 教程:Linux 終端複用器
Tmux (終端複用器) 是一個強大的工具,允許你在單個窗口中管理多個終端會話。它對於運行長時間進程、組織工作流程以及維護即使在你斷開服務器連接後仍然存在的會話特別有用。
什麼是 Tmux?
Tmux 是一個終端複用器,這意味著它允許你在單個終端窗口中運行多個終端會話。可以將其視為終端的窗口管理器 - 它使你能夠創建、訪問和控制多個終端會話,每個會話都有多個窗口和面板。
Tmux 背後的核心概念是將終端(你的終端模擬器,如 gnome-terminal、iTerm2 等)與其中運行的會話分離。這種分離提供了強大的功能,這些功能在標準終端中是不可能實現的。
Tmux 如何工作
Tmux 採用客戶端-服務器架構運行:
服務器:當你首次運行 tmux 命令時,tmux 服務器進程在後台啟動。該服務器管理所有會話、窗口和面板。
會話:會話是 tmux 的一個實例,可以包含多個窗口。每個會話都是獨立的,可以連接到終端客戶端或從中分離。
客戶端:當你運行 tmux 命令時,實際上是創建了與 tmux 服務器的客戶端連接。這些客戶端顯示會話中發生的情況。
這種架構賦予了 tmux 強大的持久性能力。即使所有客戶端斷開連接,服務器仍然繼續運行,保持你的會話活躍。
為什麼使用 Tmux?
Tmux 提供了幾個關鍵優勢,使其對基於終端的工作非常寶貴:
持久會話
Tmux 最強大的功能之一是會話持久性。即使你斷開終端連接,你的會話也會繼續運行。這在以下情況下特別有價值:
- 通過 SSH 在遠程服務器上工作
- 運行需要數小時完成的長時間進程
- 意外斷開終端會話連接
窗口和面板管理
Tmux 允許你高效組織終端工作:
- 在單個會話中創建多個窗口(類似瀏覽器標籤)
- 將窗口分割成多個面板以進行多任務處理
- 根據需要調整和重新排列面板
- 在結構化佈局中同時運行多個命令
提高生產力
Tmux 顯著改善你的終端工作流程:
- 在不打開多個終端窗口的情況下切換不同項目或任務
- 在終端會話之間保持一致的工作環境
- 使用鍵盤快捷鍵快速在窗口和面板之間導航
- 在面板和會話之間複製和粘貼文本
安裝 Tmux
在使用 tmux 之前,你需要安裝它:
Ubuntu/Debian:
sudo apt update
sudo apt install tmux
CentOS/RHEL/Fedora:
# CentOS/RHEL
sudo yum install tmux
# Fedora
sudo dnf install tmux
macOS:
# 使用 Homebrew
brew install tmux
Tmux 基本概念
理解 tmux 的層次結構是有效使用它的關鍵:
會話:頂級容器,可以包含多個窗口。會話是你連接和分離的對象。每個會話都有一個唯一的名稱,可以被視為項目工作空間。
窗口:類似於瀏覽器中的標籤,窗口存在於會話中,可以包含一個或多個面板。每個窗口都有自己的面板集,可以獨立運行不同的程序。
面板:窗口內的單獨終端視圖。面板允許你在同一窗口內並排運行多個程序。你可以水平或垂直分割窗口來創建面板。
這種三級層次結構(會話 → 窗口 → 面板)為你的終端工作提供了強大的組織系統。例如,你可能有一個用於 Web 開發項目的會話,其中包含多個窗口(一個用於代碼,一個用於日誌,一個用於數據庫),每個窗口都有多個面板(編輯器、終端、輸出)。
啟動 Tmux
根據你的需求,有幾種啟動 tmux 的方法:
創建新會話
要啟動一個未命名的新 tmux 會話:
tmux
這將打開一個新的 tmux 會話,底部有一個狀態欄顯示會話信息。
創建命名會話
為了更好的組織,特別是在處理多個項目時,創建命名會話:
tmux new -s session_name
命名會話使識別和管理多個會話變得更容易。
連接到現有會話
要連接到現有會話:
tmux attach -t session_name
如果你只有一個會話,可以簡單地使用:
tmux attach
理解狀態欄
當你啟動 tmux 時,你會注意到終端底部有一個狀態欄。這個欄提供重要信息:
- 當前會話名稱
- 窗口列表,活動窗口高亮顯示
- 系統信息,如時間和日期
- 主機名
狀態欄是你了解 tmux 中發生情況的主要視覺指示器,它可以自定義以顯示額外信息。
Tmux 鍵綁定
所有 tmux 命令都以前綴鍵開始。默認情況下,這是 Ctrl+b
。按下前綴鍵後,你可以按另一個鍵來執行命令。
例如,要創建一個新窗口,你需要按 Ctrl+b
然後按 c
。
理解前綴鍵機制
前綴鍵機制是 tmux 工作方式的核心。由於 tmux 在終端內運行,它需要一種方法來區分:
- 你想發送給 tmux 內運行的程序的命令
- 你想發送給 tmux 本身的命令
通過在 tmux 命令前要求前綴鍵,tmux 可以攔截這些命令,同時允許所有其他按鍵傳遞給你的程序。這就是為什麼你可以在 tmux 內正常使用 vim、emacs 或任何其他基於終端的程序 - tmux 只捕獲以前綴開始的特定按鍵組合。
為什麼是 Ctrl+b?
默認前綴鍵 Ctrl+b
之所以被選擇,是因為它很少被其他程序使用。然而,許多用戶將其更改為 Ctrl+a
(類似於 GNU Screen),因為它更容易用一只手按下。
命令模式
按下前綴鍵後,tmux 會短暫進入命令模式(可配置),在此期間它等待你的命令。如果你按錯鍵或改變主意,可以按 Esc
或等待超時返回正常操作。
基本 Tmux 命令
會話管理
tmux new -s session_name
- 創建具有特定名稱的新會話tmux ls
- 列出所有會話tmux attach -t session_name
- 連接到現有會話tmux kill-session -t session_name
- 終止特定會話
在 Tmux 會話內
Ctrl+b d
- 從當前會話分離Ctrl+b $
- 重命名當前會話Ctrl+b s
- 列出所有會話並在它們之間切換
窗口管理
Ctrl+b c
- 創建新窗口Ctrl+b n
- 切換到下一個窗口Ctrl+b p
- 切換到上一個窗口Ctrl+b w
- 列出所有窗口並選擇一個Ctrl+b ,
- 重命名當前窗口Ctrl+b &
- 關閉當前窗口
面板管理
Ctrl+b %
- 垂直分割當前面板Ctrl+b "
- 水平分割當前面板Ctrl+b o
- 在面板之間切換Ctrl+b ;
- 切換到上一個活動面板Ctrl+b x
- 關閉當前面板Ctrl+b z
- 切換面板縮放(最大化/最小化)Ctrl+b {
- 將當前面板向左移動Ctrl+b }
- 將當前面板向右移動
複製模式
Ctrl+b [
- 進入複製模式- 箭頭鍵或 vim 風格導航(h,j,k,l)移動
Space
- 開始選擇Enter
- 複製選擇Ctrl+b ]
- 粘貼複製的文本
實用示例
示例 1:運行長時間進程
tmux 最常見的用例之一是運行需要在終端斷開連接後繼續的長時間進程。
啟動一個新的命名 tmux 會話:
shtmux new -s long_process
創建命名會話使以後更容易識別。
運行你的長時間進程(例如,備份):
shtar -czf backup.tar.gz /home/user/data
這個進程將在 tmux 會話內運行。
如果你需要斷開連接: 按
Ctrl+b
然後d
從會話分離。分離不會停止進程 - 它繼續在後台運行。這是允許持久性的關鍵機制。
稍後,重新連接以檢查進程:
shtmux attach -t long_process
當你重新連接時,你會看到進程的當前狀態,與你離開時完全相同。
示例 2:組織你的開發工作
Tmux 擅長組織具有多個相關任務的複雜工作流程。
為你的項目啟動一個新會話:
shtmux new -s project
這為你的項目創建了一個專用工作空間。
為不同任務創建窗口:
- 按
Ctrl+b c
創建一個用於編碼的窗口 - 再次按
Ctrl+b c
創建一個用於日誌的窗口 - 再次按
Ctrl+b c
創建一個用於文檔的窗口
每個窗口就像一個標籤,隔離你工作的不同方面。
- 按
在窗口內,分割面板以進行多任務處理:
- 按
Ctrl+b %
垂直分割編輯器和終端 - 按
Ctrl+b "
水平分割輸出
面板允許你同時查看多個相關視圖。
- 按
在你組織的工作空間中導航:
- 使用
Ctrl+b n
和Ctrl+b p
在窗口之間切換 - 使用
Ctrl+b o
在當前窗口的面板之間循環 - 使用
Ctrl+b w
查看所有窗口的可視列表
- 使用
這種組織允許你為每個項目維護一致的工作環境。當你返回到你的"項目"會話時,一切都與你離開時完全相同。
示例 3:協作會話
多個用戶可以連接到同一個 tmux 會話,實現協作工作:
用戶 1 創建會話:
shtmux new -s collaboration
用戶 2(登錄到同一系統)連接到同一會話:
shtmux attach -t collaboration
兩個用戶將看到相同的終端,一個用戶的操作對另一個用戶可見。這是可能的,因為 tmux 的客戶端-服務器架構允許多個客戶端連接到同一個會話。
自定義 Tmux
Tmux 可以通過其配置文件 ~/.tmux.conf
高度自定義。這個文件在 tmux 啟動時讀取,允許你修改鍵綁定、外觀、行為等。
理解 tmux 配置
tmux 配置文件使用簡單的語法,每行是一個命令。註釋以 #
開始。以下是帶有解釋的基本示例:
# 將前綴鍵設置為 Ctrl+a(類似 screen)
# 這通常更受歡迎,因為它更容易用一只手按下
unbind C-b # 移除默認前綴鍵綁定
set -g prefix C-a # 設置 Ctrl+a 為新前綴鍵
bind C-a send-prefix # 允許 Ctrl+a Ctrl+a 傳遞給程序
# 啟用鼠標支持
# 啟用後,你可以點擊選擇面板,調整面板大小,滾動
set -g mouse on
# 設置狀態欄樣式
# 自定義底部狀態欄的外觀
set -g status-style bg=black,fg=white
# 啟用 256 色支持
# 這確保 tmux 內的程序可以正確顯示顏色
set -g default-terminal "screen-256color"
# 增加滾動緩衝區
# 這允許你向上滾動並在每個面板中查看更多歷史記錄
set -g history-limit 10000
# 重新綁定面板切換以使用 vim 風格按鍵
# 這使導航對 vim 用戶更直觀
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
應用配置更改
創建或修改 ~/.tmux.conf
後,你有兩個選擇:
- 重啟 tmux(這將結束你的會話)
- 在現有 tmux 會話中重新加載配置:sh
tmux source-file ~/.tmux.conf
第二個選項更受歡迎,因為它在不中斷工作的情況下應用更改。你甚至可以綁定一個鍵自動執行此操作:
# 使用前綴 + r 重新加載配置
bind r source-file ~/.tmux.conf
配置範圍
注意許多配置命令中的 -g
標誌。這代表"全局",意味著設置適用於所有會話、窗口和面板。沒有 -g
,設置只適用於當前會話。
配置選項可以在不同級別設置:
- 全局(使用
-g
):適用於所有地方 - 會話:適用於一個會話
- 窗口:適用於一個窗口
- 面板:適用於一個面板
總結
Tmux 是一個非常強大的工具,用於管理終端會話,它採用客戶端-服務器架構,提供會話持久性、窗口管理和面板組織。
關鍵機制
客戶端-服務器架構:Tmux 作為服務器進程運行,獨立於終端客戶端管理會話,使會話能夠在斷開連接後持續存在。
層次組織:三級結構(會話 → 窗口 → 面板)為複雜工作流程提供強大的組織。
前綴鍵系統:前綴鍵機制允許 tmux 攔截命令,同時將所有其他按鍵傳遞給其中運行的程序。
分離和重新連接:能夠從會話分離而不停止進程,這使 tmux 對遠程工作和長時間運行的任務非常寶貴。
優勢
- 持久性:由於網絡問題或終端關閉而永不丟失工作
- 組織:使用窗口和面板構建複雜的工作流程
- 協作:多個用戶可以查看和交互同一會話
- 資源效率:在單個終端窗口內運行多個終端
- 生產力:使用鍵盤快捷鍵快速在任務之間導航
通過實踐,tmux 可以顯著提高你在終端環境中的生產力。初始學習曲線很快就會因輕鬆管理複雜終端工作流程而帶來的效率提升得到回報。