如果有的話,那麼screen指令,就是你最需要的武器!
簡單介紹一下screen。顧名思義,screen就是會幫你可以開啟多個視窗,並且可以在視窗間切換;即使切換到不同的視窗,原有視窗的工作也會繼續執行下去。例如:可以開一個視窗寫code、開一個視窗編譯、開一個視窗跑IRC跟同事討論。
那麼如何使用呢?
首先,輸入screen以後就會進入screen的世界
ryan@ubt176:~$ screen
注意,所有 screen 的指令都是以 Ctrl 鍵加上 a 鍵開始的,之後會以 Ctrl+a 代表,Ctrl+a c 代表按住 Ctrl 鍵不放再按 a 鍵,然後放開按 c 鍵;而 Ctrl+a Ctrl+c 代表按住 Ctrl 鍵不放再按 a 鍵,然後放開後再按住 Ctrl 鍵不放按 c 鍵。
視窗操作指令:
Ctrl+a c 或 Ctrl+a Ctrl+c 開啟新的視窗,並同時切換到這個新的視窗 (預設一進入screen後,就已經有一個視窗了,當要進行其他的工作時,才需要再開新的視窗)
Ctrl+a n 或 Ctrl+a Ctrl+n 或 Ctrl+a (space) 切換到下一個視窗(0->1 1->2 ...)
Ctrl+a p 或 Ctrl+a Ctrl+p 切換到上一個視窗(1->0 2->1 ...)
Ctrl+a Ctrl+a 切換到上一個顯示過的視窗
Ctrl+a (0...9) 切換到第 (0...9) 個視窗
Ctrl+a w 或 Ctrl+a Ctrl+w 會列出目前所開啟的視窗
0-$ bash 1*$ bash
有星號 "*" 的表示目前顯示中的視窗,之後的 tcsh 代表這個視窗的 title ,預設是以開啟時的 shell 名稱
Ctrl+a K 關閉目前的視窗
Ctrl+a ' 或 Ctrl+a " 會出現 "Switch to window:" 字樣,輸入號碼後就可切到該視窗
一般操作指令:
Ctrl+a C 清除目前的視窗內容
Ctrl+a d 或 Ctrl+a Ctrl+d 離開目前 screen 的世界,並放到背景執行
Ctrl+a D D 強力脫離,除了放到背景執行外,並自動 logout
Ctrl+a H 紀錄目前視窗所有顯示過的東西(檔名為 screenlog.n n 為視窗號碼)
Ctrl+a t 或 Ctrl+a Ctrl+t 顯示系統的時間及主機名稱還有負載
Ctrl+a v 顯示版本資訊
Ctrl+a x 或 Ctrl+a Ctrl+x 如果你要暫時離開目前位置又不想先 logout ,那可以用這個來鎖住 screen
Ctrl+a ? 線上求助畫面
複製/捲軸模式:
以往沒有進入screen之間,可以直接透過滑鼠 or terminal scrollbar就可以看到之前的訊息。不過,進入Screen以後,就沒有這個方法了。取而代之的是,得進入Copy mode,才能夠看到之前的訊息,甚至是Copy之前的訊息。
只要利用Ctrl+a [ 就可以進入複製/捲軸模式(Copy mode),以下則是相關的操作命令:
Ctrl+a [ 進入Copy mode
h / j / k / l 游標往左/下/上/右移動一格(行)
Ctrl+u / Ctrl+d 往上/下捲半頁
Ctrl+b / Ctrl+f 往上/下捲整頁
0 游標移動到該行最左邊
^ / $ 游標移動到該行最左/右邊非空白字元
w 以字為單位往前移動,並移到字首
b 以字為單位往後移動,並移到字首
e 以字為單位往後移動,並移到字尾
/ 向上搜尋字串
? 向下搜尋字串
Space 第一次輸入和第二次輸入之間的範圍會被複製到暫存區
Esc 離開Copy mode
Ctrl+a ] 將暫存區的內容複製出來
注意的是,Copy mode的Buffer是有限制大小的;如果嫌原本screen的scroll buffer不夠大,無法顯示足夠的資訊的話,那就可以透過Ctrl+a : scrollback <num> 將buffer size設定為<num>一樣大小。
例如:
:scrollback 1024
就可以將buffer設定為1024行。
也可以利用Ctrl+a i,就可以知道目前設定的buffer大小。
(50,1)/(80,24)+1024 +flow UTF-8 1(bash)
如何利用Screen:
前面提到當按了 Ctrl+a d 離開了 screen 的世界後,會回到沒有執行 screen 時的狀態,但此同時,之前 screen 裡每個視窗內在跑的 process (不管是前景或背景執行的)仍然繼續執行,即使 logout 也不會有影響。這讓你可以離開電腦,去休息、或者另外找個地方再接著剛剛的工作。
不過,當你重新登入(login)之後,要怎麼接續剛剛的 screen 呢?重打 screen 只會讓電腦另外又開個 screen ,所以你所要做的就是加些參數:
screen -ls 顯示目前個人所有的 screen
ryan@ubt176:~$ screen -ls There is a screen on: 31560.pts-4.ubt176 (02/19/2014 10:54:54 AM) (Detached) 1 Socket in /var/run/screen/S-ryan.
透過screen -r 可以重返之前screen的世界,不過如果當有兩個以上的screen就不可以這樣打了
ryan@ubt176:~$ screen -ls There are screens on: 31624.pts-4.ubt176 (02/19/2014 11:01:22 AM) (Detached) 31560.pts-4.ubt176 (02/19/2014 10:54:54 AM) (Detached) 2 Sockets in /var/run/screen/S-ryan. ryan@ubt176:~$ screen -r There are several suitable screens on: 31624.pts-4.ubt176 (02/19/2014 11:01:21 AM) (Detached) 31560.pts-4.ubt176 (02/19/2014 10:54:53 AM) (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them.
如它的訊息所說,可以加上screen的 process id 或是使用的 tty 加上主機名來決定要接回那一個 screen 。假設在這裡我們要接回 process id 為 31624 的那一個,就打
ryan@ubt176:~$ screen -r 31624或
ryan@ubt176:~$ screen -r 31624.pts-4.ubt176都可以
假設遇到自己的電腦當機或者是斷線,等到恢復想要resume screen的時候會發現
ryan@ubt176:~$ screen -r There is no screen to be resumed.
這時候就可以利用 -d 這個參數控制讓某個 screen 先離開screen的世界(detach),然後再接著用 -r 把這個 screen 接手回來
ryan@ubt176:~$ screen -d [31624.pts-4.ubt176 detached.] ryan@ubt176:~$ screen -r或直接
ryan@ubt176:~$ screen -d -r
以上就是大致上常用到的指令啦,如果你需要更多詳細的資料,可以善用線上手冊(manual pages)或是 info 這個指令,就可以得到更多的資訊囉。
沒有留言:
張貼留言