[前言]

一般在 linux 上開發,常常會同時用到好幾個 terminal 來工作,當 terminal 的數量一多,就必須頻繁地在不同 terminal 間按 tab 切換,這對開發者來說是種負擔。screen 的好處在於可以利用單一視窗開啟多個 console ,工作列上只會存在一個視窗,變得乾淨許多,你也可以指定這些 console 的名稱,方便你在跳躍時知道自己目前的工作環境。如果同時有數台工作的機器,甚至可以編寫指令檔讓 screen 啟動時就幫你做好登入這些機器的動作。screen 另一個好處在於會幫你記憶目前的工作狀態,如果想下班回家遠端登入回公司工作,只需要一個指令就可以幫你把在公司的工作狀態叫出來,方便你繼續開發。

[安裝]
1. yum 系列: yum install screen
2. apt 系列: apt-get install screen

[使用方式與指令]
在 console 下打 screen 就會進入到 screen 裡。大多數 screen 的指令都是以 Ctrl 鍵加上 a 鍵開始的,後面的文章以 C-a 來表示。以下列出一下在 screen console 裡常用的指令:

開啟、關閉、上鎖指令:
C-a c : 開啟新的視窗,並同時切換到這個新的視窗。
C-a K : 關閉當前的視窗。
C-a d : 脫離(detach)目前的 screen ,並放到背景執行。
C-a x : 鎖住 screen 。
C-a :quit : 這個指令比較特殊,按下 Ctrl+a 後再輸入:quit。作用是關閉所有的視窗並且退出 screen。

視窗切換指令:
C-a n 或 C-a (space) : 切換到下一個視窗。
C-a p : 切換到上一個視窗。
C-a (0...9) : 切換到第 (0...9) 個視窗。
C-a " : 列出當前開啟的視窗列表,可以用光棒指定視窗。
C-a w : 列出目前所開啟的視窗。

視窗資訊指令:
C-a A : 更改當前視窗的名稱
C-a C : 清除目前的視窗內容。
C-a i : 顯示目前視窗的資訊。
C-a l : 重繪視窗,如果有字顯示亂掉了可以用這個指令。
C-a m 或 C-a (enter) : 可以顯示最近一次顯示過的訊息。
C-a H : 開啟當前視窗的 screen log,檔名規則是 screenlog.n (n 代表 console 編號)。再按一次 C-a H 則結束記錄 log。
C-a t : 顯示系統的時間及主機名稱還有負載。
C-a v : 顯示版本資訊。

編輯指令:
C-a [ : 進入 copy mode,在 copy mode 下可以搜索、複製。就跟使用 vi 一樣。
C-a ] : Paste,把剛剛在 copy mode 選定的內容貼上。

視窗切割指令:
C-a S : 將視窗垂直分割,會套用到所有已開啟的視窗。
C-a tab : 在垂直分割的視窗裡上下切換。切換到垂直分割出來的視窗後,就可以用上面的切換指令來做水平切換。
C-a Q : 將水平分割的視窗關掉。

求助指令:
C-a ? : 線上求助畫面。

更多詳細的指令可以 man screen。

[進階技巧]
1. 遠端登入 screen session

每開啟一個 screen 就會產生一個 screen session,在這個 screen session 裡產生的 console 都被視為這個 screen session 的一部分。當利用 C-a d 脫離了 screen 後,會退出當前的 screen session 並將其放到背景運行,這時候我們可以用指令來恢復這個 screen session 的狀態,把上次的工作環境從背景叫回前景。透過這樣的方式,只要 screen session 存在,我們就可以在任何地方遠端登入機器,並且叫回上次的工作狀態。這邊會用到幾個 screen 本身的指令:

screen -ls : 列出目前所有的 screen session。 每個 screen session 會有一個 session id ,後面會顯示 (Attached) 或者 (Detached) 來表示該 session 的狀態。

screen -d [session id] : Detach screen session。如果有多個 session ,可以指定 id 。

screen -r [session id] : 將 screen session 從背景叫回前景。如果有多個 session ,可以指定 id 。


2. 一次開啟多個視窗

透過 screen 的設定檔(位在~/.screenrc),我們可以在建立 screen session 時,同時產生多個 console 並指定其名稱。作法如下

編輯~/.screenrc,加入下列內容:
screen -t name id

name 是 console 的名稱,id 則是這個 console 的編號。如果想要開啟多個 console 只需要重複這串指令即可

如果想在 screen 開啟時同時登入不同的主機的話,則可以改用下列的指令:
screen -t name id ssh username@hostname

當然如果要做到同時登入的話,還必須要搭配 ssh 免密碼登入。上面的指令只會幫你做連線,如果沒做 ssh 免密碼的話,視窗上一樣會要求你輸入密碼唷。

[設定檔]
最後附上我目前使用的設定檔,這個設定檔改過了 screen 的顏色顯示,然後擴充了兩個指令。第一個是可以利用 C-b id 來切換到編號為 10 之後的 console。第二個是利用 C-x 來快速開啟一個遠端連線。有需要的人可以自己拿去修改。對設定檔有興趣的話就請自行查找 screen 的文件囉。

screen -t AP 0
screen -t Helper0 1
screen -t Master0 2
screen -t Portal 3
screen -t home 4

# Look and feel
caption always "%{= 11}%{+b w}Screen: %n | %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"

# Our warning of activity
activity "Activity in %t(%n)"

# Makes "C-b 0" select window 10, "C-b 1" window 11, etc.
bind -c sw 0 select 10
bind -c sw 1 select 11
bind -c sw 2 select 12
bindkey "^B" command -c sw

# Makes "C-x 1" login to remote Installation server, "C-x 1" login to remote AAL server, etc.
bind -c remote 1 screen -t Installation ssh root@x.x.x.x (這裡的 ip 請自行替換。)
bind -c remote 2 screen -t AAL ssh root@x.x.x.x
bind -c remote 3 screen -t Portal ssh root@x.x.x.x
bind -c remote 4 screen -t Master0 ssh root@x.x.x.x
bind -c remote 5 screen -t Master1 ssh root@x.x.x.x
bind -c remote 6 screen -t Helper0 ssh root@x.x.x.x
bind -c remote 7 screen -t Helper1 ssh root@x.x.x.x
bindkey "^X" command -c remote

# Left Right meta key mods
#ALT-,. and ALT-<>
bindkey "^[<" eval number !echo $WINDOW-1|bc
bindkey "^[>" eval number !echo $WINDOW+1|bc
bindkey "^[," prev
bindkey "^[." next

這是使用的結果:
screen
arrow
arrow
    全站熱搜

    Graffine 發表在 痞客邦 留言(0) 人氣()