# 【Tool】tmux

## 📦 **tmux 簡易說明**

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

---

## 🚀 **tmux 的核心概念**

1. **Session（工作階段）**：
    
    
    - 一個 tmux session 可以包含多個視窗，像是一個獨立的工作空間。
    - 支援在背景運行，即使關閉終端也不會中斷。
    - [![image-1739418422966.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/J89JzJ2i8N2ZANS2-image-1739418422966.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/J89JzJ2i8N2ZANS2-image-1739418422966.png)
2. **Window（視窗）**：
    
    
    - 每個 session 裡可以有多個視窗，每個視窗類似一個完整的終端畫面。
    - 視窗可分割成多個窗格，方便同時監控多個任務。
    - [![image-1739418697038.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/tvyuE5Dk3fsIvmmC-image-1739418697038.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/tvyuE5Dk3fsIvmmC-image-1739418697038.png)
3. **Pane（窗格）**：
    
    
    - 視窗內的分割區域，每個窗格可獨立執行命令。
    - 支援水平與垂直分割，方便進行多任務操作。
    - [![image-1739418735165.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/dzCssSO2N4l19WC7-image-1739418735165.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/dzCssSO2N4l19WC7-image-1739418735165.png)

---

## **安裝 tmux**

##### **Ubuntu 安裝 tmux**

Ubuntu 官方倉庫提供了 tmux，可直接使用 `apt` 安裝：

```bash
sudo apt update
sudo apt install tmux -y

```

---

##### **macOS 安裝 tmux**

macOS 用戶可以透過 **Homebrew** 安裝：

```bash
brew install tmux

```

---

##### 🔍 **更新或移除 tmux**

##### **Ubuntu**

- **更新**： ```bash
    sudo apt update && sudo apt upgrade tmux
    
    ```
- **移除**： ```bash
    sudo apt remove tmux -y
    
    ```

##### **macOS**

- **更新**： ```bash
    brew upgrade tmux
    
    ```
- **移除**： ```bash
    brew uninstall tmux
    
    ```

---

### ⌨️ **常用指令快速上手**

<table id="bkmrk-%E5%8A%9F%E8%83%BD-%E6%8C%87%E4%BB%A4-%2F-%E5%BF%AB%E6%8D%B7%E9%8D%B5-%E8%AA%AA%E6%98%8E-%E5%95%9F%E5%8B%95-tm" style="width: 866px; height: 1197px;"><thead><tr style="height: 29px;"><th style="width: 221px; height: 29px;">功能</th><th style="width: 216px; height: 29px;">指令 / 快捷鍵</th><th style="width: 429px; height: 29px;">說明</th></tr></thead><tbody><tr style="height: 29px;"><td class="align-center" colspan="3" style="width: 866px; height: 29px;"> **session**</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**啟動 tmux**</td><td style="width: 216px; height: 29px;">`tmux`</td><td style="width: 429px; height: 29px;">開啟一個新的 tmux session</td></tr><tr style="height: 46px;"><td style="width: 221px; height: 46px;"> </td><td style="width: 216px; height: 46px;">`tmux new -s 名稱` </td><td style="width: 429px; height: 46px;">開啟一個新的 tmux session 使用自訂名稱</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**查看所有 session**</td><td style="width: 216px; height: 29px;">`tmux ls`</td><td style="width: 429px; height: 29px;">列出目前所有 tmux session</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**切換 session**</td><td style="width: 216px; height: 29px;">`Ctrl-b s`</td><td style="width: 429px; height: 29px;">圖形化切換session

(如果該session 內有多視窗，可按 -&gt; 選擇換到該視窗)

</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**離開 tmux（保持運行）**</td><td style="width: 216px; height: 29px;">`Ctrl-b d`</td><td style="width: 429px; height: 29px;">分離 session，回到原本終端</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**離開 tmux（結束此session）**</td><td style="width: 216px; height: 29px;">`Ctrl-b x`</td><td style="width: 429px; height: 29px;">結束目前session，回到原本終端</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**重新連接 session**</td><td style="width: 216px; height: 29px;">`tmux attach -t 名稱`</td><td style="width: 429px; height: 29px;">重新連接到未結束的 session</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;"> </td><td style="width: 216px; height: 29px;">`tmux a` </td><td style="width: 429px; height: 29px;">重新連接上次中斷seeion</td></tr><tr style="height: 33px;"><td style="width: 221px; height: 33px;">**刪除 session** </td><td style="width: 216px; height: 33px;">`tmux kill-session -t 名稱`

</td><td style="width: 429px; height: 33px;">刪除指定名稱session</td></tr><tr style="height: 36px;"><td style="width: 221px; height: 36px;">**刪除所有 session** </td><td style="width: 216px; height: 36px;">`<span class="s1">tmux kill-server</span>`

</td><td style="width: 429px; height: 36px;"> </td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**重新命名 session**</td><td style="width: 216px; height: 29px;">`Ctrl-b $`</td><td style="width: 429px; height: 29px;">當前session 改名</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;"> </td><td style="width: 216px; height: 29px;">`tmux rename-session -t 舊名稱 新名稱`</td><td style="width: 429px; height: 29px;">修改指令 session 名稱</td></tr><tr style="height: 29px;"><td class="align-center" colspan="3" style="width: 866px; height: 29px;">**window**</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**建立新視窗**</td><td style="width: 216px; height: 29px;">`Ctrl-b c`</td><td style="width: 429px; height: 29px;">建立一個新的視窗</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**切換視窗**</td><td style="width: 216px; height: 29px;">`Ctrl-b w`</td><td style="width: 429px; height: 29px;">圖形化切換window</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;"> </td><td style="width: 216px; height: 29px;">`Ctrl-b 視窗編號`</td><td style="width: 429px; height: 29px;"> </td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;"> </td><td style="width: 216px; height: 29px;">`Ctrl-b n / p`</td><td style="width: 429px; height: 29px;">切換到下一個/上一個視窗</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**關閉視窗**</td><td style="width: 216px; height: 29px;">`Ctrl-b &`</td><td style="width: 429px; height: 29px;">關閉當前視窗</td></tr><tr style="height: 30px;"><td style="width: 221px; height: 30px;">**重新命名 window**</td><td style="width: 216px; height: 30px;">`Ctrl-b ,`</td><td style="width: 429px; height: 30px;">更名目前window</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;"> </td><td style="width: 216px; height: 29px;">`tmux rename-window -t 舊名稱 新名稱`</td><td style="width: 429px; height: 29px;">更名指定window</td></tr><tr style="height: 29px;"><td class="align-center" colspan="3" style="width: 866px; height: 29px;">**Pane**</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**分割窗格（垂直）**</td><td style="width: 216px; height: 29px;">`Ctrl-b "`</td><td style="width: 429px; height: 29px;">垂直分割出新窗格</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**分割窗格（水平）**</td><td style="width: 216px; height: 29px;">`Ctrl-b %`</td><td style="width: 429px; height: 29px;">水平分割出新窗格</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**切換窗格**</td><td style="width: 216px; height: 29px;">`Ctrl-b 方向鍵`</td><td style="width: 429px; height: 29px;">在窗格間切換</td></tr><tr style="height: 57px;"><td style="width: 221px; height: 57px;"> </td><td style="width: 216px; height: 57px;">vi ~/.tmux.conf   
加入set -g mouse on</td><td style="width: 429px; height: 57px;">**使用滑鼠切換**

**使用滑鼠調整分割線**

</td></tr><tr style="height: 35px;"><td style="width: 221px; height: 35px;">**關閉窗格**</td><td style="width: 216px; height: 35px;">`Ctrl-b x`</td><td style="width: 429px; height: 35px;"></td></tr><tr style="height: 35px;"><td style="width: 221px; height: 35px;">**與上一格窗格互換**</td><td style="width: 216px; height: 35px;">`Ctrl-b {`</td><td style="width: 429px; height: 35px;"></td></tr><tr style="height: 35px;"><td style="width: 221px; height: 35px;">**與下一格窗格互換**</td><td style="width: 216px; height: 35px;">`Ctrl-b }`</td><td style="width: 429px; height: 35px;"></td></tr><tr style="height: 35px;"><td style="width: 221px; height: 35px;">**顯示窗格編號**</td><td style="width: 216px; height: 35px;">`Ctrl-b q`</td><td style="width: 429px;"></td></tr><tr style="height: 35px;"><td style="width: 221px; height: 35px;">**指定窗格互換**</td><td style="width: 216px; height: 35px;">`tmux swap-pane -s 1 -t 2`</td><td style="width: 429px; height: 35px;"></td></tr><tr style="height: 29px;"><td class="align-center" colspan="3" style="width: 866px; height: 29px;">**其他**</td></tr><tr style="height: 29px;"><td style="width: 221px; height: 29px;">**命令模式**</td><td style="width: 216px; height: 29px;">`Ctrl-b :`</td><td style="width: 429px; height: 29px;">進入命令模式，可執行 tmux 指令</td></tr><tr style="height: 124px;"><td style="width: 221px; height: 124px;">**配置設定檔**</td><td style="width: 216px; height: 124px;">vi ~/.tmux.conf

set -g mouse on

:支持滑鼠

set -g prefix C-s

:ctrl + b前缀改成ctrl + s

</td><td style="width: 429px; height: 124px;"> </td></tr></tbody></table>

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

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

```shell
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](https://stackoverflow.com/questions/17445100/getting-back-old-copy-paste-behaviour-in-tmux-with-mouse)

---

### 🎯 **常見使用情境**

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

---

### **常見問題**

**已在某session 內要新建session**

[![image-1739416150135.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/Lkmr5LdaNqnKwgDJ-image-1739416150135.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/Lkmr5LdaNqnKwgDJ-image-1739416150135.png)

或是要切換到另一個session

[![image-1739416354391.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/rxWRa14AD0D59S5X-image-1739416354391.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/rxWRa14AD0D59S5X-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](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/scaled-1680-/ImlgX07xgcgQxTnB-image-1739416638882.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-02/ImlgX07xgcgQxTnB-image-1739416638882.png)

---

以下是 tmux 快速鍵表格：

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

Reference

- [tmux 小記](https://sakananote2.blogspot.com/2025/01/tmux.html)
- [<span data-rich-links="{"fple-t":"tmux 使用和基礎配置 從入門到加班 一個視頻全搞定！","fple-u":"https://www.youtube.com/watch?v=QGnjSccjDck&ab_channel=%E7%A8%8B%E5%BA%8F%E5%91%98%E8%80%81%E7%8E%8B","fple-mt":null,"type":"first-party-link"}">tmux 使用和基礎配置 從入門到加班 一個視頻全搞定！</span>](https://www.youtube.com/watch?v=QGnjSccjDck&ab_channel=%E7%A8%8B%E5%BA%8F%E5%91%98%E8%80%81%E7%8E%8B)
- [https://hackmd.io/@Cheng-Hao/Hyk9f6mZd](https://hackmd.io/@Cheng-Hao/Hyk9f6mZd)
- [https://blog.csdn.net/qq\_41634814/article/details/119426093](https://blog.csdn.net/qq_41634814/article/details/119426093)
- [<span data-rich-links="{"fple-t":"you need to learn tmux RIGHT NOW!!","fple-u":"https://youtu.be/nTqu6w2wc68?si=f_4pe7lmm3Ax1pan","fple-mt":null,"type":"first-party-link"}">you need to learn tmux RIGHT NOW!!</span>](https://youtu.be/nTqu6w2wc68?si=f_4pe7lmm3Ax1pan)