[Linux] 使用 tmux 分割終端機視窗與保留 session 狀態
之前就有聽過 tmux 這個工具,
其實也試用過一次,不過雖然它有分割視窗的功能,
但因為 Mac 上的 iTerm2 就有,所以找不到去使用 tmux 的理由…
不過最近,終於發現 tmux 可以用在什麼地方啦~
事情緣起是在家工作後,常常需要讓 Mac 使用 VPN 連回公司 Ubuntu 機器,
再透過 Ubuntu 機器連進 Lab 裡的 CentOS 機器:
不過可能是因為 VPN 不夠穩定的關係,
常常會操作到一半時,VPN 突然就斷線重連,
這會導致 Ubuntu 到 CentOS 的連線也同時斷線。
假設我正在 CentOS 上執行一個較長的工作,就會被迫中斷。
只能在重新連回 CentOS 後,重新再跑一次操作:
tmux 在這件事情上面,可以怎麼幫忙呢?
我們一樣從 Mac 用 ssh 透過 VPN 連至 Ubuntu,
但這次在 Ubuntu 那台上先執行 tmux,在 tmux 裡面再連到 CentOS:
而因為 tmux 可以保留 session,
因此就算 VPN 斷線了,Ubuntu 上透過 tmux 連至 CentOS 的 session 都會留著。
我們只要重新連回 Ubuntu,再接回原本的 tmux session,
就能接續原本的操作畫面了~
那麼就來看看 tmux 要如何使用吧~
1. 安裝 tmux
在 Ubuntu 上安裝 tmux 的話,可以使用 apt:
sudo apt install tmux
2. 執行 tmux
執行 tmux
指令後,就會進入如下畫面,
下方會有一條綠色的橫條,表示已經成功進入 tmux 了:
基本上這裡面就還是一般的終端機 (terminal),
只是可以加上 tmux 的特殊功能。
要使用 tmux 的特殊功能時,都要先按下 Ctrl-B 後,放開再按其他的鍵。
特殊功能:分割視窗
舉例來說,按 Ctrl-B 後放開,再按 ” 鍵,就會水平分割視窗,
焦點也會跑到新分出來的窗格 (pane) 上:
像我在下面的視窗按 Ctrl-B 後,再按 % 鍵的話,
就變成左右分割視窗了:
按 Ctrl-B 後,再按空白鍵,
則會根據目前分割視窗的數量,在幾種預設的排版方式上輪調。
像是我按第一次時,是變成三個窗格左右排列:
再按一次 Ctrl-B 後按空白鍵,變成了上下排列:
再按又變成了其中之一窗格占大部分,其他的較小:
要在分割出來的窗格間移動時,
就按 Ctrl-B 後,再按上下左右方向鍵,焦點就會移往那個方向的窗格。
特殊功能:分離 (detach) 與接上 (attach) 執行階段 (session)
當 tmux 執行之後,就會產生一個 tmux 執行階段 (session)。
每個 session 裡會有你在這終端機裡執行的所有東西。
你可以隨時從一個 session 中分離 (detach) 出來,
也可以重新接上 (attach) 一個已經存在的 session。
執行 tmux ls
可以列出目前所有的 tmux session,
像目前我只有一個 session (session 0):
$ tmux ls 0: 1 windows (created Sat Nov 20 01:26:44 2021)
假設只有一個 session 的話,
要重新接上就只要執行 tmux a
或是 tmux attach
,否則就要加上 session id。
像我上面說的 VPN 斷線時,我只要重新 ssh 連上 Ubuntu 機器,
再重新接回 tmux session,在 session 裡對 CentOS 機器的連線都還存在,
也看的到先前執行的指令與輸出,因此可以很快的回復工作狀態~
3. 設定 tmux
使用 tmux 一陣子之後,就會發現一些問題,
像是想用滑鼠/觸控板往上滑動,看之前執行過的指令與結果時,
它卻是捲動你跑過的指令 (有點像是在按向上鍵)。
另一個問題是平常我在 iTerms 裡會按 Cmd-K 清掉螢幕及緩衝區,
避免螢幕上有太多不相關的資料殘留。
但是使用 tmux 時,按 Cmd-K 只會清掉整個畫面,
但 tmux 裡面的螢幕緩衝區並不會被清掉…
找了一下,這些問題都可以藉由修改 ~/.tmux.conf 來解決,
像我是加了下面兩行,
第一行允許用滑鼠捲動螢幕,
第二行則是讓我在按下 Ctrl-l 時,可以在 tmux 裡清掉螢幕與緩衝區:
set -g mouse on bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
不過用滑鼠捲動螢幕時,其實又造成另一個問題,
那就是這時候沒辦法用滑鼠選取文字來複製…
只有在按 q 結束捲動模式時,才能再用滑鼠去選取複製文字,有點不便…
不過不管怎樣,tmux 在保留 session 上還是非常值得一用的,
在不同的狀況下分別使用 iTerms/tmux,找出最適用的工具吧~
參考資料:
- 終端機 session 管理神器 — tmux
- tmux shortcuts & cheatsheet
- How do I scroll in tmux? – Super User
- terminal – How can I clear scrollback buffer in Tmux?