大家是否都遇到過這樣的情況:在遠(yuǎn)程機(jī)器上執(zhí)行一個(gè)長(zhǎng)時(shí)間運(yùn)行的任務(wù),突然之間連接斷開了,SSH會(huì)話被終止,正常運(yùn)行的工作丟失了。幸運(yùn)的是,有一個(gè)叫做screen
的實(shí)用工具,它能夠幫助我們恢復(fù)會(huì)話。
引言
Screen或GNU Screen是一個(gè)終端復(fù)用器。換句話說,你可以開始一個(gè)screen會(huì)話,然后在該會(huì)話中打開任意數(shù)量的窗口(虛擬終端)。在Screen中運(yùn)行的進(jìn)程即使在它們的窗口不可見時(shí)也會(huì)繼續(xù)運(yùn)行,即使斷開了連接。
安裝Linux GNU Screen
screen包現(xiàn)在在大多數(shù)Linux發(fā)行版上都是預(yù)安裝的。您可以通過輸入以下命令來檢查它是否安裝在您的系統(tǒng)上:
screen --version
Screen version 4.06.02 (GNU) 23-Oct-17
如果您的系統(tǒng)上沒有安裝screen,您可以使用您的發(fā)行版的包管理器輕松安裝它。
在Ubuntu和Debian上安裝Linux Screen
sudo apt update
sudo apt install screen
在CentOS和Fedora上安裝Linux Screen
sudo yum install screen
啟動(dòng)Linux Screen
要開始一個(gè)screen會(huì)話,只需在控制臺(tái)中輸入screen
:
screen
這將打開一個(gè)screen會(huì)話,創(chuàng)建一個(gè)新窗口,并在該窗口中啟動(dòng)一個(gè)shell。
現(xiàn)在您已經(jīng)打開了一個(gè)screen會(huì)話,您可以通過輸入以下命令來獲取命令列表:
Ctrl+a
?
啟動(dòng)命名會(huì)話
命名會(huì)話在運(yùn)行多個(gè)screen會(huì)話時(shí)非常有用。要?jiǎng)?chuàng)建一個(gè)命名會(huì)話,請(qǐng)使用以下參數(shù)運(yùn)行screen命令:
screen -S session_name
選擇一個(gè)描述性的會(huì)話名稱總是一個(gè)好主意。
使用Linux Screen窗口
當(dāng)您開始一個(gè)新的screen會(huì)話時(shí),它會(huì)創(chuàng)建一個(gè)帶有shell的單個(gè)窗口。
您可以在Screen會(huì)話中有多個(gè)窗口。
要?jiǎng)?chuàng)建一個(gè)帶有shell的新窗口,請(qǐng)輸入Ctrl+a
c
,將從范圍0...9
中分配第一個(gè)可用的數(shù)字給它。
以下是一些管理Linux Screen窗口的最常見命令:
? Ctrl+a
c
創(chuàng)建一個(gè)新窗口(帶有shell)。
? Ctrl+a
"
列出所有窗口。
? Ctrl+a
0
切換到窗口0(按編號(hào))。
? Ctrl+a
A
重命名當(dāng)前窗口。
? Ctrl+a
S
將當(dāng)前區(qū)域水平分割成兩個(gè)區(qū)域。
? Ctrl+a
|
將當(dāng)前區(qū)域垂直分割成兩個(gè)區(qū)域。
? Ctrl+a
tab
將輸入焦點(diǎn)切換到下一個(gè)區(qū)域。
? Ctrl+a
Ctrl+a
在當(dāng)前窗口和上一個(gè)窗口之間切換。
? Ctrl+a
Q
關(guān)閉除當(dāng)前區(qū)域外的所有區(qū)域。
? Ctrl+a
X
關(guān)閉當(dāng)前區(qū)域。
從Linux Screen會(huì)話分離
您可以隨時(shí)通過輸入以下命令從screen會(huì)話中分離:
Ctrl+a
d
在screen會(huì)話中運(yùn)行的程序在您分離會(huì)話后將繼續(xù)運(yùn)行。
重新連接到Linux Screen
要恢復(fù)您的screen會(huì)話,請(qǐng)使用以下命令:
screen -r
如果您的機(jī)器上有多個(gè)screen會(huì)話正在運(yùn)行,您需要在r
開關(guān)后附加screen會(huì)話ID。
要找到會(huì)話ID,請(qǐng)使用以下命令列出當(dāng)前運(yùn)行的screen會(huì)話:
screen -ls
There are screens on:
10835.pts-0.linuxize-desktop (Detached)
10366.pts-0.linuxize-desktop (Detached)
2 Sockets in /run/screens/S-linuxize.
如果您想恢復(fù)screen 10835.pts-0,那么輸入以下命令:
screen -r 10835
自定義Linux Screen
當(dāng)screen
啟動(dòng)時(shí),它會(huì)從/etc/screenrc
和~/.screenrc
(如果文件存在)中讀取其配置參數(shù)。我們可以使用.screenrc
文件根據(jù)我們的偏好修改默認(rèn)的Screen設(shè)置。
這是一個(gè)帶有自定義狀態(tài)行和一些額外選項(xiàng)的~/.screenrc
配置樣本:
~/.screenrc
# Turn off the welcome message
startup_message off
# Disable visual bell
vbell off
# Set scrollback buffer to 10000
defscrollback 10000
# Customize the status line
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}]'
Linux Screen的基本使用
以下是使用screen的最基本步驟:
1. 在命令提示符下輸入screen
。
2. 運(yùn)行所需的程序。
3. 使用鍵序列Ctrl-a
+ Ctrl-d
從screen會(huì)話中分離。
4. 通過輸入screen -r
重新連接到screen會(huì)話。
無論是服務(wù)器運(yùn)維、科學(xué)計(jì)算還是持續(xù)集成,GNU Screen 都是 Linux 環(huán)境下不可或缺的生產(chǎn)力工具。通過簡(jiǎn)單的配置優(yōu)化,它還能變身個(gè)性化終端工作臺(tái)?,F(xiàn)在就掌握這門必備技能,讓遠(yuǎn)程操作更穩(wěn)定、更高效!
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫可供參考,大家可自行查閱,更多技術(shù)問題,也可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。更多技術(shù)知識(shí),藍(lán)隊(duì)云期待與你一起探索,助力你在 Linux 運(yùn)維之路上穩(wěn)步前行。