2016年1月27日 星期三

用screen操控終端機

使用終端機連線到server工作的時候,常常會需要同時開啟多個視窗來工作,最簡單的方法就是開很多個視窗,不過如果同時連到很多台servers工作時,就會開了一堆視窗,然後有很多時間都浪費在找到工作時的那個視窗。screen是這個問題的一種解法

screen可以只開一個視窗,運用一些組合鍵在不同的視窗間切換

通常我會用一台終端機連一台server,用screen產生許多視窗,之後在內部切換

由於screen會用到許多組合鍵,在此定義組合鍵的表達方式:
  • Ctrl-t + c: 同時按住Ctrl與t,放開後再按c
  • Ctrl-t + "同時按住Ctrl與t,放開後再按"
  • Ctrl-t + " + 1: 同時按住Ctrl與t,放開後再按",然後再按1
基本的概念就是-代表同時按,+代表按住放開後再按後面那個按鈕。請注意後面的文章會把預設的 Ctrl-a 改成 Ctrl-t因為screen切換視窗會用到 Ctrl-a,但是 Ctrl-a 通常是指令列中用來跳到最前面的快速鍵,因此把切換的組合鍵改成 Ctrl-t 會比較方便

啟動screen

$ screen -e^Ta
一般來說只要輸入screen就可以執行了,但這邊把預設的 Ctrl-a 改成 Ctrl-t

檢查是不是在screen裡面
$ echo $STY
10100.pts-1.hostname

如果有類似上面這種輸出,代表就是在screen裡面,反之代表沒有在screen裡面
10100代表的是這個screen的編號,可以在一台機器上面跑很多個screen
  • screen相關指令使用:Ctrl-t + ?

卸離(detach) screen,重新連接(reattach) screen

這是screen最強大的部分,意思就是可以在screen裡面某個視窗跑程式,然後卸離screen。這個時候即使登出server,在跑的程式還是繼續在跑,重新登入之後只要再重新連接screen,就可以去檢查跑的程式,不再需要用到nohup
  • 卸離screenCtrl-t + d

檢查有哪些screen在跑
$ screen -ls
There are screens on:
        10208.pts-1.hostname       (01/29/2016 11:56:01 AM)        (Detached)
        10100.pts-1.hostname       (01/29/2016 11:29:54 AM)        (Attached)
2 Sockets in /var/run/screen/S-username.
這邊可以看到有兩個screen在機器上面跑

重新連接screen
$ screen -r 

重新連接編號是10100的screen
$ screen -r 10100
$ echo $STY
10100.pts-1.hostname
經過測試上面這個指令只有在window 0才會出現數字

產生新的視窗,在視窗之間切換

  • 產生新的視窗Ctrl-t + c
  • 列出目前有的視窗Ctrl-t + "   用上下鍵去選取自己想要的視窗
  • 目前視窗的編號:Ctrl-t + N
  • 跳到前一個視窗:Ctrl-t + n
  • 跳到後一個視窗:Ctrl-t + p
  • 直接跳到第7個視窗Ctrl-t + 7   這個方法可以跳到第1~9的視窗
  • 直接跳到第11個視窗Ctrl-t + ' + 11   這個方法可以跳到10以後的視窗
  • 兩個視窗之間來回切換Ctrl-t + t
  • 關掉一個視窗:exit

關閉screen

在視窗裡面輸入 exit,當所有的視窗都關掉後就會關掉screen
把編號是10100的screen直接殺掉,參考這篇文章
$ screen -X -S 10100 quit

網路上C. T. Wang寫的"使用 Screen 指令操控 UNIX/Linux 終端機的教學與範例"裡有更多關於screen詳細操作方式

_EOF_

沒有留言:

張貼留言