[Linux] 使用 tmux 分割終端機視窗與保留 session 狀態

[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,找出最適用的工具吧~

 

參考資料:

(本頁面已被瀏覽過 19 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料