screen的全名叫做(full-screen window manager),是在Linux or BSD上一個很好用的工具,可以讓你在一個terminal下開啟多重視窗執行,讓你只要靠一個putty/pietty視窗就可以同步地處理很多的事情,視窗彼此的切換又很方便迅速,有點像瀏覽器的「分頁」功能一樣。
例如說你可以開一個視窗正在compile程式,另開一個視窗開vim看code,再開第三個視窗連ftp抓一個大檔,最後再開一個視窗用偷偷telnet連BBS逛PTT這樣(最後一個上班不要亂用,雖然screen也是超級好用的BBS「掛站」利器),視窗間可以隨時用熱鍵切換,彼此卻又運作順暢互不干擾。
我覺得screen對我來說最無可取代的強大好處有三點:
- 提供多視窗工作
- 提供離線繼續工作
- 提供終端機編碼轉換
screen的下載及安裝:
這部份省略,Linux版本眾多族繁不及備載,官方網站在這裡,請查明自己的OS後自行去ftp安裝相對應的版本,安裝指令不外乎打rpm或者tar解壓縮後make、make install之類的那幾招。(如果不會這些,你大概也不可能是會用Linux的人,更不需要這工具了...)
screen操作簡易教學:
進入與脫離screen的指令是:
- screen //第一次執行screen
- Ctrl a+d //關閉screen(至背景),也就是detached
- screen -rd //重新回到(resume)剛剛的screen 裡
- exit //關閉視窗(若只剩一個視窗則為關閉screen)
- C-a c 或 C-a C-c #開啟新的視窗,並同時切換到這個新的視窗
- C-a n 或 C-a C-n 或 C-a (space) #切換到下一個視窗(0->1 1->2 ...)
- C-a p 或 C-a C-p #切換到上一個視窗(1->0 2->1 ...)
- C-a C #清除目前的視窗內容
- C-a d 或 C-a C-d #脫離(detach)目前的 screen ,並放到背景執行
- C-a ? 或 C-a C-? #熱鍵查詢
其實只要知道上面這些,實際再按個兩三下感覺一下,馬上就上手,可以使用愉快了。當然還有很多很多熱鍵,不過光上面的那些我都覺得很難按了,什麼Ctrl+a放掉再按這麼彆扭的按法,又不是在格鬥遊戲輸入豪華連續技。好在他有提供bindkey的功能,也就是可以自定義熱鍵,這需要動到screen的設定檔,也就是你的安裝目錄下的.screenrc那個檔案,如果你要讓你的screen使用上更加順手和個人化,請接著看下去......
screenrc設定檔教學:(進階設定)
請vim .screenrc修改裡頭的檔案,以下是我的配置,大家可以參考一下:
.screenrc
# Start message
startup_message off
# Set hardstatus always on
hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %M %d %0c:%s "
# Set default encoding using utf8
defutf8 on
# Refresh the display when exiting programs
altscreen on
# Dynamic title
shelltitle '$ |bash'
# Disable vbell
vbell off
# Keboard binding
# bind F11 to move to previous window
bindkey -k F1 prev
# bind F12 to move to next window
bindkey -k F2 next
# bind Alt`~= to screen0~12
bindkey "^[`" select 0
bindkey "^[1" select 1
bindkey "^[2" select 2
bindkey "^[3" select 3
bindkey "^[4" select 4
bindkey "^[5" select 5
bindkey "^[6" select 6
bindkey "^[7" select 7
bindkey "^[8" select 8
bindkey "^[9" select 9
bindkey "^[0" select 10
bindkey "^[-" select 11
bindkey "^[=" select 12
# bind F7 to detach screen session (to background)
bindkey -k k7 detach
# bind F8 to kill current screen window
bindkey -k k8 kill
# bind F9 to create a new screen
bindkey -k k9 screen
# bind F10 to rename current screen window
bindkey -k k; title
由上而下簡介: (#的都是註解請忽略)
第一個是把惱人的screen開啟訊息關掉
第二個是在視窗底下新增一個很好用的狀態列(這很方便!一定要加這行!) (註1)
第三個是強制終端機編碼為utf8 (這樣就能正常看中文字囉!) (註2)
第四個是離開視窗時自動refresh一下螢幕
第五個是支援動態顯示視窗的「標題名稱」(註3)
第六個是把熱鍵操作錯誤時的逼逼聲給關掉
接下來重點來了,就是Keboard bindkey,也就是自行定義熱鍵,以上那些是我個人喜歡的配置方式,我將熱鍵定義如下:
- F7 關閉screen(至背景) (相當於C-a d )
- F8 kill目前screen視窗
- F9 開一個新的screen視窗 (相當於C-a c)
- F10 將目前screen視窗「標題名稱」重新命名
- F11 往前切換視窗 (相當於C-a p)
- F12 往後切換視窗 (相當於C-a n)
- Alt+` 切換至screen 0
- Alt+1 切換至screen 1
- Alt+2 切換至screen 2
...…(依此類推) - Alt+= 切換至screen 12
當然這是我喜歡的配置方式,你看懂後也可以自行變化對應按鈕,總之自己按的順手就好!
最後我再分享一個screen應用的最終密技,那就是——「分割視窗」!熱鍵是「Ctrl + a S 」(大寫的 S唷,也就是Split的意思),螢幕就會切成兩半了,此時再按「Ctrl + a tab」就可以切換focus的視窗,接著再「Ctrl + a c」 建立新視窗,或著以號碼跳選其它視窗。(恕沒有圖解教學,請自行操作領會)分割視窗有啥好處呢?相信常在trace code的人都能感受,有時常看某個.c檔就想開著他refer 到 header include 的檔案去查找macro定義或struct宣告之類的,或者是兩個檔案做diff比對,此時若能分割視窗就方便多啦!(雖說VIM也支援分割視窗啦!)
註1:那行狀態列等於是瀏覽器上的分頁列那樣,強烈建議常駐,可以很清楚的知道你身處於哪個screen,至於那些""內百分比的東西是自定義的風格(如標題格式、顏色...等等)我的設定是走藍色低調風,還在右下角加了日期和時間,網路上有各式各樣的風格分享。例如:
第一種
caption always "%{= wk} %{= KY} [%n]%t @ %H %{-} %= %{= KR} %l %{-} | %{= KG} %Y-%m-%d %{-} "
hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %0c:%s "
第二種
caption always "%{=u .G} %-w%<%{=ub .y}%n %t%{=u .G}%+w "
hardstatus alwaysignore
hardstatus alwayslastline "%{= .K} [%l]%<%=%{= .W}@%H %=%{= .y} %Y/%m/%d%{= .m} %0c:%s "
第三種
caption always "%{=u .G} %-w%<%{=ub .y}%n %t%{=u .G}%+w "
hardstatus alwaysignore
hardstatus alwayslastline "%{= .K} [%l]%<%=%{= .W}@%H %=%{= .y} %Y/%m/%d%{= .m} %C %A"
第四種
caption always "%{=u .G} %-w%<%{=ub .y}%n %t%{=u .G}%+w "
#hardstatus alwayslastline "%{= wk} %{by} %H %{wk} | %-Lw%{kw}◣%{= g}%n%f* %t%{wk}◤%{wk}%+Lw%< %= %{kw}◣%{= R} [%m/%d %c] %{-}"
顏色那些參數可以看這篇教學(或者man screen),請自行更換調整囉!
註2:這個也就是上述提到的第3個好處,你也可以default設成big5,端看你的終端機是什麼格式的,或者你也可以big5 的 terminal裡看utf8,或在utf8的terminal裡看big5,(好像在念rap...),可以設個熱鍵如下:
terminal使用big5的:
# C-a b --(switch to)--> view big5 data
bind b encoding big5 big5
# C-a u --(switch to)--> view utf8 data
bind u encoding utf8 big5
terminal使用utf8的:
# C-a b --(switch to)--> view big5 data
bind b encoding big5 utf8
# C-a u --(switch to)--> view utf8 data
bind u encoding utf8 utf8
註3:關於動態支援標題名稱的設定(例如開VIM編輯wtf.c檔案,標題就自動換成wtf.c),這是進階中的進階用法,小弟我也還在參透中,有興趣的可以看這一篇教學文和這一篇教學文,在此就不敢掠美了。
延伸閱讀:
沒有延伸啦!這篇已經盡我所能講完screen的用法囉,很多高手都有分享自己的screenrc設定方法,大家可以自行google,其餘的東西,請自行問「男人」,也就是man screen去發掘囉!
2010/06更新:我又寫了一篇 [Linux] screen進階用法 囉!有興趣的看官請一起打包帶走,謝謝!
真的很棒 用了幾年的screen 其實對profile還沒這麼熟哩
回覆刪除哈哈,謝謝你的留言鼓勵,小弟我最近又悟出了一些screen操作的心得,有空會再PO一篇,歡迎常來逛逛阿~
回覆刪除我上了原廠REDHAT RHCA 認證課程才接觸到screen
回覆刪除還是搞不太清楚
screen -t CONSOLE 0 <----一下這指令視窗就凍結了