iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
1
自我挑戰組

資訊技術解戈迪安繩結系列 第 9

IT|作業系統|Linux|使用 screen 指令操控 unix/linux 終端機

通常一個終端機(terminal 或 console)只能開啓一個互動式(interactive)的 shell 來使用,而藉著 screen 的幫助,使用者可以在一個終端機下,同時開啓多個互動式的 shell,除了自己使用之外,還可以讓 session 分享給不同的使用者,或是讓執行中的 session 暫時卸離(detach),隨後再重新連接(attach)即可繼續操作。

screen 指令是一般 UNIX/Linux 使用者或管理者常會使用的終端機管理程式,可以讓一個終端機當成好幾個來使用。

[安裝 screen]

安裝:適合的作業系統(Debian/Ubuntu)
sudo apt-get install screen

安裝:適合的作業系統(Red Hat/Fedora)
yum install screen

[開始使用]

執行指令,這時候會出現一些訊息,按下空白鍵跳過之後,就可以看到一個新的 shell。進入 screen 所建立的新 shell 之後,看起來跟原本的畫面一模一樣,但是它其實是一個新開啟的 shell,而在離開 screen 環境之後,就會回到原本的 shell 中。
screen

離開終端機 session
exit

screen 控制指令可以使用 Ctrl + ? 來查詢線上的操作說明。
Ctrl + ?

[將 screen 卸離(Detach)與重新連接(Re-attach)]

使用 screen 最大的好處之一就是可以將其卸離,而在重新連接之後完全不會影響正在執行中的任何工作。

以 ping指令來示範如何將執行中的工作卸離,然後再重新連接。一開始先執行
screen

使用 ping 來示範的原因是因為它在執行之後就會不斷的送出 ICMP 封包,直到使用者按下 Ctrl + c 為止,所以它可以一直執行下去不會中斷,方便我們測試 screen 的卸離功能。
https://ithelp.ithome.com.tw/upload/images/20171217/20107621CaQO34lPql.png
接著使用者就可以按下 Ctrl + a 後,再按下 d 鍵(detach),這時候整個 screen 就會被卸離
https://ithelp.ithome.com.tw/upload/images/20171217/20107621yuXadM29RM.png

若要重新連接上 ping 這個 screen,可以執行,這樣就會回到之前的 screen 環境中,這時候你也可以看到 ping 指令還在執行,並沒有受到影響。
screen -r

[同時使用多個 screen 工作環境]

如果只有一個 screen 工作環境不夠用,也可以將現有的 screen 工作環境卸離後,在原來的 shell 中再執行一次 screen 指令,建立另外一個新的 screen 環境來使用

Ctrl + a 後,再按下 d 鍵(detach)
screen

如果在同一時間有好多個 screen 工作環境都處於卸離狀態,則在重新連接時可以使用
screen -ls

初初結果

pi@MyPi2:~ $ screen -ls
There are screens on:
        1394.pts-0.MyPi2        (廿十七年十一月三日 十一時廿八分二秒)   (Attached)
        1383.pts-0.MyPi2        (廿十七年十一月三日 十一時廿六分十三秒) (Detached)

2 Sockets in /var/run/screen/S-pi.

若要連接第一個 1394.pts-0.MyPi2 這個 screen 工作環境,則在 -r 參數之後加上這個名稱即可:
screen -r 1383.pts-0.MyPi2

若嫌指令太長,可將指令改為
screen -r 1383

[使用多個 screen 視窗]

若要同時使用多個互動式 shell,最方便的方式是在一個 screen 工作環境中建立多個「視窗」,而每一個視窗都可以提供一個獨立的 shell 給使用者進行互動式的操作,這樣的作法會比使用多個 screen 工作環境方便,尤其是在切換不同的 shell 時不用卸離再重新連接。

建立一個新的視窗,並出現一個獨立的互動式 shell
Ctrl + a 後,再按下 c 鍵(create)

在不同的視窗之間切換,可以按下 Ctrl + a 後,再按下 n 鍵(next),這樣就會切換至下一個視窗
切換前一個視窗
Ctrl + a 後,再按下 n 鍵(next)

切換下一個視窗
Ctrl + a 後,再按下 p 鍵(previous)

[紀錄所有動作]

screen 除了提供獨立的工作環境之外,它還可以把使用者所有的動作記錄下來。
按下 Ctrl + a 後 (放開),再按下 H 鍵(請注意這裡是大寫的 H,也就是要按著 Shift 鍵再按 h 鍵)

畫面下方會出現以下資訊:
Creating logfile “screenlog.0“

結束記錄功能
再按一次 Ctrl + a 與 H 鍵即可

[鎖定 screen 螢幕]

如果在使用 screen 管理伺服器時,要暫時離開電腦,也可以使用 screen 的螢幕鎖定功能,當要鎖定螢幕時可按下 Ctrl+ a 後,再按下 x 鍵,這樣螢幕就會被鎖住
https://ithelp.ithome.com.tw/upload/images/20171217/20107621HzvZ7Pg0aF.png

[離開 screen 工作環境]

若要離開 screen 工作環境有幾種不同的方式:

如果工作還沒做完,想要暫時離開,
卸離功能(Ctrl+ a 與 d)

如果是工作都已經做完了,當 screen 工作環境中所有的 shell 都結束後,screen 會自動結束。
exit 指令離開整個 shell 環境

直接關閉整個 screen 工作環境
Ctrl + a 與 k(kill)

[screen 參數與操作指令速查表]

screen 參數表:
screen 參數

說明
-c file
使定使用的設定檔(預設為 $HOME/.screenrc)
-d [pid.tty.host]
強制將指定的 screen 工作環境卸離
-L
開啟自動紀錄功能
-ls 或 -list
列出目前所有執行中的 screen 工作環境
-r [pid.tty.host]
重新連接執行中的 screen 工作環境
-R
重新連接最近卸離的 screen 工作環境
-U
以 UTF-8 模式執行
-wipe [match]
將廢棄的 screen 工作環境清除


screen 操作指令表:
screen 參數
說明
Ctrl + a 與 c
建立新 screen 視窗
Ctrl + a 與 Ctrl+ a
切換至上一個 screen 視窗
Ctrl + a 與數字鍵 0 到 9
切換至指定編號的 screen 視窗
Ctrl + a 與 n
切換至下一個的 screen 視窗
Ctrl + a 與 p
切換至下一個的 screen 視窗
Ctrl + a 與 w
列出目前所有的 screen 視窗
Ctrl + a 與 "
列出目前所有的 screen 視窗,並可用上下鍵選擇要切換的設窗
Ctrl + a 與 k
關閉目前的 screen 視窗
Ctrl + a 與 d
卸離 screen 工作環境
Ctrl + a 與 Esc鍵(或 Ctrl + a 與 [)
進入複製模式(copy mode),可用方向鍵操作捲軸,或用 / 與 ? 來搜尋,按下空白鍵開始選取要複製的內容,選取完成後再按下第二次空白鍵,即可複製,隨後使用 Ctrl + ] 可貼上複製的內容。
Ctrl + a 與 S
將畫面分割成上下兩個區域
Ctrl + a 與 Q
關閉分割畫面
Ctrl + a 與 Tab鍵
切換分割畫面
Ctrl + a 與 t
顯示目前系統的時間與負載狀況
Ctrl + a 與 a
送出 Ctrl + a
Ctrl + a 與 ?
顯示說明
Ctrl + a 與 v
顯示版本資訊
Ctrl + a 與 x
鎖定 screen 螢幕
Ctrl + a 與 H
開啟或結束 screen 紀錄功能
Ctrl + a 與 C
清除 screen 視窗中的內容
Ctrl + a、D 與 D
強力卸離,卸離 screen 工作環境之後,直接登出
Ctrl + a 與 Ctrl+ g
視覺化鈴聲(visual bell)切換
Ctrl + a 與 i
顯示目前 screen 視窗的資訊
Ctrl + a 與 l
重繪目前 screen 視窗的內容

上一篇
IT|作業系統|Mac|Homebrew 安裝套件管理工具
下一篇
IT|作業系統|Linux|CentOS|CentOS 7 安裝於 VirtualBox
系列文
資訊技術解戈迪安繩結29

尚未有邦友留言

立即登入留言