SSH 連接斷開導致長時間運行任務中斷、無法恢復現場,是遠程運維的經典痛點。GNU Screen 作為終端多路復用器,通過「會話-窗口-面板」三層架構,實現會話脫離/重掛、多任務並行、跨終端共享,是系統管理員、開發者、運維工程師的必備生存技能。
-S name)Ctrl+a S / Ctrl+a |)| 操作 | 命令/快捷鍵 | 說明 |
|---|---|---|
| 創建命名會話 | screen -S mysession | 易於識別與重掛 |
| 創建並執行命令 | screen -S build -d -m make | 後台脫離模式啟動長任務 |
| 列出會話 | screen -ls | 顯示 PID.名稱、狀態 (Attached/Detached) |
| 重掛最近會話 | screen -r | 僅一個 Detached 會話時 |
| 重掛指定會話 | screen -r mysession 或 screen -r 12345 | PID 或名稱均可 |
| 強制重掛 | screen -D -r mysession | 遠程斷開未正常 Detach 時 |
| 會話內創建窗口 | Ctrl+a c | 新窗口編號遞增 |
| 切換窗口 | Ctrl+a n (下一個) / p (上一個) / 0-9 (編號) / " (列表) | |
| 重命名窗口 | Ctrl+a A | 便於列表識別 |
| 分割面板 | Ctrl+a S (橫向) / | (縱向) | 需先分割再 Ctrl+a Tab 切換焦點 |
| 關閉面板 | Ctrl+a X | 確認後關閉 |
| 脫離會話 | Ctrl+a d | 會話後台持續運行 |
| 殺死會話 | Ctrl+a k (確認 y) / screen -X -S name quit | 終止所有窗口進程 |
| 複製模式/滾動歷史 | Ctrl+a [ → 方向鍵/PageUp/Down → Enter 選擇 → ] 粘貼 | 搜索 /、標記 Space |
| 監視靜默/活動 | Ctrl+a _ / M | 窗口無輸出/有輸出時通知 |
| 鎖定會話 | Ctrl+a x | 需輸入當前用戶密碼解鎖 |
~/.screenrc 精選優化# 狀態欄常駐底部,顯示窗口列表、負載、時間
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
# 關閉啟動提示
startup_message off
# 滾動緩衝 10000 行
defscrollback 10000
# 禁用視覺鈴聲
vbell off
# 設置默認 Shell
shell -$SHELL
# 綁定鍵位:F2 新窗口、F3/F4 切換、F5 重命名
bindkey -k k2 screen
bindkey -k k3 prev
bindkey -k k4 next
bindkey -k k5 title
# 開啟 UTF-8
defutf8 on
ssh user@server
screen -S kernel-build -d -m make -j$(nproc) # 後台啟動
# 關閉筆記本回家
# 翌日
ssh user@server
screen -r kernel-build # 瞬間恢復現場,查看輸出
窗口 0:htop 監控 | 窗口 1:tail -f /var/log/messages | 窗口 2:編輯配置 vim /etc/nginx/nginx.conf | 窗口 3:測試命令。Ctrl+a" 快速跳轉。
# 用戶 A 創建會話
screen -S pair
# 用戶 B 連接同一服務器,以多用戶模式加入
screen -x pair
# 雙方同時看到相同終端,均可輸入 (需配置 multiuser on, acladd userB)
~/.screenrc 添加:
multiuser on
acladd colleague_username
#!/bin/bash
# deploy.sh
screen -S deploy -d -m bash -c '
cd /opt/app && git pull && ./build.sh && systemctl reload app
echo "Deploy finished at $(date)"
exec bash # 保持窗口查看輸出
'
| 維度 | Screen | Tmux |
|---|---|---|
| 架構 | 單進程、C/S 模式 (screen 進程做服務端) | 客戶端-服務端,Socket 通信,更穩健 |
| 面板分割 | 基礎支持,操作較繁瑣 | 原生強大,Ctrl+b %/" 直觀 |
| 腳本/插件生態 | 較少 | 豐富 (TPM、主題、狀態欄插件) |
| 資源佔用 | 略低 | 略高 |
| 普及度 | 極高,幾乎所有 Unix 預裝 | 現代發行版默認安裝或一鍵裝 |
建議:新環境優先 Tmux;維護舊系統、極簡容器、嵌入式設備,Screen 更可靠。
export LANG=zh_CN.UTF-8、defutf8 on、終端模擬器設置 UTF-8screen -wipe 清理死 Socket、檢查 /var/run/screen/ 權限TERM=screen-256color、screen -T screen-256colorScreen 以極小的體積、極廣的兼容性、極強的會話持久化能力,成為 Linux 終端操作的「保險繩」。掌握 -S/-r/-ls/-d -m 核心參數與 Ctrl+a 系列快捷鍵,配合 .screenrc 定制化狀態欄與鍵位,即可從「斷網恐懼症」中徹底解脫,實現真正的隨時隨地、所見即所得的遠程操作自由。