跳到主內容

【Tool】tmux

📦 tmux 簡易說明

tmux(Terminal Multiplexer)是一個強大的終端複用工具,可以在單一終端視窗中同時管理多個工作階段(sessions)、視窗(windows)、與窗格(panes)。


🚀 tmux 的核心概念

  1. Session(工作階段)

    • 一個 tmux session 可以包含多個視窗,像是一個獨立的工作空間。
    • 支援在背景運行,即使關閉終端也不會中斷。
    • image-1739418422966.png

  2. Window(視窗)

    • 每個 session 裡可以有多個視窗,每個視窗類似一個完整的終端畫面。
    • 視窗可分割成多個窗格,方便同時監控多個任務。
    • image-1739418697038.png

  3. Pane(窗格)

    • 視窗內的分割區域,每個窗格可獨立執行命令。
    • 支援水平與垂直分割,方便進行多任務操作。
    • image-1739418735165.png


安裝 tmux

Ubuntu 安裝 tmux

Ubuntu 官方倉庫提供了 tmux,可直接使用 apt 安裝:

sudo apt update
sudo apt install tmux -y

macOS 安裝 tmux

macOS 用戶可以透過 Homebrew 安裝:

brew install tmux

🔍 更新或移除 tmux
Ubuntu
  • 更新
    sudo apt update && sudo apt upgrade tmux
    
  • 移除
    sudo apt remove tmux -y
    
macOS
  • 更新
    brew upgrade tmux
    
  • 移除
    brew uninstall tmux
    

⌨️ 常用指令快速上手

功能 指令 / 快捷鍵 說明
 session
啟動 tmux tmux 開啟一個新的 tmux session
  tmux new -s 名稱   開啟一個新的 tmux session 使用自訂名稱
查看所有 session tmux ls 列出目前所有 tmux session
切換 session Ctrl-b s

圖形化切換session

(如果該session 內有多視窗,可按 -> 選擇換到該視窗)

離開 tmux(保持運行) Ctrl-b d 分離 session,回到原本終端
離開 tmux(結束此session) Ctrl-b x 結束目前session,回到原本終端
重新連接 session tmux attach -t 名稱 重新連接到未結束的 session
  tmux a  重新連接上次中斷seeion
刪除 session 

tmux kill-session -t 名稱

刪除指定名稱session
刪除所有 session 

tmux kill-server

 
重新命名 session Ctrl-b $ 當前session 改名
  tmux rename-session -t 舊名稱 新名稱 修改指令 session 名稱
window
建立新視窗 Ctrl-b c 建立一個新的視窗
切換視窗 Ctrl-b w 圖形化切換window
  Ctrl-b 視窗編號  
  Ctrl-b n / p 切換到下一個/上一個視窗
關閉視窗 Ctrl-b & 關閉當前視窗
重新命名 window Ctrl-b , 更名目前window
  tmux rename-window -t 舊名稱 新名稱 更名指定window
Pane
分割窗格(垂直) Ctrl-b " 垂直分割出新窗格
分割窗格(水平) Ctrl-b % 水平分割出新窗格
切換窗格 Ctrl-b 方向鍵 在窗格間切換
  vi  ~/.tmux.conf 
加入set  -g mouse on

使用滑鼠切換

使用滑鼠調整分割線

關閉窗格 Ctrl-b x

 

與上一格窗格互換 Ctrl-b {

 

與下一格窗格互換 Ctrl-b }

 

顯示窗格編號 Ctrl-b q

 

指定窗格互換 tmux swap-pane -s 1 -t 2

 

其他
命令模式 Ctrl-b : 進入命令模式,可執行 tmux 指令
配置設定檔

vi ~/.tmux.conf

set -g mouse on

:支持滑鼠

set -g prefix C-s

:ctrl + b前缀改成ctrl + s

 

當滑鼠模式關閉(set -g mouse off)時,作業系統提供的標準複製/貼上功能將如預期運作。
滑鼠模式開啟(set -g mouse on)時,剪貼簿的功能會造成失效
下面的程式碼可以新增到您的 .tmux.conf 檔案中,以將m和M鍵分別綁定到「滑鼠開啟」和「滑鼠關閉」。

這讓你能夠使用Ctrl+ B,m來開啟滑鼠支援;Ctrl+ B,M將其關閉。

vi ~/.tmux.conf



###############################################
# toggle mouse mode to allow mouse copy/paste
# set mouse on with prefix m
bind m \
    set -g mouse on \;\
    display 'Mouse: ON'
# set mouse off with prefix M
bind M \
    set -g mouse off \;\
    display 'Mouse: OFF'        

參考:https://stackoverflow.com/questions/17445100/getting-back-old-copy-paste-behaviour-in-tmux-with-mouse


🎯 常見使用情境

  • 遠端連線不中斷: 即使 SSH 斷線,tmux session 仍會在伺服器上持續運行。
  • 多任務同時進行: 在一個終端視窗內同時監控多個任務、Log 或服務狀態。
  • 自動化腳本執行: 方便長時間執行的任務或背景作業管理。

常見問題

已在某session 內要新建session 

image-1739416150135.png

或是要切換到另一個session

image-1739416354391.png

這代表 你已經在一個 tmux session 裡,然後又試圖附加(attach)到另一個 session。tmux 預設不建議這種「嵌套 session」的行為,因為可能會導致控制鍵衝突或混亂。

建議方式:

建立session:離開tmux 模式Ctrl-b d,在建立新的session : tmux or tmux new -s 名稱

切換session: Ctrl-b s 切換 or tmux switch-client -t 名稱

image-1739416638882.png


 

以下是 tmux 快速鍵表格:

快速鍵 功能說明
C-b Space 選擇下一個佈局
C-b ! 將窗格分離到新視窗
C-b " 垂直分割視窗
C-b # 列出所有剪貼簿
C-b $ 重新命名當前工作階段
C-b % 水平分割視窗
C-b & 關閉當前視窗
C-b ' 輸入視窗索引以切換
C-b ( 切換到上一個客戶端
C-b ) 切換到下一個客戶端
C-b , 重新命名當前視窗
C-b - 刪除最近的剪貼簿
C-b . 移動當前視窗
C-b / 顯示按鍵綁定說明
C-b 0~9 選擇對應編號的視窗
C-b : 輸入命令提示符
C-b ; 切換到上次使用的窗格
C-b = 從清單中選擇剪貼簿
C-b ? 列出所有按鍵綁定
C-b C 自訂選項
C-b D 從清單中選擇並分離客戶端
C-b E 平均分配所有窗格
C-b L 切換到最後一個客戶端
C-b M 清除標記的窗格
C-b [ 進入複製模式
C-b ] 貼上最近的剪貼簿
C-b c 建立新視窗
C-b d 分離當前客戶端
C-b f 搜尋窗格
C-b i 顯示視窗資訊
C-b l 切換到上個視窗
C-b m 標記或取消標記窗格
C-b n 選擇下一個視窗
C-b o 選擇下一個窗格
C-b p 選擇上一個視窗
C-b q 顯示窗格編號
C-b r 重新整理當前客戶端
C-b s 從清單中選擇工作階段
C-b t 顯示時鐘
C-b w 從清單中選擇視窗
C-b x 關閉當前窗格
C-b z 放大/還原當前窗格
C-b { 與上方窗格交換位置
C-b } 與下方窗格交換位置
C-b ~ 顯示訊息
C-b DC 重置視窗以跟隨游標
C-b PPage 進入複製模式並向上捲動
C-b ↑/↓/←/→ 選擇相對方向的窗格
C-b M-1~M-7 設定不同的視窗佈局
C-b M-n 選擇下一個有警示的視窗
C-b M-o 反向循環切換窗格
C-b M-p 選擇上一個有警示的視窗
C-b M-↑/↓/←/→ 調整窗格大小 (每次5個單位)
C-b C-b 傳送前綴鍵
C-b C-o 循環切換窗格
C-b C-z 暫停當前客戶端
C-b C-↑/↓/←/→ 調整窗格大小
C-b S-↑/↓/←/→ 移動視窗的可見部分

Reference