與 tmux 工具較爲相似,sreen 命令一樣提供在惟一個的命令行終端上進行多窗口切換和管理的基本功能( 關於 tmux 基本操做可參見筆者的博文 終端複用工具 tmux 基本操做教程 )。html
screen 命令以會話( session )爲基礎爲用戶提供終端複用功能,會話能夠被認爲是後臺運行的程序,其中能夠進行命令執行、新窗口建立等操做,不一樣的會話能夠包含有不一樣的運行內容。當終端綁定到特定會話上時,則該終端會顯示該會話的信息,包括會話中包含的窗口、執行的命令、輸出等。當終端從當前會話解除綁定時,當前終端再也不顯示會話的內容,但會話仍然獨立的運行在後臺,只有當會話中再也不有正在運行的程序時(包括窗口運行的 shell 程序),該會話自動被結束。python
screen 的安裝方式與以前介紹的 tmux 大體相同,用戶可經過 apt 命令直接在我的計算設備上進行安裝。與 tmux 不一樣的是,通常的 Ubuntu 服務器操做系統會自帶 screen 程序,故而用戶使用服務器時,可直接經過 screen 命令進行終端複用和管理。linux
apt-get install screen //經過 apt 安裝 screen 命令
想要使用 screen 命令的功能,既能夠在 shell 中直接輸入 screen + 操做 格式的命令執行操做,又能夠經過 screen 提供的 <prefix> + 功能鍵 的方式進行操做。其中前者可在任何可執行命令行操做的終端中運行,後者只有綁定了 screen 的會話後的終端才能使用。shell
screen operation // operation 指定執行動做,可在任意終端中運行 <prefix> 功能鍵 // 指定特定 screen 功能,僅可在綁定了 screen 會話的終端中使用
在 screen 建立的窗口中,默認用戶的按鍵操做直接做爲終端的按鍵輸入,只有當用戶輸入特定的命令前綴( prefix )時,後續的按鍵輸入纔會根據 screen 命令與按鍵的綁定狀況被解釋爲特定的 screen 操做,這一點與 tmux 命令的 <prefix> + 功能鍵 的控制方式相相似。 screen 默認的命令前綴爲 Ctrl + a ,在輸入命令前綴以後,用戶鍵入 screen 命令所支持的功能按鍵,便可執行指定的 screen 操做。vim
會話管理
服務器
當用戶在某一終端運行 sreen 命令時,當前終端即進入某個 screen 建立的會話,新建的會話默認擁有一個運行 shell 的窗口,用戶可在該窗口中進行所需操做,並經過 screen 命令進行會話中新窗口的建立、對某個窗口進行面板劃分等操做。用戶可經過 screen 命令脫離( detach )某個會話,則該會話會在後臺運行而再也不顯示到終端上,當前終端也可經過 screen 命令綁定( attach )到某個會話上,從而顯示目標會話中的窗口內容,以供用戶操做。當會話中全部的窗口均退出時,則 screen 會話自動結束session
用戶可經過 screen -S 會話名 建立一個新的會話。在終端中運行上述命令後,當前終端即綁定( attach )新建立的會話,新建會話默認建立一個運行 shell 的窗口,用戶便可在其中進行操做。ssh
screen -S session_name //建立名爲 session_name 的會話,不指定 session_name 時則建立匿名會話
可經過 screen -d session_name 使得當前終端脫離( 再也不顯示 )指定會話,被脫離的會話仍在後臺運行,可經過 screen 命令從新綁定.工具
screen -d session_name //脫離( detach ) 指定的會話,不指定 session_name ,則脫離當前會話
可經過 screen -ls 命令顯示全部存在的會話。spa
screen -ls //顯示當前存在的全部會話
可經過 screen -r session 使得當前終端從新進入某個會話,用戶既可使用每一個會話擁有的獨立編號指定會話,也能夠經過建立會話時的會話名來指定會話。
screen -r session // 使得當前終端從新進入( attach )並顯示 session 指定的會話
用戶也能夠直接經過 screen command 的方式建立一個單窗口會話,command 直接指定新建會話中要運行的命令( 再也不默認運行 shell ),命令執行完畢則會話自動退出。
screen python main.py // 建立一個運行 main.py 程序的會話,程序運行完成後會話直接退出
對於一個 screen 會話而言,當其中運行的最後一個程序退出時( 如惟一的窗口中的 shell 程序退出 ),會話即自動結束。當會話非天然的沒法使用時,經過 screen -ls 查看時,該會話後面會帶有"dead"後綴,用戶可經過 screen -wipe 直接上述刪除這些會話。
screen -wipe //刪除非正常( dead )狀態的會話
實例:
1.在服務器登錄的 ssh 終端中新建立一個名爲 test 的會話,此時終端會綁定到新建立的終端中並顯示其窗口;
2.在該窗口中輸入 screen -d 則取消當前終端與會話的綁定,此時又回到以前的登陸終端上,終端會顯示 detach 信息;
3.經過 screen -ls 命令顯示全部存在的會話信息,這裏能夠看到筆者經過 screen 命令建立的會話的 id 和名字;
4.用戶可經過指定會話 id 或會話名的方式經過 screen -r 命令將當前終端從新綁定到指定會話中,終端會從新顯示綁定終端的窗口內容;
窗口管理
在綁定了 screen 會話的窗口中,能夠進行 screen 窗口的管理。通常而言經常使用的窗口管理方式有兩種,一種直接經過命令行輸入 screen 命令,另外一種則是經過 screen 會話所支持的 <prefix> + 操做 的方式。在實際使用過程當中,因爲 screen 會話提供的窗口通常會用於執行用戶所需的命令,故而命令行輸入命令的方式並不老是可用的,筆者更常使用適用範圍更廣的 <prefix> + 操做 的方式進行窗口管理。下列命令即記錄輸入 <prefix> ( screen 的命令前綴爲 Ctrl + a )後各個特定輸入與命令之間的對應關係,再也不記錄命令前綴。注意,下列窗口管理的功能也可經過命令行輸入命令的方式實現,具體可參見 screen 命令的 man 幫助文檔。
窗口建立和切換
c //建立一個帶有 shell 的新窗口並切換至新窗口 k //關閉當前窗口(以及其中運行的程序) d //退出當前會話 i //顯示當前窗口的信息 w //顯示全部窗口的序號 " //顯示全部窗口,以供選擇切換 num //num 爲 0-9 之間的數字,切換至 num 對應的窗口 space / n //切換到下一窗口( next ) backspace / p //切換到上一窗口( previous )
上述操做中,注意經過 <prefix> + d 的快捷操做直接退出退出當前會話,其效果與 screen -d 一致。
窗口劃分及其管理
一個完整的終端窗口能夠被進一步的劃分爲若干個小部分,每一個部分都可獨立運行程序。
S //將當前終端水平劃分 | //將當前終端垂直劃分 tab //終端中劃分的不一樣區域進行順序切換 Q //刪除除當前所在區域外的全部的區域 X //刪除當前區域
輔助功能
H //開始/結束對當前窗口輸出的記錄,記錄保存在名爲 "screenlog.n" 的文件中 C //清空當前屏幕(終端) l //刷新當前窗口 ? //顯示按鍵與功能的綁定 [ //進入複製模式,其大體操做與 vim 相似,詳見官方文檔及文後參考資料 [ //將複製模式中複製的內容粘貼
參考: