Screen命令使用指南

如果你問我什麼命令最能提高工作過程中的幸福感,就目前的情況來看,我一定會毫不猶豫地回答:“screen!沒錯就是screen,一定要會用screen!”至於原因且聽下段分解。

1、screen簡介

GNU Screen是一款由GNU計劃開發的用於命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,並在其間自由切換。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。(from維基百科

2、screen功能

作爲一個命令行版本的窗口管理器,screen主要有如下幾個功能(如下內容取自維基百科):

(1)會話恢復

只要Screen本身沒有終止,在其內部運行的會話都可以恢復。這一點對於遠程登錄的用戶特別有用——即使網絡連接中斷,用戶也不會失去對已經打開的命令行會話的控制。只要再次登錄到主機上執行screen -r就可以恢復會話的運行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裏面的程序正常運行的情況下讓Screen掛起(切換到後臺)。這一點和圖形界面下的VNC很相似。

(2)多窗口
在Screen環境下,所有的會話都獨立的運行,並擁有各自的編號、輸入、輸出和窗口緩存。用戶可以通過快捷鍵在不同的窗口下切換,並可以自由的重定向各個窗口的輸入和輸出。Screen實現了基本的文本操作,如複製粘貼等;還提供了類似滾動條的功能,可以查看窗口狀況的歷史記錄。窗口還可以被分區和命名,還可以監視後臺窗口的活動。
(3)會話共享
Screen可以讓一個或多個用戶從不同終端多次登錄一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了窗口訪問權限的機制,可以對窗口進行密碼保護。

3、使用實例

這部分主要講我是如何使用screen命令的。其實,screen主要是用在運行作業耗時比較長的情況。比如,我現在從windows用一個ssh的客戶端(我一般用SecureCRT)連接到服務器,然後運行一個命令跑起一個作業。如果耗時比較長,我windows端的ssh客戶端必須一直開着,不然,服務器上運行的作業就停了。這是很討人煩的一點,因爲即使能夠不關機,一直開着這個ssh客戶端,萬一網絡出了問題,還是會悲劇。這裏就是screen發揮威力的地方。

screen可以管理一系列的多個會話,然後,可以將要運行的作業跑在某個會話下面。這樣,即使windows的ssh客戶端關掉或者是網絡出了問題,只要沒有通過screen將其運行的會話關掉,跑在服務器上的作業仍然會繼續運行,而且你可以隨時在任何地方(比如換臺機器)重新連接服務器,連接到之前的會話來觀察作業的運行情況。下面就講一個使用中的例子。

3.1 使用

爲了測試,首先我先寫一個比較耗時的任務,這裏爲了簡單,就直接寫了兩個for循環間隔1s輸出,來耗時任務的運行。代碼如下:

#!/bin/bash
#file name: work.sh
for a in aaa bbb ccc;
do
    echo $a
    sleep 1
done

for((a = 0;a<1000;a++));
do
    echo $a
    sleep 1
done
然後,對這個腳本使用命令“chmod a+x work.sh”來給其添加執行權限,這樣運行這個作業的時候只需使用命令“./work.sh”即可。

3.2 在會話中運行作業

(1)創建會話

使用命令“screen -S RunWork”來創建一個screen會話,命令執行之後,就會得到一個新的shell窗口,爲了便於標示可以用快捷鍵Ctrl-a A(就是按下Ctrl+a鍵,然後按下shift+a),這樣窗口上光標會提示給窗口重命名。輸入名稱“RunWorkWindow”之後,回車就完成了對該窗口的重命名。這裏的重命名是爲了避免混淆同一會話中的不同窗口,可以用Ctrl-a w快捷鍵來查看當前的窗口名稱,示意圖如下:

(2)運行作業與會話detach以及會話恢復

下面使用命令“./work.sh”運行作業,然後用快捷鍵Ctrl-a d將當前會話detach。這樣,即使網絡斷掉或者關掉ssh的客戶端,作業仍然會在服務器上運行,而且可以通過“screen -ls”命令來查看當前有哪些會話以及它們各自的狀態。如果想要恢復一個已經detach的會話,只需用“screen -r SessionID”即可(SessionID就是screen -ls命令結果中的每個session前面的數字)。會話被恢復之後,可以看到該會話在命令行的輸入結果和輸出信息。


到這裏,基本上這個例子就結束了。如果要同時運行多個耗時作業,直接多啓動幾個screen會話就行。

4、總結

有了screen,我們就可以很方便地將作業運行起來,然後自己該幹嘛幹嘛去。這是我說它能夠提升工作中幸福指數的主要原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章