1. 程式人生 > >linux screen 命令詳解(後臺執行linux命令)

linux screen 命令詳解(後臺執行linux命令)

一、背景

系統管理員經常需要SSH 或者telent 遠端登入到Linux 伺服器,經常執行一些需要很長時間才能完成的任務,比如系統備份、ftp 傳輸等等。通常情況下我們都是為每一個這樣的任務開一個遠端終端視窗,因為它們執行的時間太長了。必須等待它們執行完畢,在此期間不能關掉視窗或者斷開連線,否則這個任務就會被殺掉,一切半途而廢了。

二、簡介

GNU Screen是一款由GNU計劃開發的用於命令列終端切換的自由軟體。使用者可以通過該軟體同時連線多個本地或遠端的命令列會話,並在其間自由切換。

GNU Screen可以看作是視窗管理器的命令列介面版本。它提供了統一的管理多個會話的介面和相應的功能。

  • 會話恢復
只要Screen本身沒有終止,在其內部執行的會話都可以恢復。這一點對於遠端登入的使用者特別有用——即使網路連線中斷,使用者也不會失去對已經開啟的命令列會話的控制。只要再次登入到主機上執行screen -r就可以恢復會話的執行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裡面的程式正常執行的情況下讓Screen掛起(切換到後臺)。這一點和圖形介面下的VNC很相似。
  • 多視窗
在Screen環境下,所有的會話都獨立的執行,並擁有各自的編號、輸入、輸出和視窗快取。使用者可以通過快捷鍵在不同的視窗下切換,並可以自由的重定向各個視窗的輸入和輸出。Screen實現了基本的文字操作,如複製貼上等;還提供了類似滾動條的功能,可以檢視視窗狀況的歷史記錄。視窗還可以被分割槽和命名,還可以監視後臺視窗的活動。
  • 會話共享
Screen可以讓一個或多個使用者從不同終端多次登入一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了視窗訪問許可權的機制,可以對視窗進行密碼保護。

三、語法

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

引數說明

-A  將所有的視窗都調整為目前終端機的大小。
-d <作業名稱>  將指定的screen作業離線。
-h <行數>  指定視窗的緩衝區行數。
-m  即使目前已在作業中的screen作業,仍強制建立新的screen作業。


-r <作業名稱>  恢復離線的screen作業。
-R  先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
-s  指定建立新視窗時,所要執行的shell。
-S <作業名稱>  指定screen作業的名稱。
-v  顯示版本資訊。
-x  恢復之前離線的screen作業。
-ls或--list  顯示目前所有的screen作業。
-wipe  檢查目前所有的screen作業,並刪除已經無法使用的screen作業。

四、常用screen引數

screen -S yourname -> 新建一個叫yourname的session
screen -ls -> 列出當前所有的session
screen -r yourname -> 回到yourname這個session
screen -d yourname -> 遠端detach某個session
screen -d -r yourname -> 結束當前session並回到yourname這個session

在每個screen session 下,所有命令都以 ctrl+a(C-a) 開始。
C-a ? -> 顯示所有鍵繫結資訊
C-a c -> 建立一個新的執行shell的視窗並切換到該視窗
C-a n -> Next,切換到下一個 window 
C-a p -> Previous,切換到前一個 window 
C-a 0..9 -> 切換到第 0..9 個 window
Ctrl+a [Space] -> 由視窗0循序切換到視窗9
C-a C-a -> 在兩個最近使用的 window 間切換 
C-a x -> 鎖住當前的 window,需用使用者密碼解鎖
C-a d -> detach,暫時離開當前session,將目前的 screen session (可能含有多個 windows) 丟到後臺執行,並會回到還沒進 screen 時的狀態,此時在 screen session 裡,每個 window 內執行的 process (無論是前臺/後臺)都在繼續執行,即使 logout 也不影響。 
C-a z -> 把當前session放到後臺執行,用 shell 的 fg 命令則可回去。
C-a w -> 顯示所有視窗列表
C-a t -> Time,顯示當前時間,和系統的 load 
C-a k -> kill window,強行關閉當前的 window
C-a [ -> 進入 copy mode,在 copy mode 下可以回滾、搜尋、複製就像用使用 vi 一樣
    C-b Backward,PageUp 
    C-f Forward,PageDown 
    H(大寫) High,將游標移至左上角 
    L Low,將游標移至左下角 
    0 移到行首 
    $ 行末 
    w forward one word,以字為單位往前移 
    b backward one word,以字為單位往後移 
    Space 第一次按為標記區起點,第二次按為終點 
    Esc 結束 copy mode 
C-a ] -> Paste,把剛剛在 copy mode 選定的內容貼上

五、使用 screen

5.1 安裝screen

流行的Linux發行版(例如Red Hat Enterprise Linux)通常會自帶screen實用程式,如果沒有的話,可以從GNU screen的官方網站下載。

[[email protected] ~]# yum install screen
[[email protected] ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[[email protected] ~]#

5.2 建立一個新的視窗

安裝完成後,直接敲命令screen就可以啟動它。但是這樣啟動的screen會話沒有名字,實踐上推薦為每個screen會話取一個名字,方便分辨:

[[email protected] ~]# screen -S david 

screen啟動後,會建立第一個視窗,也就是視窗No. 0,並在其中開啟一個系統預設的shell,一般都會是bash。所以你敲入命令screen之後,會立刻又返回到命令提示符,彷彿什麼也沒有發生似的,其實你已經進入Screen的世界了。當然,也可以在screen命令之後加入你喜歡的引數,使之直接開啟你指定的程式,例如:

[[email protected] ~]# screen vi david.txt

screen建立一個執行vi david.txt的單視窗會話,退出vi 將退出該視窗/會話。

5.3 檢視視窗和視窗名稱

開啟多個視窗後,可以使用快捷鍵C-a w列出當前所有視窗。如果使用文字終端,這個列表會列在螢幕左下角,如果使用X環境下的終端模擬器,這個列表會列在標題欄裡。視窗列表的樣子一般是這樣:

0$ bash  1-$ bash  2*$ bash  

這個例子中我開啟了三個視窗,其中*號表示當前位於視窗2,-號表示上一次切換視窗時位於視窗1。

Screen預設會為視窗命名為編號和視窗中執行程式名的組合,上面的例子中視窗都是預設名字。練習了上面檢視視窗的方法,你可能就希望各個視窗可以有不同的名字以方便區分了。可以使用快捷鍵C-a A來為當前視窗重新命名,按下快捷鍵後,Screen會允許你為當前視窗輸入新的名字,回車確認。

5.4 會話分離與恢復

你可以不中斷screen視窗中程式的執行而暫時斷開(detach)screen會話,並在隨後時間重新連線(attach)該會話,重新控制各視窗中執行的程式。例如,我們開啟一個screen視窗編輯/tmp/david.txt檔案:

[[email protected] ~]# screen vi /tmp/david.txt

之後我們想暫時退出做點別的事情,比如出去散散步,那麼在screen視窗鍵入C-a d,Screen會給出detached提示:

暫時中斷會話

半個小時之後回來了,找到該screen會話:

[[email protected] ~]# screen -ls

重新連線會話:

[[email protected] ~]# screen -r 12865

一切都在。

當然,如果你在另一臺機器上沒有分離一個Screen會話,就無從恢復會話了。

這時可以使用下面命令強制將這個會話從它所在的終端分離,轉移到新的終端上來:

5.5 清除dead 會話

如果由於某種原因其中一個會話死掉了(例如人為殺掉該會話),這時screen -list會顯示該會話為dead狀態。使用screen -wipe命令清除該會話:

5.6 關閉或殺死視窗

正常情況下,當你退出一個視窗中最後一個程式(通常是bash)後,這個視窗就關閉了。另一個關閉視窗的方法是使用C-a k,這個快捷鍵殺死當前的視窗,同時也將殺死這個視窗中正在執行的程序。

如果一個Screen會話中最後一個視窗被關閉了,那麼整個Screen會話也就退出了,screen程序會被終止。

除了依次退出/殺死當前Screen會話中所有視窗這種方法之外,還可以使用快捷鍵C-a :,然後輸入quit命令退出Screen會話。需要注意的是,這樣退出會殺死所有視窗並退出其中執行的所有程式。其實C-a :這個快捷鍵允許使用者直接輸入的命令有很多,包括分屏可以輸入split等,這也是實現Screen功能的一個途徑,不過個人認為還是快捷鍵比較方便些。

六、screen 高階應用 

6.1 會話共享

還有一種比較好玩的會話恢復,可以實現會話共享。假設你在和朋友在不同地點以相同使用者登入一臺機器,然後你建立一個screen會話,你朋友可以在他的終端上命令:

[[email protected] ~]# screen -x

這個命令會將你朋友的終端Attach到你的Screen會話上,並且你的終端不會被Detach。這樣你就可以和朋友共享同一個會話了,如果你們當前又處於同一個視窗,那就相當於坐在同一個顯示器前面,你的操作會同步演示給你朋友,你朋友的操作也會同步演示給你。當然,如果你們切換到這個會話的不同視窗中去,那還是可以分別進行不同的操作的。

6.2 會話鎖定與解鎖

Screen允許使用快捷鍵C-a s鎖定會話。鎖定以後,再進行任何輸入螢幕都不會再有反應了。但是要注意雖然螢幕上看不到反應,但你的輸入都會被Screen中的程序接收到。快捷鍵C-a q可以解鎖一個會話。

也可以使用C-a x鎖定會話,不同的是這樣鎖定之後,會話會被Screen所屬使用者的密碼保護,需要輸入密碼才能繼續訪問這個會話。

6.3 傳送命令到screen會話

在Screen會話之外,可以通過screen命令操作一個Screen會話,這也為使用Screen作為指令碼程式增加了便利。關於Screen在指令碼中的應用超出了入門的範圍,這裡只看一個例子,體會一下在會話之外對Screen的操作:

[[email protected] ~]# screen -S sandy -X screen ping www.baidu.com

這個命令在一個叫做sandy的screen會話中建立一個新視窗,並在其中執行ping命令。

6.4 螢幕分割

現在顯示器那麼大,將一個螢幕分割成不同區域顯示不同的Screen視窗顯然是個很酷的事情。可以使用快捷鍵C-a S將顯示器水平分割,Screen 4.00.03版本以後,也支援垂直分屏,快捷鍵是C-a |。分屏以後,可以使用C-a <tab>在各個區塊間切換,每一區塊上都可以建立視窗並在其中執行程序。

可以用C-a X快捷鍵關閉當前焦點所在的螢幕區塊,也可以用C-a Q關閉除當前區塊之外其他的所有區塊。關閉的區塊中的視窗並不會關閉,還可以通過視窗切換找到它。

6.5 C/P模式和操作

screen的另一個很強大的功能就是可以在不同視窗之間進行復制貼上了。使用快捷鍵C-a <Esc>或者C-a [可以進入copy/paste模式,這個模式下可以像在vi中一樣移動游標,並可以使用空格鍵設定標記。其實在這個模式下有很多類似vi的操作,譬如使用/進行搜尋,使用y快速標記一行,使用w快速標記一個單詞等。關於C/P模式下的高階操作,其文件的這一部分有比較詳細的說明。

一般情況下,可以移動游標到指定位置,按下空格設定一個開頭標記,然後移動游標到結尾位置,按下空格設定第二個標記,同時會將兩個標記之間的部分儲存在copy/paste buffer中,並退出copy/paste模式。在正常模式下,可以使用快捷鍵C-a ]將儲存在buffer中的內容貼上到當前視窗。

6.6 更多screen功能

同大多數UNIX程式一樣,GNU Screen提供了豐富強大的定製功能。你可以在Screen的預設兩級配置檔案/etc/screenrc和$HOME/.screenrc中指定更多,例如設定screen選項,定製繫結鍵,設定screen會話自啟動視窗,啟用多使用者模式,定製使用者訪問許可權控制等等。如果你願意的話,也可以自己指定screen配置檔案。

以多使用者功能為例,screen預設是以單使用者模式執行的,你需要在配置檔案中指定multiuser on 來開啟多使用者模式,通過acl*(acladd,acldel,aclchg...)命令,你可以靈活配置其他使用者訪問你的screen會話。更多配置檔案內容請參考screen的man頁。

相關推薦

linux screen 命令(後臺執行linux命令)

一、背景 系統管理員經常需要SSH 或者telent 遠端登入到Linux 伺服器,經常執行一些需要很長時間才能完成的任務,比如系統備份、ftp 傳輸等等。通常情況下我們都是為每一個這樣的任務開一個遠端終端視窗,因為它們執行的時間太長了。必須等待它們執行完畢,在此期間不

Linux命令手冊》——Linux暢銷書作家又一力作

預計在9月份上市,敬請期待!內容簡介: 本書出自多本Linux暢銷書作者Negus之手,他以多年實踐經驗為基礎,且從大多數系統管理員的日常工作需求出發,分門別類、細緻入微地解釋了使用shell、處理檔案、玩轉多媒體、管理檔案系統、備份和恢復資料、操控程序、管理系統、監控

Linux常用命令-目錄檔案操作命令

   現實中,伺服器(包含Linux,Unix,Windows Server)一般都擺放在機房裡,因為一個機房擺放了很多Linux機器,所有機器都運轉起來,整個室內溫度也是非常高的,所以作為一個要操作Linux的開發人員,它們通常都是通過ssh遠端連線操作Lin

windows防火牆命令(程式啟用命令執行即可)

netsh firewall set portopening protocol = TCP port = 9998 name = ssssssssssssssssssssssss mode = ENABLE scope = SUBNET profile = CURRENT

Mysql體系結構——後臺執行緒(待更新)

本文只是一個初稿,還有很多不確定的地方。晚上在看看官方文件看看。 InnoDB儲存引擎是多執行緒的模型,因此其後臺有多個不同的後臺執行緒,負責處理不同的任務。 1.Master Thread Master Thread是一個非常核心的後臺執行緒,主要負責將

linux screen 命令

文本 常用 小時 遠程終端 參考 編輯 load 調整 長時間 一、背景 系統管理員經常需要SSH 或者telent 遠程登錄到Linux 服務器,經常運行一些需要很長時間才能完成的任務,比如系統備份、ftp 傳輸等等。通常情況下我們都是為每一個這樣的任務開一個遠程終端窗口

Linux下的crontab定時執行任務命令

   crontab命令常見於Unix和類Unix的作業系統之中,用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。該詞來源於希臘語 chronos(χρνο),原意是時間。通常,crontab儲存的指令被守護

php中如何執行linux命令

前言 本文主要給大家介紹了關於在php中如何執行linux命令的相關內容,下面話不多說了,來一起看看詳細的介紹吧 php如何執行某個命令 ,官方手冊在這裡 我們先從shell_exec來說 如何使用shell_exec在php裡面執行shell命令 先來試一下,使用php執行某個

Linux 執行程序實時監控pidstat命令

簡介  pidstat主要用於監控全部或指定程序佔用系統資源的情況,如CPU,記憶體、裝置IO、任務切換、執行緒等。pidstat首次執行時顯示自系統啟動開始的各項統計資訊,之後執行pidstat將顯示自上次執行該命令以後的統計資訊。使用者可以通過指定統計的次數和時間來

Linux下的cron定時執行任務命令

部落格引用處(以下內容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導): Linux下的crontab定時執行任務命令詳解 在LINUX中,週期執行的任務一般由cron這個守護程序來處理[ps -ef|grep cron]。cron讀取一個或多個配置檔案,這些配置檔案中包含了

LinuxLinux中at命令 (自動化執行

在windows系統中,windows提供了計劃任務這一功能,在控制面板 -> 效能與維護 -> 任務計劃, 它的功能就是安排自動執行的任務。 通過'新增任務計劃'的一步步引導,則可建立一個定時執行的任務。 在linux系統中你可能已經發現了為什麼系統常常會

Linux nohup命令,終端關閉程式依然可以在執行

大家好,我是良許。 在工作中,我們很經常跑一個很重要的程式,有時候這個程式需要跑好幾個小時,甚至需要幾天,這個時候如果我們退出終端,或者網路不好連線中斷,那麼程式就會被中止。而這個情況肯定不是我們想看到的,我們希望即使終端關閉,程式依然可以在跑。 這時我們就可以使用 `nohup` 這個命令。 `noh

Linux下安裝軟件命令

代碼包 相關信息 make bin 一個 軟件包 輸入 -i bin文件 Linux下軟件安裝方法總結:一、rpm包安裝方式步驟:1、找到相應的軟件包,比如soft.version.rpm,下載到本機某個目錄;2、打開一個終端,su -成root用戶;3、cd soft.v

linux下cat命令

forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[

Linux:at命令

計時 osi 執行 inux days pan 必須 man 一個 at命令 at命令為單一工作調度命令。at命令非常簡單,但是在指定時間上卻非常強大 語法 at [選項] time at > 執行的命令 ctrl+d 選項 -m :當指定的任務被

linux 之awk命令

數學函數 mat loop 多次 finished 數組結構 save pre 新的 awk是一種程序語言,對文檔資料的處理具有很強的功能。awk名稱是由它三個最初設計者的姓氏的第一個字母而命名的: Alfred V. Aho、Peter J. We i n b e rg

【轉】linux之cp/scp命令+scp命令

特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source

Linux netstat命令,高級面試必備

bytes tool head osi ngs 進行 pen 通信 詳細信息 簡介 Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Mem

Linux下的tar壓縮壓縮命令

命令 .tar.gz 需要 logo 意思 追加 lin 產生 ron tar -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只

linux top 命令

ctrl+ 一次 所有 使用方法 ase 隱藏 統計 ini 前臺 top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下面詳細介紹它的使用方法。top - 01:06:48 up 1:22, 1 user