Linux系統中的screen命令基本使用教程

來源:互聯網
上載者:User

   作為linux伺服器管理員,經常要使用ssh登陸到遠程linux機器上做一些耗時的操作。

  也許你遇到過使用telnet或SSH遠程登入linux,運行一些程式。如果這些程式需要運行很長時間(幾個小時),而程式運行過程中出現網路故障,或者客戶機故障,這時候客戶機與遠程伺服器的連結將終端,並且遠程伺服器沒有正常結束的命令將被迫終止。

  又比如你SSH到主機上後,開始批量的scp命令,如果這個ssh線程斷線了,scp進程就中斷了。在遠程伺服器上正在運行某些耗時的作業,但是工作還沒做完快要下班了,退出的話就會中斷操作了,如何才好呢?

  我們利用screen命令可以很好的解決這個問題。實現在斷開SSH的情況下,在伺服器上繼續執行程式。

  那什麼是screen命令?

  Screen被稱之為一個全屏視窗管理器,用他可以輕鬆在一個物理終端上獲得多個虛擬終端的效果。

  Screen功能說明:

  簡單來說,Screen是一個可以在多個進程之間多工一個物理終端的視窗管理器,這意味著你能夠使用一個單一的終端視窗運行多終端的應用。Screen中有會話的概念,使用者可以在一個screen會話中建立多個screen視窗,在每一個screen視窗中就像操作一個真實的telnet/SSH串連視窗那樣。

  Screen命令文法:

  screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]

  Screen命令參數:

  -A -[r|R] 將所有的視窗都調整為目前終端機的大小。

  -c filename 用指定的filename檔案替代screen的設定檔’.screenrc’.

  -d [pid.tty.host] 斷開screen進程(使用該命令時,screen的狀態一定要是Attached,也就是說有使用者連在screen裡)。一般進程的名字是以pid.tty.host這種形式表示(用screen -list命令可以看出狀態)。

  -D [pid.tty.host] 與-d命令實現一樣的功能,區別就是如果執行成功,會踢掉原來在screen裡的使用者並讓他logout。

  -h <行數>   指定視窗的緩衝區行數。

  -ls或–list 顯示目前所有的screen作業。

  -m 即使目前已在作業中的screen作業,仍強制建立新的screen作業。

  -p number or name 預先選擇一個視窗。

  -r [pid.tty.host] 恢複離線的screen進程,如果有多個斷開的進程,需要指定[pid.tty.host]

  -R 先試圖恢複離線的作業。若找不到離線的作業,即建立新的screen作業。

  -s shell 指定建立新視窗時,所要執行的shell。

  -S <作業名稱> 指定screen作業的名稱。(用來替代[pid.tty.host]的命名方式,可以簡化操作).

  -v 顯示版本資訊。

  -wipe 檢查目前所有的screen作業,並刪除已經無法使用的screen作業。

  -x 恢複之前離線的screen作業。

  Screen命令的常規用法:

  screen -d -r:串連一個screen進程,如果該進程是attached,就先踢掉遠端使用者再串連。

  screen -D -r:串連一個screen進程,如果該進程是attached,就先踢掉遠端使用者並讓他logout再串連

  screen -ls或者-list:顯示存在的screen進程,常用命令

  screen -m:如果在一個Screen進程裡,用快速鍵crtl+a c或者直接打screen可以建立一個新視窗,screen -m可以建立一個screen進程。

  screen -dm:建立一個screen,並預設是detached模式,也就是建好之後不會連上去。

  screen -p number or name:預先選擇一個視窗。

  Screen實現後台運行程式的簡單步驟:

  1> 要進行某項操作時,先使用命令建立一個Screen:

  代碼如下:

  [linux@user~]$ screen -S test1

  2>接著就可以在裡面進行操作了,如果你的任務還沒完成就要走開的話,使用命令保留Screen:

  代碼如下:

  [linux@user~]$ Ctrl+a+d #按Ctrl+a,然後再按d即可保留Screen

  [detached] #這時會顯示出這個提示,說明已經保留好Screen了

  如果你工作完成的話,就直接輸入:

  代碼如下:

  [linux@user~]$ exit #這樣就表示成功退出了

  [screen is terminating]

  3> 如果你上一次保留了Screen,可以使用命令查看:

  代碼如下:

  [linux@user~]$ screen -ls

  There is a screen on:

  9649.test1 (Detached)

  恢複Screen,使用命令:

  代碼如下:

  [linux@user~]$ screen -r test1 (or 9649)

  Screen命令中用到的快速鍵

  Ctrl+a c :建立視窗

  Ctrl+a w :視窗列表

  Ctrl+a n :下一個視窗

  Ctrl+a p :上一個視窗

  Ctrl+a 0-9 :在第0個視窗和第9個視窗之間切換

  Ctrl+a K(大寫) :關閉當前視窗,並且切換到下一個視窗(當退出最後一個視窗時,該終端自動終止,並且退回到原始shell狀態)

  exit :關閉當前視窗,並且切換到下一個視窗(當退出最後一個視窗時,該終端自動終止,並且退回到原始shell狀態)

  Ctrl+a d :退出當前終端,返回載入screen前的shell命令狀態

  多視窗

  screen,像許多的視窗管理器一樣,能支援多視窗。這個功能在處理多個任務且同時沒有開啟新的會話時 很有用。作為一個系統管理員,我常常要同時開四五個SSH會話。在每個shell下,我可能要處理兩三個任務。不使用screen的話,需要15個SSH 會話,15次登入,15個視窗等等。使用screen,每個系統都分配到一個單獨的會話中,我通過screen來管理系統上不同的作業。

  要開啟新的視窗,只需要使用“Ctrl-A”“c”。建立的新的視窗會顯示一個預設的命令提示字元。例如,我可以運行top命令後再開啟一個新的視窗來做其它的工作。Top繼續留在那運行!可以親身實驗一下,啟動screen並運行top。(註:為了節省空間的我截斷了多個螢幕。)

  啟動top

  代碼如下:

  Mem: 506028K av, 500596K used, 5432K free,

  0K shrd, 11752K buff

  Swap: 1020116K av, 53320K used, 966796K free

  393660K cached

< 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

  現在可以通過“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> 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

  你可以建立多個視窗然後通過“Ctrl-A”“n”切換到下一個視窗,或者使用“Ctrl-A”“p”返回上一個視窗。當你在其它視窗工作時,其它視窗的每個程式都會保持運行。

  退出screen

  有兩種方式退出screen。第一種和登出一個shell一樣,你可以通過“Ctrl-A”“K”或者“exit”來終止一個視窗。這樣當前的視窗會被關閉,如果你開啟了多個視窗,你就會直接轉到其餘中的一個,而如果是僅有的一個視窗時,你就退出了screen。

  另外一種退出screen的方式是分離視窗。這種方式只是簡單地關閉了視窗但進程仍運行著。如果你有確定要長時間執行的進程,還需要關閉SSH程式時,你便可以使用“Ctrl-A”“d”分離視窗。這會使你回到shell中。所有的screen視窗都待在那裡,你可以稍後重新接管它們。(譯者註:這很像我們實際中的已最小化的視窗和程式後台運行)

  接管會話

  假設你正用著screen花了很長時間編譯著一個程式,突然間你的串連斷開了。請不用擔心,screen會儲存你的編譯進度。重新登入你的作業系統後使用screen列表工具查看有哪些會話正在運行:

  代碼如下:

  [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會話。要需要重新接管其中一個,使用恢複視窗的命令:

  代碼如下:

  [root@gigan root]#screen -r 31619.ttyp2.gigan

  只需要使用 -r 選項再接會話的名,現在你便可以重新回到剛才的螢幕。令人欣喜的是,你還可以在任何地方重新接管。不論在辦公室還是其它用戶端上,你都可以使用screen來啟動一項工作然後退出。

  多視窗

  screen,像許多的視窗管理器一樣,能支援多視窗。這個功能在處理多個任務且同時沒有開啟新的會話時 很有用。作為一個系統管理員,我常常要同時開四五個SSH會話。在每個shell下,我可能要處理兩三個任務。不使用screen的話,需要15個SSH 會話,15次登入,15個視窗等等。使用screen,每個系統都分配到一個單獨的會話中,我通過screen來管理系統上不同的作業。

  要開啟新的視窗,只需要使用“Ctrl-A”“c”。建立的新的視窗會顯示一個預設的命令提示字元。例如,我可以運行top命令後再開啟一個新的視窗來做其它的工作。Top繼續留在那運行!可以親身實驗一下,啟動screen並運行top。(註:為了節省空間的我截斷了多個螢幕。)

  啟動top

  代碼如下:

  Mem: 506028K av, 500596K used, 5432K free,

  0K shrd, 11752K buff

  Swap: 1020116K av, 53320K used, 966796K free

  393660K cached

< 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

  現在可以通過“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> 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

  你可以建立多個視窗然後通過“Ctrl-A”“n”切換到下一個視窗,或者使用“Ctrl-A”“p”返回上一個視窗。當你在其它視窗工作時,其它視窗的每個程式都會保持運行。

  退出screen

  有兩種方式退出screen。第一種和登出一個shell一樣,你可以通過“Ctrl-A”“K”或者“exit”來終止一個視窗。這樣當前的視窗會被關閉,如果你開啟了多個視窗,你就會直接轉到其餘中的一個,而如果是僅有的一個視窗時,你就退出了screen。

  另外一種退出screen的方式是分離視窗。這種方式只是簡單地關閉了視窗但進程仍運行著。如果你有確定要長時間執行的進程,還需要關閉SSH程式時,你便可以使用“Ctrl-A”“d”分離視窗。這會使你回到shell中。所有的screen視窗都待在那裡,你可以稍後重新接管它們。(譯者註:這很像我們實際中的已最小化的視窗和程式後台運行)

  接管會話

  假設你正用著screen花了很長時間編譯著一個程式,突然間你的串連斷開了。請不用擔心,screen會儲存你的編譯進度。重新登入你的作業系統後使用screen列表工具查看有哪些會話正在運行:

  代碼如下:

  [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會話。要需要重新接管其中一個,使用恢複視窗的命令:

  代碼如下:

  [root@gigan root]#screen -r 31619.ttyp2.gigan

  只需要使用 -r 選項再接會話的名,現在你便可以重新回到剛才的螢幕。令人欣喜的是,你還可以在任何地方重新接管。不論在辦公室還是其它用戶端上,你都可以使用screen來啟動一項工作然後退出。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.