實用的 screen 終端機管理程式
screen 是一個很方便的終端機管理程式,可以讓你在同一個終端機開啟多個 Session 來操作,加強多工的處理。即使你要離開電腦,也可以將 Session 執行脫離,或直接關閉終端機,這時執行中的程式還是會繼續執行,下次登入終端機時再取回 Session 來操作即可。
首先執行 Screen 程式,開始一個 Session:
$ screen
某些終端機視窗會在標題列顯示目前在操作的終端機編號,如果沒有顯示,你也可以輸入:
$ tty
來了解你目前正在哪個終端機中。
以快速鍵操作
切換時的快速鍵一開始都是 Ctrl + A
- 新增 Session:
Ctrl + A → Ctrl + C - 切換到上一個編號的 Session:
Ctrl + A → Ctrl + P - 切換到下一個編號的 Session:
Ctrl + A → Ctrl + N - 切換到指定編號的 Session:
Ctrl + A → 數字鍵 - 切換到下一個編號的 Session:
Ctrl + A → Space - 在兩個 Session 之間互相切換:
Ctrl + A → Ctrl + A - 鎖定 Session:
Ctrl + A → Ctrl + X - 顯示 Session 列表,可供你選取:
Ctrl + A → ⇧Shift + " - 新視窗的標題列顯示所有的 Session 編號 (其中有加上 * 表示是目前使用的 Session) :
Ctrl + A → Ctrl + W - 水平分割視窗 (可以持續分割) :
Ctrl + A → ⇧Shift + S - 垂直分割視窗 (可以持續分割,只有特定版本才支援,請參考後方的說明) :
Ctrl + A → ⇧Shift + | - 在分割的視窗做切換:
Ctrl + A → Tab - 關閉分割的視窗:
Ctrl + A → ⇧Shift + Q - 將所有的 Session 脫離(Detach),並回到執行 screen 前的狀態:
Ctrl + A → Ctrl + D
在這種狀態下,用戶可以不須理會這些 Session。不管用戶離線或是要從別的地方登入,只要下次登入時執行:screen -r
將所有 Session 叫回來繼續操作。
- 重新命名 Session:
Ctrl + A → ⇧Shift + A - 顯示日期、主機名稱及負載:
Ctrl + A → Ctrl + T - 將畫面暫停 (程式仍繼續執行):
Ctrl + A → Ctrl + S - 將暫停的畫面恢復:
Ctrl + A → Ctrl + Q
screen 的相關指令
- 啟動 Screen 程式,開始一個 Session:
$ screen
或指定 Id
$ screen -S SessionId
- 查看同一帳號共開啟過多少個 Session 及其 Id:
$ screen -ls
- 取回被脫離執行的 Session:
$ screen -r
或
$ screen -r SessionId
- 將其它的 Session 強制脫離:
$ screen -d
或
$ screen -d SessionId
這功能適用於原本操作的電腦當機或斷線了,讓你可以在下次取回還在主機中執行的 Session。
- 同步操作終端機 Session (兩邊必須登入相同的帳號):
$ screen -x
或
$ screen -x SessionId
- 移除 Session:
$ screen -wipe SessionId
模擬頁籤顯示
如果要在畫面底部秀出現在在哪個編號的 Session,請編輯 /etc/screenrc 或 ~/.screenrc,加入:
hardstatus alwayslastline "%-w%{= BW}%50>%n %t%{-}%+w%<"
同步作業說明
假設我在我目前所操作的終端機 Session 要分享給另一端的登入者查看,並且可以操作 (或者是我不想將遠端登入的用戶脫離 Session),則我要先以我的帳號登入主機並且執行 screen -S 特定名稱,然後另一端的登入者:
- 以相同的帳號登入主機
- 以 screen -ls 查看要取回的終端機 Session
- 以 screen -x 特定名稱 或 screen -x SessionId 進入相同的終端機 Session
垂直分割視窗
因為 screen 只能水平分割視窗,不能充分利用寬螢幕的特性實在有點可惜! 這裡有新版可垂直分割功能的 screen:
請自行編譯安裝。
命令別名
因為 screen 很實用,於是我在 bashrc 建立兩個 screen 指令的別名:
alias scr='screen -d -r Normal || screen -S Normal' alias scl='screen -ls'
我只要登入終端機就先打一次 scr,以取回上一次沒關閉的 Session。如果沒有上一次沒關閉的 Session,則會建立一個新的 Session。
scl 則可以列出目前有幾個屬於我的 session。
近期迴響