linux的screen命令使用詳解 系統管理員經常需要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的sessionscreen -ls -> 列出當前所有的sessionscreen -r yourname -> 回到yourname這個sessionscreen -d yourname -> 遠程detach某個sessionscreen -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 個 windowCtrl+a [Space] -> 由視窗0循序切換到視窗9C-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,強行關閉當前的 windowC-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 選定的內容貼上 5.1 安裝screen 流行的Linux發行版(例如Red Hat Enterprise Linux)通常會內建screen公用程式,如果沒有的話,可以從GNU screen的官方網站下載。 [root@TS-DEV ~]# yum install screen[root@TS-DEV ~]# rpm -qa|grep screenscreen-4.0.3-4.el5[root@TS-DEV ~]# 5.2 建立一個新的視窗 安裝完成後,直接敲命令screen就可以啟動它。但是這樣啟動的screen會話沒有名字,實踐上推薦為每個screen會話取一個名字,方便分辨: [root@TS-DEV ~]# screen -S david screen啟動後,會建立第一個視窗,也就是視窗No. 0,並在其中開啟一個系統預設的shell,一般都會是bash。所以你敲入命令screen之後,會立刻又返回到命令提示字元,彷彿什麼也沒有發生似的,其實你已經進入Screen的世界了。當然,也可以在screen命令之後加入你喜歡的參數,使之直接開啟你指定的程式,例如: [root@TS-DEV ~]# 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會允許你為當前視窗輸入新的名字,斷行符號確認。