15 個用於處理終端會話的 Linux 屏幕命令

screen 或 GNU screen 是一個終端多路復用器。 使用它,您可以運行任意數量的基於控制台的應用程序、交互式命令外殼、基於課程的應用程序等。您可以在不小心後使用 screen 繼續運行程序 close 終端,或者甚至在您註銷然後在任何地方恢復之後。

一個實用的 example 是您在具有 ssh 會話的遠程 Linux 機器上運行任務的地方。 很多次您都看到此 ssh 會話被終止並且無法再工作。 屏幕實用程序來幫助恢復會話。

屏幕如何工作?

調用 screen 時,它會創建一個帶有外殼程序的窗口(或指定的命令),然後讓您避開,以便您可以像往常一樣使用該程序。 然後,您可以隨時創建包含其他程序(包括更多 shell)的新(全屏)窗口、殺死當前窗口、查看活動窗口列表、在窗口之間複製文本、在窗口之間切換等.

Screen 管理由一個或多個窗口組成的會話,每個窗口包含一個外殼程序或其他程序。 此外, screen 可以將終端顯示分為多個區域,每個區域顯示一個窗口的內容。 所有的窗口都完全獨立地運行它們的程序。 當它們的窗口當前不可見時,即使整個屏幕會話與用戶的終端分離,程序也會繼續運行。 這對於防止非自願 ssh 超時會話很實用。

現在讓我們來看看如何在 Linux 中使用這個實用程序。

1) 調用新窗口

如果您的系統上還沒有 screen 命令,您可以使用以下命令安裝它。

在 Debian 上

# apt-get install screen

在 Centos 上

# yum install screen

您只需在命令提示符下鍵入 screen 即可啟動 screen。 此屏幕命令將在屏幕內啟動一個新窗口。

# screen

您可以在屏幕內啟動一個新窗口,並為該窗口命名,例如 example 高處。 它創建一個由該名稱標識的會話。 該名稱可用於在稍後階段重新附加。

# screen -S aloft

請注意,您可以像在普通 CLI 環境中一樣完成所有工作。

2) 列出所有屏幕進程

由於我們能夠在屏幕內啟動新窗口,因此可以顯示當前打開的屏幕,包括在後台運行的屏幕。 它將列出所有現有的屏幕會話。

# screen -ls
There is a screen on:
 10437.aloft (Attached)
1 Socket in /var/run/screen/S-root.

3) 屏幕主命令

可以通過使用一些命令來操作屏幕。 我們將在下面列出更有用的主要命令。

  • Ctrl-a 其次是 c: 創建一個新窗口
  • Ctrl-a 其次是 w: 顯示當前打開的所有窗口的列表
  • Ctrl-a 其次是 A: 重命名當前窗口。 當您列出打開的窗口列表時,名稱將出現 Ctrl-a 其次是 w.
  • Ctrl-a 其次是 n: 轉到下一個窗口
  • Ctrl-a 其次是 p: 轉到上一個窗口
  • Ctrl-a 後跟 Ctrl-a:返回上次使用的窗口。
  • Ctrl-a 後跟一個從 0 到 X 的數字:轉到窗口 n° X。
  • Ctrl-a 其次是 ": 選擇要進入的窗口。
  • Ctrl-a 其次是 k: close 當前窗口(殺死)
  • Ctrl-a 其次是 S: 水平分割當前窗口。 要在窗口之間切換,請執行 Ctrl-a 其次是 Tab.
  • Ctrl-a 其次是 |: 垂直分割當前窗口
  • Ctrl-a 其次是 d: 在不停止的情況下分離屏幕會話
  • Ctrl-a 其次是 r: 重新附加一個分離的屏幕會話
  • Ctrl-a 其次是 [: start the copy mode
  • Ctrl-a followed by ]: 粘貼複製的文本

4) 顯示屏幕參數

您可以列出所有屏幕參數以獲取幫助。 為此,請鍵入 Ctrl-a 後跟字符 ?. 它將顯示所有命令的列表。

5) 分離會話

screen 命令的最大優點是可以分離 screen 會話。 您可以在辦公室的一台計算機上啟動屏幕會話,將會話與本地終端分離,回家,遠程登錄我們的辦公室計算機並將屏幕會話重新連接到我們家用計算機的終端。 在此期間,您辦公室計算機上的所有作業都繼續執行。 此功能用於防止在斷開 ssh 連接期間突然發生的數據丟失。

為了更好地理解我們在說什麼,讓我們採取一個 example. 我們啟動一個安裝過程。

現在我們將分離屏幕 Ctrl-a 其次是 d. 我們可以使用下面的命令進行檢查。

# screen -ls
There is a screen on:
 12449.win (Detached)
1 Socket in /var/run/screen/S-root.

可以分離屏幕 screen -d 命令後跟屏幕 ID 或其名稱。 這意味著如果當前控制台有正在進行的進程,您將需要打開另一個窗口或控制台來分離會話。 您首先需要列出當前附加的屏幕。

# screen -ls
There is a screen on:
 13686.win200 (Attached)
1 Socket in /var/run/screen/S-root.

現在在一個新終端上,輸入以下命令。

# screen -d 13686

或者你可以使用這個名字

# screen -d win200

您將有如下輸出,表明屏幕已分離。

[remote detached from 13686.win200]

6) 重新連接會話

分離屏幕後,可以使用命令重新附加它。 通常您的屏幕會話仍在工作,因此您的所有進程都不會停止。 在重新附加會話之前,您需要按上述列出會話,然後選擇要重新附加的會話。

# screen -r 13686

或者你可以使用

# screen -r win200

您可以看到在重新附加會話後,窗口顯示已完成的進程結束。 這意味著您可以在 ssh 上工作並分離一個會話,您將在家裡重新連接該會話以繼續您的工作過程而不會丟失任何東西。

7)創建一個新的交互式shell

如果您有一些工作要做並且不想丟失您的工作,則可以創建一個新的交互式 shell。 您可以輕鬆地在一個終端窗口中打開一些交互式 shell(編號從 0 到 X)。 當您開始一個新會話時,您將處於 shell 0 中。

為此,您需要使用以下命令在現有窗口中創建新窗口 Ctrl-a 其次是 c. 你會有類似下面的東西。

您可以在屏幕截圖頂部看到屏幕 3,這表明我們在第三個屏幕上。 在底部我們還可以看到 3

8) 在屏幕窗口之間切換

當您打開了多個屏幕窗口時,要在每個窗口之間切換,請按 Control-a 其次是 space 或外殼的數量。 為了 example, 要切換到外殼編號 1,請按 Control-a 然後 1. 為了 example,我們將在第一個屏幕上移動。

屏幕截圖的頂部和底部顯示我們在第一個屏幕上。

9) 拆分窗口

要獲得工作的全局視圖,您可能需要拆分窗口而不是多個窗口。 Ctrl-a 其次是 S 或者 | 水平或垂直拆分屏幕。 可以無限制地重複操作。 要移動另一個窗口,請使用 Ctrl-a 其次是 Tab.

當光標位於底部窗口時,您可以創建一個新窗口(Ctrl-a 其次是 c) 或調用現有窗口 (Ctrl-a 後跟一個數字)。

到 close 一個分裂的窗口,使用 Ctrl-a 其次是 X (注意是大寫字符)。

10) 重新連接到斷開連接的 ssh 會話

首次登錄時,

  • 運行 screen 以啟動 screen 會話。 你得到另一個 shell,在裡面運行命令。
# screen -S remote_session
  • 完成後,分離屏幕會話,然後註銷到 ssh
[detached from 20995.remote_session]
  • 您可以先列出所有屏幕會話
# screen -ls
There are screens on:
 20995.remote_session (Detached)
 14331.daby (Attached)
 14134.mom (Detached)
3 Sockets in /var/run/screen/S-root.
  • 重新連接到您的屏幕會話並繼續您的工作
# screen -d -r remote_ression

screen 命令最常用於 ssh 會話,因為它有助於在斷開連接後繼續工作而不會丟失當前正在進行的進程。

11) 在屏幕窗口中向上滾動

由於 screen 接管管理您的遠程程序,因此您無法在運行 screen 時使用終端模擬器的滾動功能。 您必須使用 Screen 命令來訪問回滾緩衝區。

  • 利用 Ctrl-a 其次是 escape
  • 按下 UpDown 箭頭鍵或 PgUpPgDn 鍵滾動瀏覽先前的輸出。

您可以在屏幕截圖上看到我的光標在哪裡。 每個虛擬終端都有自己的回滾緩衝區。

12) 查看每個屏幕會話的所有者

screen -ls 或者 screen -list 命令只顯示您自己的屏幕會話,即使是 root。 據我所知,這與屏幕本身一樣好。

如果您想查看哪些用戶在每個用戶目錄中查看哪些屏幕會話已啟動 /var/run/screen/.

# ls -lR /var/run/screen
/var/run/screen:
total 0
drwx------ 2 patrick patrick 60 Jun 17 20:47 S-patrick
drwx------ 2 root root 100 Jun 17 19:39 S-root

/var/run/screen/S-patrick:
total 0
srwx------ 1 patrick patrick 0 Jun 17 20:47 21941.pat_session

/var/run/screen/S-root:
total 0
srw------- 1 root root 0 Jun 9 16:45 14134.mom
srwx------ 1 root root 0 Jun 9 01:07 14331.daby
srwx------ 1 root root 0 Jun 17 20:46 20995.remote_session

13) 與一個帳戶共享屏幕會話

您可以讓兩個人從遠程位置登錄到同一個帳戶。 他們可以輕鬆共享屏幕會話(因此一個類型的另一個看到什麼,反之亦然)。 去做這個:

  • 創建一個命名的屏幕會話:
# screen -d -m -S share_session
  • 附加到終端窗口中的屏幕會話
# screen -x share_session
  • 讓其他人(登錄到同一帳戶)也附加到屏幕會話
# screen -x share_session

您將在其他位置顯示完全相同的輸出。 將出現在您的終端上的所有內容也將出現在其他用戶的終端上。

14) 鎖屏會話

可以在不鎖定普通會話用戶的情況下鎖定屏幕會話。 這意味著您可以離開計算機並確保沒有人會進行未經授權的操作。 為此,請使用命令 Ctrl-a 其次是 x (注意是小寫字符)。

Screen used by root <root> on centos-01.
Password:

15) 終止屏幕會話

當您完成並想退出屏幕會話時,您可以使用命令 Ctrl-a 其次是 k. 系統將提示您進行確認。

您也可以使用 exit 命令。 如果您想保存正在進行的過程,您可以在終止會話之前分離您的屏幕會話。

結論

屏幕實用程序可以監視窗口的活動或不活動。 如果您正在下載大文件、編譯或等待輸出,這非常有用。 屆時,如果需要,您甚至可以使用 screen 命令從計算機啟動某些進程,並在完成後將其分離。