screen命令示例:管理多個(gè)終端會(huì)話
GNU Screen 是一個(gè)終端多路復(fù)用器(窗口管理器)。顧名思義,Screen 可以在多個(gè)交互式 shell 之間復(fù)用物理終端,因此我們可以在每個(gè)終端會(huì)話中執(zhí)行不同的任務(wù)。所有的 Screen 會(huì)話都完全獨(dú)立地運(yùn)行程序。因此,即使會(huì)話意外關(guān)閉或斷開連接,在 Screen 會(huì)話內(nèi)運(yùn)行的程序或進(jìn)程也將繼續(xù)運(yùn)行。例如,當(dāng)通過 SSH 升級(jí) Ubuntu 服務(wù)器時(shí),screen 命令將繼續(xù)運(yùn)行升級(jí)過程,以防萬一 SSH 會(huì)話因任何原因而終止。
GNU Screen 允許我們輕松創(chuàng)建多個(gè) Screen 會(huì)話,在不同會(huì)話之間切換,在會(huì)話之間復(fù)制文本,隨時(shí)連上或脫離會(huì)話等等。它是每個(gè) Linux 管理員應(yīng)該在必要時(shí)學(xué)習(xí)和使用的重要命令行工具之一。在本簡要指南中,我們將看到 screen 命令的基本用法以及在 Linux 中的示例。
安裝 GNU Screen
GNU Screen 在大多數(shù) Linux 操作系統(tǒng)的默認(rèn)存儲(chǔ)庫中都可用。
要在 Arch Linux 上安裝 GNU Screen,請(qǐng)運(yùn)行:
$ 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
讓我們繼續(xù)看一些 screen 命令示例。
管理多個(gè)終端會(huì)話的 Screen 命令示例
在 Screen 中所有命令的默認(rèn)前綴快捷方式是 Ctrl + a。使用 Screen 時(shí),你需要經(jīng)常使用此快捷方式。所以,要記住這個(gè)鍵盤快捷鍵。
創(chuàng)建新的 Screen 會(huì)話
讓我們創(chuàng)建一個(gè)新的 Screen 會(huì)話并連上它。為此,請(qǐng)?jiān)诮K端中鍵入以下命令:
screen
現(xiàn)在,在此會(huì)話中運(yùn)行任何程序或進(jìn)程,即使你與此會(huì)話斷開連接,正在運(yùn)行的進(jìn)程或程序也將繼續(xù)運(yùn)行。
從 Screen 會(huì)話脫離
要從屏幕會(huì)話中脫離,請(qǐng)按 Ctrl + a 和 d。你無需同時(shí)按下兩個(gè)組合鍵。首先按 Ctrl + a 然后按 d。從會(huì)話中脫離后,你將看到類似下面的輸出。
[detached from 29149.pts-0.sk]
這里,29149 是 Screen ID,pts-0.sk 是屏幕會(huì)話的名稱。你可以使用 Screen ID 或相應(yīng)的會(huì)話名稱來連上、脫離和終止屏幕會(huì)話。
創(chuàng)建命名會(huì)話
你還可以用你選擇的任何自定義名稱創(chuàng)建一個(gè) Screen 會(huì)話,而不是默認(rèn)用戶名,如下所示。
screen -S ostechnix
上面的命令將創(chuàng)建一個(gè)名為 xxxxx.ostechnix 的新 Screen 會(huì)話,并立即連上它。要從當(dāng)前會(huì)話中脫離,請(qǐng)按 Ctrl + a,然后按 d。
當(dāng)你想要查找哪些進(jìn)程在哪些會(huì)話上運(yùn)行時(shí),命名會(huì)話會(huì)很有用。例如,當(dāng)在會(huì)話中設(shè)置 LAMP 系統(tǒng)時(shí),你可以簡單地將其命名為如下所示。
screen -S lampstack
創(chuàng)建脫離的會(huì)話
有時(shí),你可能想要?jiǎng)?chuàng)建一個(gè)會(huì)話,但不希望自動(dòng)連上該會(huì)話。在這種情況下,運(yùn)行以下命令來創(chuàng)建名為senthil 的已脫離會(huì)話:
screen -S senthil -d -m
也可以縮短為:
screen -dmS senthil
上面的命令將創(chuàng)建一個(gè)名為 senthil 的會(huì)話,但不會(huì)連上它。
列出屏幕會(huì)話
要列出所有正在運(yùn)行的會(huì)話(連上的或脫離的),請(qǐng)運(yùn)行:
screen -ls
示例輸出:
There are screens on:29700.senthil (Detached)29415.ostechnix (Detached)29149.pts-0.sk (Detached)3 Sockets in /run/screens/S-sk.
如你所見,我有三個(gè)正在運(yùn)行的會(huì)話,并且所有會(huì)話都已脫離。
連上 Screen 會(huì)話
如果你想連上會(huì)話,例如 29415.ostechnix,只需運(yùn)行:
screen -r 29415.ostechnix
或:
screen -r ostechnix
或使用 Screen ID:
screen -r 29415
要驗(yàn)證我們是否連上到上述會(huì)話,只需列出打開的會(huì)話并檢查。
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 會(huì)話。要退出當(dāng)前會(huì)話,請(qǐng)按 ctrl + a d。
創(chuàng)建嵌套會(huì)話
當(dāng)我們運(yùn)行 screen 命令時(shí),它將為我們創(chuàng)建一個(gè)會(huì)話。但是,我們可以創(chuàng)建嵌套會(huì)話(會(huì)話內(nèi)的會(huì)話)。
首先,創(chuàng)建一個(gè)新會(huì)話或連上已打開的會(huì)話。然后我將創(chuàng)建一個(gè)名為 nested 的新會(huì)話。
screen -S nested
現(xiàn)在,在會(huì)話中按 Ctrl + a 和 c 創(chuàng)建另一個(gè)會(huì)話。只需重復(fù)此操作即可創(chuàng)建任意數(shù)量的嵌套 Screen 會(huì)話。每個(gè)會(huì)話都將分配一個(gè)號(hào)碼。號(hào)碼將從 0 開始。
你可以按 Ctrl + n 移動(dòng)到下一個(gè)會(huì)話,然后按 Ctrl + p 移動(dòng)到上一個(gè)會(huì)話。
以下是管理嵌套會(huì)話的重要鍵盤快捷鍵列表。
Ctrl + a "- 列出所有會(huì)話Ctrl + a 0- 切換到會(huì)話號(hào) 0Ctrl + a n- 切換到下一個(gè)會(huì)話Ctrl + a p- 切換到上一個(gè)會(huì)話Ctrl + a S- 將當(dāng)前區(qū)域水平分割為兩個(gè)區(qū)域Ctrl + a l- 將當(dāng)前區(qū)域垂直分割為兩個(gè)區(qū)域Ctrl + a Q- 關(guān)閉除當(dāng)前會(huì)話之外的所有會(huì)話Ctrl + a X- 關(guān)閉當(dāng)前會(huì)話Ctrl + a \- 終止所有會(huì)話并終止 ScreenCtrl + a ?- 顯示鍵綁定。要退出,請(qǐng)按回車 #### 鎖定會(huì)話
Screen 有一個(gè)鎖定會(huì)話的選項(xiàng)。為此,請(qǐng)按 Ctrl + a 和 x。 輸入你的 Linux 密碼以鎖定。
Screen used by sk <sk> on ubuntuserver.Password:
記錄會(huì)話
你可能希望記錄 Screen 會(huì)話中的所有內(nèi)容。為此,只需按 Ctrl + a 和 H 即可。
或者,你也可以使用 -L 參數(shù)啟動(dòng)新會(huì)話來啟用日志記錄。
screen -L
從現(xiàn)在開始,你在會(huì)話中做的所有活動(dòng)都將記錄并存儲(chǔ)在 $HOME 目錄中名為 screenlog.x 的文件中。這里,x 是一個(gè)數(shù)字。
你可以使用 cat 命令或任何文本查看器查看日志文件的內(nèi)容。
記錄 Screen 會(huì)話
終止 Screen 會(huì)話
如果不再需要會(huì)話,只需殺死它。要?dú)⑺烂麨?senthil 的脫離會(huì)話:
screen -r senthil -X quit
或:
screen -X -S senthil quit
或:
screen -X -S 29415 quit
如果沒有打開的會(huì)話,你將看到以下輸出:
$ screen -lsNo Sockets found in /run/screens/S-sk.
更多細(xì)節(jié)請(qǐng)參照 man 手冊(cè)頁:
$ man screen
還有一個(gè)名為 Tmux 的類似的命令行實(shí)用程序,它與 GNU Screen 執(zhí)行相同的工作。要了解更多信息,請(qǐng)參閱以下指南。


























