GNU Screen 是一個終端多路複用器(視窗管理器)。顧名思義,Screen 可以在多個互動式 shell 之間複用物理終端,因此我們可以在每個終端對談中執行不同的任務。所有的 Screen 對談都完全獨立地執行程式。因此,即使對談意外關閉或斷開連線,在 Screen 對談內執行的程式或進程也將繼續執行。例如,當通過 SSH 升級 Ubuntu 伺服器時,screen
命令將繼續執行升級過程,以防萬一 SSH 對談因任何原因而終止。
GNU Screen 允許我們輕鬆建立多個 Screen 對談,在不同對談之間切換,在對談之間複製文字,隨時連上或脫離對談等等。它是每個 Linux 管理員應該在必要時學習和使用的重要命令列工具之一。在本簡要指南中,我們將看到 screen
命令的基本用法以及在 Linux 中的範例。
GNU Screen 在大多數 Linux 作業系統的預設儲存庫中都可用。
要在 Arch Linux 上安裝 GNU Screen,請執行:
$ sudo pacman -S screen
在 Debian、Ubuntu、Linux Mint 上:
$ sudo apt-get install screen
在 Fedora 上:
$ sudo dnf install screen
在 RHEL、CentOS 上:
$ sudo yum install screen
在 SUSE/openSUSE 上:
$ sudo zypper install screen
讓我們繼續看一些 screen
命令範例。
在 Screen 中所有命令的預設字首快捷方式是 Ctrl + a
。使用 Screen 時,你需要經常使用此快捷方式。所以,要記住這個鍵盤快捷鍵。
讓我們建立一個新的 Screen 對談並連上它。為此,請在終端中鍵入以下命令:
screen
現在,在此對談中執行任何程式或進程,即使你與此對談斷開連線,正在執行的進程或程式也將繼續執行。
要從螢幕對談中脫離,請按 Ctrl + a
和 d
。你無需同時按下兩個組合鍵。首先按 Ctrl + a
然後按 d
。從對談中脫離後,你將看到類似下面的輸出。
[detached from 29149.pts-0.sk]
這裡,29149
是 Screen ID,pts-0.sk
是螢幕對談的名稱。你可以使用 Screen ID 或相應的對談名稱來連上、脫離和終止螢幕對談。
你還可以用你選擇的任何自定義名稱建立一個 Screen 對談,而不是預設使用者名稱,如下所示。
screen -S ostechnix
上面的命令將建立一個名為 xxxxx.ostechnix
的新 Screen 對談,並立即連上它。要從當前對談中脫離,請按 Ctrl + a
,然後按 d
。
當你想要查詢哪些進程在哪些對談上執行時,命名對談會很有用。例如,當在對談中設定 LAMP 系統時,你可以簡單地將其命名為如下所示。
screen -S lampstack
有時,你可能想要建立一個對談,但不希望自動連上該對談。在這種情況下,執行以下命令來建立名為senthil
的已脫離對談:
screen -S senthil -d -m
也可以縮短為:
screen -dmS senthil
上面的命令將建立一個名為 senthil
的對談,但不會連上它。
要列出所有正在執行的對談(連上的或脫離的),請執行:
screen -ls
範例輸出:
There are screens on: 29700.senthil (Detached) 29415.ostechnix (Detached) 29149.pts-0.sk (Detached)3 Sockets in /run/screens/S-sk.
如你所見,我有三個正在執行的對談,並且所有對談都已脫離。
如果你想連上對談,例如 29415.ostechnix
,只需執行:
screen -r 29415.ostechnix
或:
screen -r ostechnix
或使用 Screen ID:
screen -r 29415
要驗證我們是否連上到上述對談,只需列出開啟的對談並檢查。
screen -ls
範例輸出:
There are screens on: 29700.senthil (Detached) 29415.ostechnix (Attached) 29149.pts-0.sk (Detached)3 Sockets in /run/screens/S-sk.
如你所見,在上面的輸出中,我們目前已連上到 29415.ostechnix
對談。要退出當前對談,請按 ctrl + a d
。
當我們執行 screen
命令時,它將為我們建立一個對談。但是,我們可以建立巢狀對談(對談內的對談)。
首先,建立一個新對談或連上已開啟的對談。然後我將建立一個名為 nested
的新對談。
screen -S nested
現在,在對談中按 Ctrl + a
和 c
建立另一個對談。只需重複此操作即可建立任意數量的巢狀 Screen 對談。每個對談都將分配一個號碼。號碼將從 0
開始。
你可以按 Ctrl + n
移動到下一個對談,然後按 Ctrl + p
移動到上一個對談。
以下是管理巢狀對談的重要鍵盤快捷鍵列表。
Ctrl + a "
- 列出所有對談Ctrl + a 0
- 切換到對談號 0Ctrl + a n
- 切換到下一個對談Ctrl + a p
- 切換到上一個對談Ctrl + a S
- 將當前區域水平分割為兩個區域Ctrl + a l
- 將當前區域垂直分割為兩個區域Ctrl + a Q
- 關閉除當前對談之外的所有對談Ctrl + a X
- 關閉當前對談Ctrl + a \
- 終止所有對談並終止 ScreenCtrl + a ?
- 顯示鍵繫結。要退出,請按回車 #### 鎖定對談Screen 有一個鎖定對談的選項。為此,請按 Ctrl + a
和 x
。 輸入你的 Linux 密碼以鎖定。
Screen used by sk <sk> on ubuntuserver.Password:
你可能希望記錄 Screen 對談中的所有內容。為此,只需按 Ctrl + a
和 H
即可。
或者,你也可以使用 -L
引數啟動新對談來啟用紀錄檔記錄。
screen -L
從現在開始,你在對談中做的所有活動都將記錄並儲存在 $HOME
目錄中名為 screenlog.x
的檔案中。這裡,x
是一個數位。
你可以使用 cat
命令或任何文字檢視器檢視紀錄檔檔案的內容。
記錄 Screen 對談
如果不再需要對談,只需殺死它。要殺死名為 senthil
的脫離對談:
screen -r senthil -X quit
或:
screen -X -S senthil quit
或:
screen -X -S 29415 quit
如果沒有開啟的對談,你將看到以下輸出:
$ screen -lsNo Sockets found in /run/screens/S-sk.
更多細節請參照 man 手冊頁:
$ man screen
還有一個名為 Tmux 的類似的命令列實用程式,它與 GNU Screen 執行相同的工作。要了解更多資訊,請參閱以下指南。