screen命令基本用法詳解

轉自:https://blog.mythsman.com/2016/01/19/1/

screen命令基本用法詳解

在服務器上搭建一些服務的時候,經常要用到screen命令。這是因爲一般情況下我們只會開一個連接服務器的控制檯,但是某些服務(比如minecraft服務器)開啓的時候需要佔據一整個控制檯,如果關閉了就會導致進程終止。這就成了類似單進程的效果。而screen命令就是爲了能夠在服務器上開啓多個控制面板(screen),用以容納不同的任務。

安裝

ubuntu軟件庫裏就有,直接下載:

1
$sudo apt-get intstall screen

 

基本概念

話說我看了網上很多的教程,發現他們大多是把命令啊參數啊什麼的列一遍,卻並沒有告訴我他這裏不同窗口的關係,導致被screen耍的雲裏霧裏的。在蛋疼了好久之後,我終於大概曉得了他實質的運作機制(估計是我開始想偏了)。。。

首先我們要明確三個窗口的概念(話說這三個窗口我是摸索了好就才理清楚的~~~汗。。)

默認窗口

所謂默認窗口就是我們沒有用screen命令時的那個乾乾淨淨的窗口,不能使用等會介紹的screen命令下的任何快捷鍵。(這個不是廢話)

screen界面

screen界面就是當我們進入screen空間下的,佔用了一個進程pid的一個界面。這個界面有他自己的名字,有他自己內部交互的快捷鍵,能夠擁有很多不同的子終端的界面。也可以理解成獨立於默認窗口之外的窗口。注意,是每一個screen界面都能擁有很多的子窗口,而我們的電腦能同時擁有很多不同的screen界面。

子窗口

每一個子窗口都是附屬與一個screen界面下的,他們互不影響,能夠分別執行不同的命令,這是整個screen命令的精華所在。工作時,我們需要做的就是選定某一個screen,並且選定一個子窗口。這樣如果我們需要換一個界面的話,我們就只需要更換另一個子窗口就行了。

可能不太清楚,但是隻要曉得有這麼三個層次就好了(不要當成只有兩個層次!!)

基本命令

既然有了三個層次,那麼我們是不是要考慮三種不同的窗口下的命令呢?其實不是,因爲每一個screen都得有至少一個的子窗口,所以我們只要考慮兩個層次下的命令就可以了,一個是面對不同screen界面的切換,另一個是面對同一個screen界面下不同終端之間的切換。

面向screen級別的命令

1、新建一個screen :

可以直接輸入screen 來打開一個帶有默認名字的screen界面,也可以加上 -S 參數來親自制定一個好聽的名字。然後系統就會切進當前的screen了。

2、查看當期存在的screen:

輸入screen -ls 可以查看當前存在的screen 界面,比如:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  1. myths@Business:~$ screen -ls
  2. There are screens on:
  3. 4545.s2 (2016年01月19日 19時40分28秒) (Attached)
  4. 4506.s1 (2016年01月19日 19時40分22秒) (Detached)
  5. 4487.pts-8.Business (2016年01月19日 19時40分15秒) (Attached)
  6. 3 Sockets in /var/run/screen/S-myths.

 

他會顯示當前的每一個screen界面,對於每一個界面,他的顯示格式是:pid.name (time) (status) ,前面的不解釋,最後的那個狀態有(Attached) 和(Detached) ,表示是否已經連接進來(?其實不太懂這個意思,沒有連接進來那就連接進來唄~有啥必要非得分開看呢。。。不過有一個明顯的區別就是,當你斷開主界面然後重新登錄的時候,所有的screen都是顯示Detached的。而如果你想進入某一個screen,你首先得把他的狀態變成Attached纔行)。

3、關閉和選擇screen:

想要關閉一個screen 就要先選擇並且進入這個screen。

首先用screen -ls查看你想要選的screen:

如果他的狀態是Detached的,我們需要輸入screen -r <screen的pid> ,來進入這個screen ;

如果他的狀態是Attached的,我們就要輸入 screen -d <screen的pid> ,來使他”Dettached”,然後再輸入screen -r <screen的pid>,來進入這個screen。(必須先detached,否則是進入去的)。

進入了你想要關閉的screen之後,就可以直接輸入exit,或者Ctrl+d,來終止這個界面了。成功終止後,如果有其他處於Attached狀態的screen界面,他就會跳到那個界面中,如果沒有,他就會跳到默認界面上。

4、清除損壞的screen :

如果由於某些情況導致一個screen的狀態處於Dead(很可能是程序出錯或者強行刪除進程鎖之類的。。),我們無法attached進去,那麼我們只需要輸入screen --wipe ,就可以刪除這些進程了。

5、刪除某一個screen:

  1. screen -ls
  2. 會有如下顯示:
  3. 122128.test (12/04/2017 08:35:43 PM) (Attached)

 刪除它

screen -X -S 122128 quit

再次 screen -ls 查看就沒有遼

 

面向子窗口切換的快捷鍵:

在一個screen下,我們可以方便的創建多個子窗口,這些窗口之間轉換的操作都是通過Ctrl+a再加參數的組合快捷鍵實現的。

1、新建子窗口:

可以通過Ctrl+a+c 組合快捷鍵在當前的screen下創建一個新的子窗口,並跳轉到上面去。

2、查詢當前的子界面狀態:

可以通過Ctrl+a+w組合快捷鍵,在屏幕的左下角就會出現類似:0-$ bash 1*$ bash之類的樣式。這個表示當前screen下有兩個子窗口,當前在的是1號子窗口。當然,這個子窗口的數目可以有很多。

3、切換子窗口:

方法很多,可以通過Ctrl+a+a組合快捷鍵在最近的兩個窗口中切換,也可以用Ctrl+a+n 切換到下一個窗口,或是Ctrl+a+p 切換到上一個窗口,或是Ctrl+a+num 切換到第num個窗口。。。

4、鎖定當前窗口:

可以用Ctrl+a+x 來鎖住當前的界面,此時所有的快捷鍵都無法使用,直到輸入了密碼。。

5、關閉當前窗口:

這個可以直接用Ctrl+d 或者exit 來關閉,當這個窗口是現有screen的最後一個窗口時,就會觸發上面講的關閉當前screen的事件了。

6、暫離當前screen:

這個也是screen命令的精髓,用組合鍵Ctrl+a+d 就能detached當前的screen,回到默認界面。

大概就是這些操作,其實還挺繞人的,有個小注意點,就是我們可以通過Ctrl+a+w 命令來測試下當前窗口是不是處於screen狀態下,如果不是的話,貿然使用Ctrl+a+d 可是會直接退出登陸的額。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章