命令行是一種強大的工具,但是它有一個嚴重的缺點:如果 shell 停止了,您的工作也就停止了。要想讓 shell 和您的工作保持活動狀態(甚至是跨多個會話和中斷的連接),可以使用 GNU Screen 作為控制台的窗口系統。
哈利波特有魔杖,雷神托爾有金色的巨錘,Buckethead 有斧子,但是這些武器與 QWERTY 鍵盤相比只是小兒科。只需在命令行上敲幾下,就可以啟動網站、招募軍團或擊敗可怕的火龍。
但是,QWERTY 鍵盤有一個嚴重的缺點:它很容易發生連接中斷。電話線上的噪音、無線連接中斷或者網絡超時都可能導致遠程 shell 中斷。如果您已經在某個工作(比如調試一個應用程序)上花費了好幾小時,而一下子就丟失了所有成果,一定會很沮喪的。
不過這種災難是可以避免的。使用 GNU Screen 就可以了。Screen 可以在一個控制台(即與主機物理連接的啞終端)、xterm
窗口或 Secure Shell (SSH) 登錄 shell 中創建和管理多個 shell 窗口。可以從一個 shell 窗口迅速切換到另一個窗口,可以離開正在運行的 shell 並在任何時候重新連接。實際上,Screen 提供許多虛擬化的控制台。
圖 1 到圖 5 展示 Screen 的特性和操作。看一下 圖 1,這裡假設用戶已經使用 SSH 登錄到一台遠程主機。最初,在本地主機(比如您的筆記本或桌面計算機)上有一個本地 shell 和一個遠程 shell。通常,使用遠程 shell 在遠程主機上運行命令;輸出經過加密之後通過 SSH 連接發送到本地 shell。(在各張圖中,用藍色表示當前可見的 shell 輸出)。但是,如果本地 shell 或遠程 shell 或它們之間的連接中斷了,遠程 shell 就會終止,您的工作成果就會丟失。
圖 2 顯示在遠程主機上啟動 Screen 之後的情況。Screen 實用程序啟動,進而啟動一個新的 shell 窗口 A,可以在此窗口中運行命令。A 的輸出是可見的(由藍色表示);這個 shell 的輸出經過 Screen,再經過遠程登錄 shell,最後通過 SSH 到達本地登錄 shell。
Screen 本身並不 “露面”;它是一個代理,其作用是在它管理的正在運行的可用窗口中做出選擇。在任何時候,Screen 只能顯示一個窗口的輸出。可以把 Screen 看作虛擬的鍵盤-視頻-鼠標 (KVM) 開關。
但是,也可以斷開與 Screen 的連接,見 圖 3。Screen 代理仍然存在,它控制的所有窗口也還存在,但是與 Screen 的連接臨時切斷了,這會讓用戶返回到遠程登錄 shell。
圖 4 顯示一種可能出現的情況。已經重新建立了到 Screen 的連接,還創建了另外兩個窗口(B 和 C)。窗口 A 和 B 繼續運行 shell 和所有附屬作業,但是只有 C 的輸出是可見的。當然,可以在窗口之間切換以監視各個作業的狀態。
最後,圖 5 顯示中斷與 Screen 的連接並終止遠程登錄 shell 的情況。Screen 和它的窗口仍然存在。可以重新登錄並連接 Screen(並通過 Screen 代理連接到它的窗口),繼續您的工作。
如果您常常要訪問遠程服務器以執行維護或開發軟件,那麼 GNU Screen 是必不可少的工具。