Linux系統(tǒng)中的screen命令基本使用教程

作為linux服務(wù)器管理員,經(jīng)常要使用ssh登陸到遠(yuǎn)程linux機(jī)器上做一些耗時的操作。
也許你遇到過使用telnet或SSH遠(yuǎn)程登錄linux,運(yùn)行一些程序。如果這些程序需要運(yùn)行很長時間(幾個小時),而程序運(yùn)行過程中出現(xiàn)網(wǎng)絡(luò)故障,或者客戶機(jī)故障,這時候客戶機(jī)與遠(yuǎn)程服務(wù)器的鏈接將終端,并且遠(yuǎn)程服務(wù)器沒有正常結(jié)束的命令將被迫終止。
又比如你SSH到主機(jī)上后,開始批量的scp命令,如果這個ssh線程斷線了,scp進(jìn)程就中斷了。在遠(yuǎn)程服務(wù)器上正在運(yùn)行某些耗時的作業(yè),但是工作還沒做完快要下班了,退出的話就會中斷操作了,如何才好呢?
我們利用screen命令可以很好的解決這個問題。實現(xiàn)在斷開SSH的情況下,在服務(wù)器上繼續(xù)執(zhí)行程序。
那什么是screen命令?
Screen被稱之為一個全屏窗口管理器,用他可以輕松在一個物理終端上獲得多個虛擬終端的效果。
Screen功能說明:
簡單來說,Screen是一個可以在多個進(jìn)程之間多路復(fù)用一個物理終端的窗口管理器,這意味著你能夠使用一個單一的終端窗口運(yùn)行多終端的應(yīng)用。Screen中有會話的概念,用戶可以在一個screen會話中創(chuàng)建多個screen窗口,在每一個screen窗口中就像操作一個真實的telnet/SSH連接窗口那樣。
Screen命令語法:
screen [-AmRvx -ls -wipe][-d <作業(yè)名稱>][-h <行數(shù)>][-r <作業(yè)名稱>][-s ][-S <作業(yè)名稱>]
Screen命令參數(shù):
-A -[r|R] 將所有的視窗都調(diào)整為目前終端機(jī)的大小。
-c filename 用指定的filename文件替代screen的配置文件’.screenrc’.
-d [pid.tty.host] 斷開screen進(jìn)程(使用該命令時,screen的狀態(tài)一定要是Attached,也就是說有用戶連在screen里)。一般進(jìn)程的名字是以pid.tty.host這種形式表示(用screen -list命令可以看出狀態(tài))。
-D [pid.tty.host] 與-d命令實現(xiàn)一樣的功能,區(qū)別就是如果執(zhí)行成功,會踢掉原來在screen里的用戶并讓他logout。
-h <行數(shù)> 指定視窗的緩沖區(qū)行數(shù)。
-ls或–list 顯示目前所有的screen作業(yè)。
-m 即使目前已在作業(yè)中的screen作業(yè),仍強(qiáng)制建立新的screen作業(yè)。
-p number or name 預(yù)先選擇一個窗口。
-r [pid.tty.host] 恢復(fù)離線的screen進(jìn)程,如果有多個斷開的進(jìn)程,需要指定[pid.tty.host]
-R 先試圖恢復(fù)離線的作業(yè)。若找不到離線的作業(yè),即建立新的screen作業(yè)。
-s shell 指定建立新視窗時,所要執(zhí)行的shell。
-S <作業(yè)名稱> 指定screen作業(yè)的名稱。(用來替代[pid.tty.host]的命名方式,可以簡化操作).
-v 顯示版本信息。
-wipe 檢查目前所有的screen作業(yè),并刪除已經(jīng)無法使用的screen作業(yè)。
-x 恢復(fù)之前離線的screen作業(yè)。
Screen命令的常規(guī)用法:
screen -d -r:連接一個screen進(jìn)程,如果該進(jìn)程是attached,就先踢掉遠(yuǎn)端用戶再連接。
screen -D -r:連接一個screen進(jìn)程,如果該進(jìn)程是attached,就先踢掉遠(yuǎn)端用戶并讓他logout再連接
screen -ls或者-list:顯示存在的screen進(jìn)程,常用命令
screen -m:如果在一個Screen進(jìn)程里,用快捷鍵crtl+a c或者直接打screen可以創(chuàng)建一個新窗口,screen -m可以新建一個screen進(jìn)程。
screen -dm:新建一個screen,并默認(rèn)是detached模式,也就是建好之后不會連上去。
screen -p number or name:預(yù)先選擇一個窗口。
Screen實現(xiàn)后臺運(yùn)行程序的簡單步驟:
1> 要進(jìn)行某項操作時,先使用命令創(chuàng)建一個Screen:
[linux@user~]$ screen -S test1
2>接著就可以在里面進(jìn)行操作了,如果你的任務(wù)還沒完成就要走開的話,使用命令保留Screen:
[linux@user~]$ Ctrl+a+d #按Ctrl+a,然后再按d即可保留Screen
[detached] #這時會顯示出這個提示,說明已經(jīng)保留好Screen了
如果你工作完成的話,就直接輸入:
[linux@user~]$ exit #這樣就表示成功退出了
[screen is terminating]
3> 如果你上一次保留了Screen,可以使用命令查看:
[linux@user~]$ screen -ls
There is a screen on:
9649.test1 (Detached)
恢復(fù)Screen,使用命令:
[linux@user~]$ screen -r test1 (or 9649)
Screen命令中用到的快捷鍵
Ctrl+a c :創(chuàng)建窗口
Ctrl+a w :窗口列表
Ctrl+a n :下一個窗口
Ctrl+a p :上一個窗口
Ctrl+a 0-9 :在第0個窗口和第9個窗口之間切換
Ctrl+a K(大寫) :關(guān)閉當(dāng)前窗口,并且切換到下一個窗口(當(dāng)退出最后一個窗口時,該終端自動終止,并且退回到原始shell狀態(tài))
exit :關(guān)閉當(dāng)前窗口,并且切換到下一個窗口(當(dāng)退出最后一個窗口時,該終端自動終止,并且退回到原始shell狀態(tài))
Ctrl+a d :退出當(dāng)前終端,返回加載screen前的shell命令狀態(tài)
多窗口
screen,像許多的窗口管理器一樣,能支持多窗口。這個功能在處理多個任務(wù)且同時沒有打開新的會話時 很有用。作為一個系統(tǒng)管理員,我常常要同時開四五個SSH會話。在每個shell下,我可能要處理兩三個任務(wù)。不使用screen的話,需要15個SSH 會話,15次登錄,15個窗口等等。使用screen,每個系統(tǒng)都分配到一個單獨(dú)的會話中,我通過screen來管理系統(tǒng)上不同的作業(yè)。
要打開新的窗口,只需要使用“Ctrl-A”“c”。創(chuàng)建的新的窗口會顯示一個默認(rèn)的命令提示符。例如,我可以運(yùn)行top命令后再打開一個新的窗口來做其它的工作。Top繼續(xù)留在那運(yùn)行!可以親身實驗一下,啟動screen并運(yùn)行top。(注:為了節(jié)省空間我截斷了多個屏幕。)
啟動top
Mem: 506028K av, 500596K used, 5432K free,
0K shrd, 11752K buff
Swap: 1020116K av, 53320K used, 966796K free
393660K cached</p> <p> PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME
6538 root 25 0 1892 1892 596 R 49.1 0.3
6614 root 16 0 1544 1544 668 S 28.3 0.3
7198 admin 15 0 1108 1104 828 R 5.6 0.2
現(xiàn)在可以通過“Ctrl-A”“c”來打開一個新窗口
[admin@ensim admin]$
To get back to top, use "Ctrl-A "n"
Mem: 506028K av, 500588K used, 5440K free,
0K shrd, 11960K buff
Swap: 1020116K av, 53320K used, 966796K free
392220K cached</p> <p> PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME
6538 root 25 0 1892 1892 596 R 48.3 0.3
6614 root 15 0 1544 1544 668 S 30.7 0.3
你可以創(chuàng)建多個窗口然后通過“Ctrl-A”“n”切換到下一個窗口,或者使用“Ctrl-A”“p”返回上一個窗口。當(dāng)你在其它窗口工作時,其它窗口的每個程序都會保持運(yùn)行。
退出screen
有兩種方式退出screen。第一種和登出一個shell一樣,你可以通過“Ctrl-A”“K”或者“exit”來終止一個窗口。這樣當(dāng)前的窗口會被關(guān)閉,如果你打開了多個窗口,你就會直接轉(zhuǎn)到其余中的一個,而如果是僅有的一個窗口時,你就退出了screen。
另外一種退出screen的方式是分離窗口。這種方式只是簡單地關(guān)閉了窗口但進(jìn)程仍運(yùn)行著。如果你有確定要長時間執(zhí)行的進(jìn)程,還需要關(guān)閉SSH程序時,你便可以使用“Ctrl-A”“d”分離窗口。這會使你回到shell中。所有的screen窗口都待在那里,你可以稍后重新接管它們。(譯者注:這很像我們實際中的最小化窗口和程序后臺運(yùn)行)
接管會話
假設(shè)你正用著screen花了很長時間編譯著一個程序,突然間你的連接斷開了。請不用擔(dān)心,screen會保存你的編譯進(jìn)度。重新登錄你的操作系統(tǒng)后使用screen列表工具查看有哪些會話正在運(yùn)行:
[root@gigan root]# screen -ls
There are screens on:
31619.ttyp2.gigan (Detached)
4731.ttyp2.gigan (Detached)
2 Sockets in /tmp/screens/S-root.
在這里,我有兩個不同的screen會話。要需要重新接管其中一個,使用恢復(fù)窗口的命令:
[root@gigan root]#screen -r 31619.ttyp2.gigan
只需要使用 -r 選項再接會話的名,現(xiàn)在你便可以重新回到剛才的屏幕。令人欣喜的是,你還可以在任何地方重新接管。不論在辦公室還是其它客戶端上,你都可以使用screen來啟動一項工作然后退出。
多窗口
screen,像許多的窗口管理器一樣,能支持多窗口。這個功能在處理多個任務(wù)且同時沒有打開新的會話時 很有用。作為一個系統(tǒng)管理員,我常常要同時開四五個SSH會話。在每個shell下,我可能要處理兩三個任務(wù)。不使用screen的話,需要15個SSH 會話,15次登錄,15個窗口等等。使用screen,每個系統(tǒng)都分配到一個單獨(dú)的會話中,我通過screen來管理系統(tǒng)上不同的作業(yè)。
要打開新的窗口,只需要使用“Ctrl-A”“c”。創(chuàng)建的新的窗口會顯示一個默認(rèn)的命令提示符。例如,我可以運(yùn)行top命令后再打開一個新的窗口來做其它的工作。Top繼續(xù)留在那運(yùn)行!可以親身實驗一下,啟動screen并運(yùn)行top。(注:為了節(jié)省空間我截斷了多個屏幕。)
啟動top
Mem: 506028K av, 500596K used, 5432K free,
0K shrd, 11752K buff
Swap: 1020116K av, 53320K used, 966796K free
393660K cached</p> <p> PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME
6538 root 25 0 1892 1892 596 R 49.1 0.3
6614 root 16 0 1544 1544 668 S 28.3 0.3
7198 admin 15 0 1108 1104 828 R 5.6 0.2
現(xiàn)在可以通過“Ctrl-A”“c”來打開一個新窗口
[admin@ensim admin]$
To get back to top, use "Ctrl-A "n"
Mem: 506028K av, 500588K used, 5440K free,
0K shrd, 11960K buff
Swap: 1020116K av, 53320K used, 966796K free
392220K cached</p> <p> PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME
6538 root 25 0 1892 1892 596 R 48.3 0.3
6614 root 15 0 1544 1544 668 S 30.7 0.3
你可以創(chuàng)建多個窗口然后通過“Ctrl-A”“n”切換到下一個窗口,或者使用“Ctrl-A”“p”返回上一個窗口。當(dāng)你在其它窗口工作時,其它窗口的每個程序都會保持運(yùn)行。
退出screen
有兩種方式退出screen。第一種和登出一個shell一樣,你可以通過“Ctrl-A”“K”或者“exit”來終止一個窗口。這樣當(dāng)前的窗口會被關(guān)閉,如果你打開了多個窗口,你就會直接轉(zhuǎn)到其余中的一個,而如果是僅有的一個窗口時,你就退出了screen。
另外一種退出screen的方式是分離窗口。這種方式只是簡單地關(guān)閉了窗口但進(jìn)程仍運(yùn)行著。如果你有確定要長時間執(zhí)行的進(jìn)程,還需要關(guān)閉SSH程序時,你便可以使用“Ctrl-A”“d”分離窗口。這會使你回到shell中。所有的screen窗口都待在那里,你可以稍后重新接管它們。(譯者注:這很像我們實際中的最小化窗口和程序后臺運(yùn)行)
接管會話
假設(shè)你正用著screen花了很長時間編譯著一個程序,突然間你的連接斷開了。請不用擔(dān)心,screen會保存你的編譯進(jìn)度。重新登錄你的操作系統(tǒng)后使用screen列表工具查看有哪些會話正在運(yùn)行:
[root@gigan root]# screen -ls
There are screens on:
31619.ttyp2.gigan (Detached)
4731.ttyp2.gigan (Detached)
2 Sockets in /tmp/screens/S-root.
在這里,我有兩個不同的screen會話。要需要重新接管其中一個,使用恢復(fù)窗口的命令:
[root@gigan root]#screen -r 31619.ttyp2.gigan
只需要使用 -r 選項再接會話的名,現(xiàn)在你便可以重新回到剛才的屏幕。令人欣喜的是,你還可以在任何地方重新接管。不論在辦公室還是其它客戶端上,你都可以使用screen來啟動一項工作然后退出。
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤信息? 查看Linux硬盤大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過程中,查看和了解硬盤信息是非常重要的工作,尤其是對于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細(xì)信息? 3招輕松查看CPU型號、核心數(shù)和溫度
在日常運(yùn)維工作中,獲取 CPU 信息是系統(tǒng)運(yùn)維管理員常見的工作內(nèi)容,無論是為了性能調(diào)優(yōu)、硬件升級還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨(dú)樹一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡化,優(yōu)化,現(xiàn)代化,實用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來簡要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機(jī)U盤?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個win11裝機(jī)u盤,詳細(xì)如下2025-02-17Rsnapshot怎么用? 基于Rsync的強(qiáng)大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過 SSH 備份遠(yuǎn)程文件,接下來詳細(xì)介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時、每天、每周和每月的本地備份,以及如何進(jìn)2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡化內(nèi)核搶占邏輯,通過減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運(yùn)行時表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來了諸多優(yōu)化和改進(jìn),進(jìn)一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來看看詳細(xì)安裝指南2025-01-16