轉自:https://blog.mythsman.com/2016/01/19/1/
screen命令基本用法詳解
在服務器上搭建一些服務的時候,經常要用到screen命令。這是因爲一般情況下我們只會開一個連接服務器的控制檯,但是某些服務(比如minecraft服務器)開啓的時候需要佔據一整個控制檯,如果關閉了就會導致進程終止。這就成了類似單進程的效果。而screen命令就是爲了能夠在服務器上開啓多個控制面板(screen),用以容納不同的任務。
安裝
ubuntu軟件庫裏就有,直接下載:
|
|
基本概念
話說我看了網上很多的教程,發現他們大多是把命令啊參數啊什麼的列一遍,卻並沒有告訴我他這裏不同窗口的關係,導致被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 界面,比如:
|
|
他會顯示當前的每一個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:
screen -ls 會有如下顯示: 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
可是會直接退出登陸的額。。