強大的screen 詳解 - mintrabbitplus
Site icon mintrabbitplus

強大的screen 詳解

screen 是一個可以在單一個終端機裏,建立和開啟多個虛擬終端機的工具。因此,可以使用screen,一邊進行程式修改,一邊編譯程式,且還可以一邊用shell 下指令查詢資料等等。對於,開發者而言,screen 是一套非常強大的工具。以下我們將詳細介紹screen 的指令。
1. 安裝screen

macOS 下,執行以下指令,進行screen 的安裝。

brew install screen

安裝完成之後,使用以下指令查看screen 資訊。

brew info screen
2. 使用screen

開啟終端機,在命令下輸入screen,即可以開始使screen。在使用之前,先解講screen 的指令規則。所有screen 的指令,都是由Ctrl+a 開始的。文章後面,會C+a 代表按住Ctrl 鍵不放再按a

Ctrl+a  C+a

舉例來說,

C+a c

代表按住Ctrl 鍵不放再按a 鍵,然後放開按c 鍵。

C+a C+c

代表按住Ctrl 鍵不放再按a 鍵,然後放開,再按Ctrl 鍵不放再按c 鍵。

3. 詳解screen 指令
1C+a c開啟新的視窗
2C+a C+c開啟新的視窗,並切換到這個新的視窗
3C+a n
C+a C+n
C+a Space
切換到下一個視窗
4C+a p
C+a C+p
切換到上一個視窗
5C+a 0切換到第一個視窗(即第0個視窗)
6C+a 數字切換到第X 個視窗(X0 ~ 9)
Ex: C+a 9
7C+a w
C+a C+w
列出目前所開啟的視窗
列出的格式為:
0- Name 1- Name 2- Name 3- Name …
Name 代表這個視窗的Title,預設是以開啟時的shell 名稱,
變為*,即表示為目前顯示的視窗。
8C+a k關閉視窗並退出screen
9C+a '會出現“Switch to window:”,輸入數字按下Enter,即可以跳到該視窗
10C+a "會出現視窗選單,上下移動,選到要跳的視窗,按下Enter,即可以跳到該視窗
11C+a C清除目前的視窗內容
12C+a d
C+a C+d
Deatch 目前的視窗,並放到背景執行
13C+a H紀錄目前視窗所有顯示過的東西
(檔名為screenlog.nn 為視窗號碼)
14C+a i
C+a C+i
顯示目前視窗的資訊
15C+a l
C+a C+l
重繪視窗,如果視窗有字型亂掉可以使用這個指令
16C+a m
C+a C+m
C+a Enter
顯示最近一次視窗訊息
17C+a v顯示screen 的版本資訊
18C+a ?顯示screen 的說明
19C+a k關閉screen 的視窗。輸入19 指令之後,出現詢問是否要關閉選項,
要再輸入y 確定關閉視窗
20C+a A修改視窗的標題名稱
4. screen 的Copy Mode
1C+a [
C+a Esc
進入screenCopy Mode
其按鍵規則,基本上與vim 一樣
h 向左移動一格
l 向右移動一格
j 向下移動一格
k 向上移動一格
0 移到該行的最左邊
^ 移到該行最左邊的非空白字元
$ 移到該行最右邊的非空白字元
w 以字為單位往前移動並移到字首
b 以字為單位往後移動並移到字首
e 字為單位往前移動並移到字尾
C+b 向上捲一頁
C+f 向下捲一頁
/ 輸入要尋找的字串,按下Enter 開始尋找
按下n找下一個相同字串
? 輸入要尋找的字串,按下Enter 開始尋找
按下n找下一個相同字串
space 第一次按下到第二次按下的區域會被複製到暫存區內
C+a ] 指令存到暫存區內的內容複製出來
Esc 離開Copy Mode
5. screen 的分割畫面
1C+a |將視窗分割成左右兩個畫面
2C+a S將視窗分割成上下兩個畫面
3C+a Tab在有分割域區時,指令可以從🅐 畫面跳到🅑 畫面,
亦可從🅑 畫面跳到🅐 畫面
4C+a Q移除全部視窗分割畫面,回到沒有分割畫面狀態
5C+a X移除一個視窗分割畫面
6. screen 的特殊用法

前面有提到C+a d 指令,可以讓screen 進入Deatch 的狀態。當screenDeatch 狀態時,其每個視窗內的Process 仍然在執行,即使 Logout 也不會有影響。所以你可能接著離開身邊的電腦,然後跑出去喝水,或者另外找個地方坐下來再接著剛剛的工作。

那當你重新Login 之後,要怎麼重回剛剛screen 呢?重新開啟終端機輸入screen,只會再重新開啟一個新的screen 視窗。如果要重新再接回剛剛Deatch 的視窗,只需要輸入以下指令即可:

screen -r

但事情並不是這麼簡單。如果你的開啟的screen 數量只有一個,使用上述指令,即可以接回原本的screen 視窗。那該如何確認現在的screen 數量?只需要輸入以下指令即可:

screen -ls

如下圖所示,可以看到screen 的數量為2

上面的Attached 表示已經連接的screenDetached 表示沒有連接的screen

如果screen 是多個,可以根據其screen id 來重新接回screen。如上圖,可以使用以下指令來重回指定的screen

screen -r 1819

如果出現screen 已經Dead 狀態,如下圖。

可以輸入以下指令移除Deadsrceen 視窗。

screen -wipe

如果已經有多個Deatchscreen,可以輸入以下指令,一次便將全部的Deatchscreen 關閉。

screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
7. screen 的.screenrc 設定檔

每個使用者都能夠建立自已的.screenrc 檔案,.screenrcscreen 的進階設定檔案。輸入以下指令,編輯.screenrc

vim ~/.screenrc

以下為目前常用的.screenrc 設定檔。

#關閉開啟訊息
startup_message off

#強制終端機為utf8
defutf8 on

#設定screen 可以往上捲的行數
defscrollback 1000000

#離開視窗時,自動refersh 螢幕
altscreen on

#MAC下,Alt+向左鍵切到上一個視窗
bindkey ^[^[[D prev #Mac iterm2
#MAC下,Alt+向右鍵切到下一個視窗
bindkey ^[^[[C next #Mac iterm2

#在視窗底下新增一個狀態列
Set hardstatus always on
defencoding utf8
#狀態列格式
#caption always "%{.KW} %-w%{.mW}[%n] %t%{.KW}%+w"
hardstatus alwayslastline " %-Lw%{= Bw}[%n] %t%{-}%+Lw %=| %Y/%m/%d%{= .m} %0c:%s " 

#動態顯示視窗的標題名稱
shelltitle '$ |bash'

可以將以上內容貼到自己的.screenrc 上或到這裡下載檔案。

Exit mobile version