screen 與 tmux:多工終端機管理 文章首圖

screen 與 tmux:多工終端機管理

screen 與 tmux:多工終端機管理

在 Linux 系統管理與開發工作中,我們經常需要執行長時間運行的任務,例如編譯程式、部署伺服器或進行大型數據分析。然而,當 SSH 連線因網路不穩而斷線時,這些未完成的任務往往會無情地終止,導致前功盡棄。為了解決這個痛點,「終端機多工工具」便成為了每位 Linux 使用者的必備技能。其中,screentmux 是最為廣泛使用的兩大解決方案。本文将深入解析這兩者的差異、核心指令與實際應用場景,幫助你掌握終端機的多工管理藝術。

為什麼需要終端機多工工具?

傳統上,我們依賴 SSH 連線來操作遠端伺服器。一旦連線中斷,該連線下所有正在執行的程式都會收到 SIGHUP 訊號並隨之停止。screentmux 的核心價值在於它們創建了一個「虛擬終端機」,這個終端機運行在伺服器端的背景中,與你的 SSH 連線解耦。即使你關閉了本地端的終視窗或網路中斷,只要伺服器端服務仍在運行,你的工作就不會受到影響。

此外,它們都支援「分離」(detach)與「重新連接」(attach)功能,允許你在不同裝置間無縫切換工作環境,極大提升了系統管理的彈性與效率。

Screen:經典穩健的選擇

screen 是歷史悠久的終端機多工工具,預設安裝於大多數 Linux 發行版中。它的指令語法較為傳統,雖然功能強大,但快捷鍵組合相對複雜。

基本操作

啟動一個新的 session 並給予名稱(便於識別):

screen -S my_project

進入 session 後,你可以像平常一樣執行指令。若要暫時離開(detach)而不終止程式,請按下 Ctrl+a 後再按 d

[detached from 12345.my_project]

若要重新連接(attach)到之前離開的 session:

screen -r my_project

若有多個 session,可使用 screen -ls 查看列表,並指定 PID 或名稱來連接。

進階技巧

screen 支援分頁(splitting),允許在同一個視窗中上下或左右分割畫面。按下 Ctrl+a 後,按 S 進行垂直分割,按 | 進行水平分割。切換分頁使用 Ctrl+a 後按 Tab

Tmux:現代化的多工霸主

相較於 screentmux(Terminal Multiplexer)提供了更直觀的快捷鍵設計、更強大的面板管理以及更好的複製模式(copy mode)。對於現代開發者而言,tmux 往往是首選。

基本操作

啟動一個新的 tmux session:

tmux new -s my_dev

若要分離 session,按下 Ctrl+b 後再按 d

[exited session]

重新連接:

tmux attach -t my_dev

同樣地,使用 tmux ls 列出所有 session。

面板與窗口管理

tmux 的核心優勢在於其靈活的佈局。預設快捷鍵前綴為 Ctrl+b

  1. 分割視窗:按下 Ctrl+b 後,按 % 垂直分割,按 " 水平分割。
  2. 切換面板:按下 Ctrl+b 後,使用方向鍵(h, j, k, l)切換當前焦點所在的面板。
  3. 調整大小:按下 Ctrl+b 後,按 : 進入命令模式,輸入 resize-pane -D 5 可將下方面板向下擴展 5 格。

複製模式(Copy Mode)

這是 tmux 最受歡迎的功能之一,允許你像使用 Vim 一樣複製終端機中的文字。

  1. 按下 Ctrl+b 後按 [ 進入複製模式。
  2. 使用方向鍵移動游標,選取文字。
  3. 按下 Enter 複製選取內容。
  4. 按下 q 退出複製模式。
  5. 在另一個面板中,按下 Ctrl+b 後按 ] 貼上內容。

常見問題與解決方案

1. 無法重新連接 Session

當嘗試執行 tmux attachscreen -r 時,若出現「Attached.」或「There is no session.」的錯誤,通常有以下原因:

  • Session 已結束:若主程式已執行完畢,session 會自動關閉。請使用 tmux ls 確認 session 狀態。
  • Zombie Session:有時 SSH 異常斷線會導致 session 處於「已分離但存在」的狀態。可強制刪除:
    tmux kill-server  # 終止所有 tmux 伺服器
    # 或
    screen -wipe      # 清除 screen 中已死去的 session

2. 快捷鍵衝突

預設的 Ctrl+a (screen) 或 Ctrl+b (tmux) 可能會與某些應用程式(如 Vim 的插件或 Emacs)衝突。解決方法是在 ~/.tmux.conf 中修改前綴鍵。例如,將 tmux 前綴改為 Ctrl+a

# 在 ~/.tmux.conf 中加入
unbind C-b
set -g prefix C-a
bind C-a send-prefix

小結

screentmux 都是極其強大的終端機管理工具。screen 勝在普遍性與輕量,適合快速環境下的基本需求;而 tmux 則以其現代化的介面、強大的面板管理與複製模式,成為開發者與系統管理員的首選。無論選擇哪一款,掌握它們都能顯著提升你在 Linux 環境中的工作效率與穩定性。建議初學者從 tmux 開始學習,其直觀的設計將為你帶來更順暢的使用體驗。