Featured image of post 【tmux #0】好用的終端機管理工具 - tmux  (類似 screen 的進階版) | (updated: 2023/12/14)

【tmux #0】好用的終端機管理工具 - tmux (類似 screen 的進階版) | (updated: 2023/12/14)

前言

screen 如果是基本版的終端機管理工具,
tmux 就是進階版的,能為我們提供更多的功能,
這篇稍微整理一下我會用到的東西。

這邊只有整理我常用的功能,因此「不是完整的功能整理」。

安裝

  • linux:
sudo apt install tmux
  • mac:
brew install tmux

先講結論,一張圖整理完我常用功能 「開啟 / 關閉」

sessions 與 windows

我們在使用 screen 的時候,
預設就是一個又一個的 terminal shell,
但有時後我們會想針對這些 shell 做更多「不同任務上的管理」,

例如:一些 shell 負責 A 任務,一些 shell 負責 B 任務…

這時候如果是 screen,我們會看到終端機完全混在一起,
透過 tmux,我們可以直接進行上述更完整的管理。

如果從上面的例子「一些 shell 負責 A 任務,一些 shell 負責 B 任務」
sessions 就是可以負責幫我們開一個 A 任務的 session,
而 windows 就是可以幫我們開多個 shell

架構圖示大概是

  • tmux
  • sessions
    • windows
  • 個人常用指令

    因為快速鍵「ctrl + B」太過常用,以下 「c+b」 皆等於 「ctrl + B」

    啟動 tmux

    tmux
    

    session 類

    啟用新的 sessions

    • 啟用新的 sessions

    如果是在 tmux 外面,直接 tmux 即可

    tmux
    
    • 啟用新的 session 並命名
    tmux new -s <session name>
    

    查看現有的 tmux sessions

    • 查看現有的 sessions (windows 只會計算數量)
    tmux ls
    

    detach (暫時離開) sessions

    • detach sessions
    c+b d # (detach)
    

    kill sessions (kill windows 也可以)

    快速砍視窗

    c+b w # 先查看所有 windows
    t # tag, 想砍的打上記號
    X # 砍掉
    

    attach session

    • 如果都不指定,那就是回到最近的 session (最方便)
    tmux attach
    # or
    tmux a
    
    • attach 回指定的 session
    tmux attach <session-name>
    tmux attach -t <session-id>
    

    windows 類

    「在一個 session」中啟用新的 windows

    • 啟用新的 windows
    c+b c  # (create)
    

    查看現有的 windows

    • 查看所有的 windows (非常好用!!!)
    c+b w # (select window)
    

    切換 windows

    我們一樣也可以用查看所有的 windows,同步做到切換的功能 (非常好用!!!)

    c+b w # (select window)
    

    如果只是單純要切換到已知編號的視窗:

    c+b <number of window>
    

    刪除 windows

    也就是關掉 windows 與其包含的所有 panes

    方法1: 「c+b &」

    c+b & 
    

    方法2: 透過「kill-window」指令

    :kill-window -t <window-number>
    
    • 「:kill-window -t 」等效於直接輸入
    tmux kill-window -t <window-number>
    

    查看歷史內容

    倒退查看歷史內容 scroll tmux

    因為 tmux 實際上顯示的內容並不是照著視窗在走,
    因此如果我們想要倒退查看之前的 log,

    c+b [ # [, 上括弧 我是記有種往前推的感覺?
    按方向鍵
    q # 退出
    

    (進階) 修改最大歷史紀錄

    因為預設的行數有限制 (也避免佔用系統容量),如果要更大的空間我們需要手動修改。

    最主要是要新增「~/.tmux.conf」這份文件

    echo "set -g history-limit 10000" >> ~/.tmux.conf
    
    • 10000 可以改任意數值,越大可以有越多的歷史紀錄。

    (進階) 切割畫面 (使用 pane)

    切割畫面個人認為屬於比較進階的功能,
    我們可以透過 tmux 直接實現切割畫面

    有些 terminal app 設計上也已經有內建這樣的功能,不過 tmux 更好用的地方是在於他是「自身」就能夠進行畫面分割,無須下載新的 terminal app。

    這時我們的階層會變成像這樣

  • tmux
  • sessions
  • windows
    • panes
  • 每一層都可以開啟多個下一層。

    這時候我們可以下「c+b %」、「c+b “"」
    (我的記法:把 % 看的有點像 o|o ,所以是直的,另外「 " 」就記…. 有兩個單撇XDDD 超爛我知道)
    在不同的 pane 之間切換,我們可以下「c+b 上下左右」,就可以切換了

    這邊要記得,因為可以連續切換,所以在「換到想要的 pane」之後記得先停頓一下

    pane 縮放

    有時候我們會想要對於視窗進行調整,這時候我們可以下「c+b(按住) 上下左右」

    快速排版 pane

    如果透過上面的方式,有時候我們會把版面弄得很亂,
    這時候只需要輸入「c+b space」,就可以快速整理成對齊的樣子。

    可以多按幾次,切換不同種預設的排版。

    關閉 pane

    方法1: 「c+b x」

    使用 x 他會再跟你確認一次,這時候按 y 即可刪除。

    方法2: 「c+d」

    這方法不會再跟你確認一次,會直接刪掉 pane。

    方法3: 使用「c+b :」先叫出功能表後,輸入「:kill-pane」即可刪除。

    範例:在特定的 pane 裡面「:kill-pane」,砍掉該 pane

    • 「:kill-pane」等效於直接輸入
    tmux kill-pane
    

    問題解決:關於 tmux 畫面出現切割的問題 (tmux resize window)

    原因

    主要發生原因是同時有多個 shell attach 至同一個 terminal,
    因為是「同一個 terminal」,會自動符合某一個 size

    解決方法

    將 terminal detach 即可,不過有時候可能因為有「斷線」的情況,
    導致我們無法回去該 terminal,並進行 detach,
    此時我們可以使用「c+b shift+D」(detach target window,是以 window 為單位),
    來快速的 detach 各個尚未 detach 的 terminal。

    Reference

  • 分割畫面
  • Licensed under CC BY-NC-SA 4.0