如何使用 Linux 的 screen 命令

已發表: 2022-01-29
筆記本電腦上的 Linux 終端,其後疊加了其他終端會話。
fatmawati achmad zaenuri/Shutterstock

使用 Linux screen命令,您可以將正在運行的終端應用程序推送到後台,並在您想要查看它們時將它們拉到前面。 它還支持分屏顯示並通過 SSH 連接工作,即使在您斷開並重新連接之後!

相關: 10 個適合初學者的基本 Linux 命令

什麼是屏幕命令?

screen命令是一個終端多路復用器,它絕對包含選項。 說它可以做很多事情是輕描淡寫的祖父。 手冊頁長達 4,100 多行。

以下是使用screen命令的最常見情況,我們將在本文中進一步介紹:

  • 標準操作是創建一個包含 shell 的新窗口,運行命令,然後將窗口推送到後台(稱為“分離”)。 當您想查看您的進程是如何進行時,您可以再次將窗口拉到前台(“重新附加”)並再次使用它。 這對於您不想通過關閉終端窗口意外終止的長進程非常有用。
  • 運行screen會話後,您可以創建新窗口並在其中運行其他進程。 您可以輕鬆地在窗口之間切換以監控它們的進度。 您還可以將終端窗口拆分為垂直或水平區域,並在一個窗口中顯示各種screen窗口。
  • 您可以連接到遠程機器、啟動screen會話並啟動進程。 您可以斷開與遠程主機的連接,重新連接,您的進程仍將運行。
  • 您可以在兩個不同的 SSH 連接之間共享screen會話,以便兩個人可以實時看到相同的內容。

安裝屏幕

要在 ubuntu 上安裝screen ,請使用以下命令:

 sudo apt-get 安裝屏幕

要在 Manjaro 上安裝screen ,請使用以下命令:

 sudo pacman -Sy 屏幕

在 Fedora 上,您鍵入以下內容:

 sudo dnf 安裝屏幕

屏幕入門

要啟動screen ,只需按如下所示鍵入並按 Enter 鍵:

 屏幕

您將看到一個許可證信息頁面。 您可以按空格鍵閱讀第二頁或按 Enter 返回命令提示符。

廣告

您將留在命令提示符下,似乎沒有發生任何事情。 但是,您現在正在多路復用終端仿真器中運行 shell。 為什麼這是一件好事? 好吧,讓我們開始一個需要很長時間才能完成的過程。 我們將下載最新 Linux 內核的源代碼並將其重定向到一個名為latest_kernel.zip的文件中。

為此,我們鍵入以下內容:

 捲曲 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip 

我們的下載開始了, curl輸出顯示了我們的進度。

我們無法向您展示下一位的圖像,因為它是一個擊鍵序列。 您鍵入 Ctrl+A,釋放這些鍵,然後按 d 分離屏幕。

下載過程仍在運行,但顯示下載的窗口已刪除。 您將返回到您啟動screen會話的終端窗口。 一條消息告訴您標記為23167.pts-0.howtogeekscreen窗口已被分離。

您需要窗口名稱開頭的數字才能重新附加它。 如果忘記了,可以隨時使用-ls (list) 選項,如下所示,獲取分離窗口的列表:

 屏幕-ls 

準備好後,您可以使用-r (重新附加)選項和會話數重新附加它,如下所示:

 屏幕-r 23167 

廣告

一直在後台工作的窗口現在被帶回您的終端窗口,就好像它從未離開過一樣。

重新連接的屏幕會話恢復到終端窗口。

如果它是一個將貫穿其結論的過程,它最終將完成。 如果它是一個持續的過程,您最終會想要終止它。 無論哪種方式,當進程結束時,您都可以鍵入exit以退出screen 。 或者,您可以按 Ctrl+A,然後按 K 強行殺死一個窗口。

鍵入以下命令:

 出口

您將返回到之前的終端窗口,該窗口仍將顯示您用於重新連接窗口的命令。 因為我們關閉了唯一的分離窗口,所以我們收到一條消息, screen正在終止。

相關:如何使用 curl 從 Linux 命令行下載文件

使用命名屏幕會話

您可以使用-S (會話名稱)選項來命名您的screen會話。 如果您使用易於記憶的名稱而不是會話的數字標識,則重新連接到會話會更方便。 我們鍵入以下內容將我們的會話命名為“bigfile”:

 屏幕 -S 大文件

screen啟動我們的會話時,我們會看到一個帶有命令提示符的空白窗口。 我們將下載一個大文件,因此我們可以使用一個長時間運行的進程作為示例。

我們輸入以下內容:

 捲曲 http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip 

下載開始時,我們按 Ctrl+A,然後按 D 分離會話。 我們鍵入以下內容以使用帶有screen-ls (列表)選項來查看分離會話的詳細信息:

 屏幕-ls 

廣告

在數字標識符 (23266) 後面,我們看到了會話的名稱 (bigfile)。 我們鍵入以下內容,包括會話的名稱,以重新附加它:

 屏幕 -r 大文件

我們重新連接到我們的下載窗口,看到長時間的下載仍在進行中。

下載完成後,我們鍵入exit關閉會話窗口。

在多個窗口中使用屏幕

到目前為止,我們已經使用screen將單個進程放置在背景中的分離窗口中。 然而, screen能做的遠不止這些。 接下來,我們將運行一些允許我們監控計算機某些方面的進程。

我們輸入以下內容來啟動一個名為“monitor”的屏幕會話:

 屏幕 -S 顯示器

廣告

在新窗口會話的命令提示符下,我們將啟動dmesg並使用-H (人類可讀)和-w (等待新消息)選項。 這將顯示內核緩衝區消息; 新消息將在出現時出現。

我們輸入以下內容:

 dmesg -H -w 

出現現有消息。 我們沒有返回命令提示符,因為dmseg正在等待新消息,並將在它們到達時顯示它們。

相關:如何在 Linux 上使用 dmesg 命令

我們想運行另一個應用程序,所以我們需要一個新的screen窗口。 我們按 Ctrl+A,然後按 C 來創建一個新窗口。 我們將使用watch重複運行vmstat ,因此我們會經常更新顯示計算機上的虛擬內存使用情況。

在新的命令提示符下,我們鍵入以下內容:

 觀看 vmstat 

vmstat輸出出現並每兩秒更新一次。

我們的兩個進程現在正在運行。 要在screen窗口之間跳轉,請按 Ctrl+A 和窗口編號。 我們創建的第一個是窗口零 (0),下一個是窗口 1,依此類推。 要跳到第一個窗口( dmesg窗口),我們按 Ctrl+A 和 0。

如果我們按 Ctrl+A 和 1,它會將我們帶回vmstat窗口。

這很漂亮! 我們可以按 Ctrl+A,然後按 D 來脫離這個會話; 我們可以稍後重新連接。 兩個會話仍將運行。 同樣,要在窗口之間切換,我們按 Ctrl+A 和要切換到的窗口的編號(0 或 1)。

讓我們進入下一步,在一個窗口中查看兩個屏幕。 執行此操作時,您會將終端窗口拉伸到使此步驟有用的大小。 我們的示例受限於屏幕截圖的大小,因此我們的窗口看起來有點狹窄。

廣告

為此,我們按 Ctrl+A,然後按 Shift+S(需要大寫“S”)。

窗口分成兩個“區域”。

頂部區域仍顯示vmstat ,底部區域為空白。 光標在下面的屏幕截圖中突出顯示。 要將其移動到下部區域,我們按 Ctrl+A,然後按 Tab。

光標移動到下部區域,這實際上只是一個空白區域。 它不是一個shell,所以我們不能在裡面輸入任何東西。 為了得到一個有用的顯示,我們按下 Ctrl+A,然後按下“0”在這個區域顯示dmesg窗口。

這在一個拆分窗口中為我們提供了兩個實時輸出。 如果我們按 Ctrl+A 和 D 來分離窗口,然後重新附加它,我們將失去拆分窗格視圖。 但是,我們可以使用以下鍵盤快捷鍵恢復它:

  • Ctrl+A, S:水平分割窗口。
  • Ctrl+A , Tab:移動到下方區域。
  • Ctrl+A, 0:在下部區域顯示窗口零。

我們可以更進一步。 我們現在將垂直拆分下部窗格,並將第三個進程添加到顯示中。 將光標放在下部區域,我們按 Ctrl+A 和 C 來創建一個帶有外殼的新窗口。 下部區域顯示新窗口並為我們提供命令提示符。

接下來,我們運行df命令來檢查文件系統的使用情況:

 df 

廣告

當我們看到df運行時,我們按下 Ctrl+A 和豎線字符(|) 。 這將垂直分割下部區域。 我們按 Ctrl+A 和 Tab 移動到新區域。 接下來,我們按下 Ctrl+A 和 0 來顯示dmesg窗口。

您還可以從一個區域移動到另一個區域,並添加更多垂直或水平分割。 以下是一些更有用的組合鍵:

  • Ctrl+A:在當前區域和上一個區域之間來回切換。
  • Ctrl+A、Q:關閉除當前區域以外的所有區域。
  • Ctrl+A, X:關閉當前區域。

通過 SSH 使用屏幕

使用screen ,您可以啟動窗口會話,將其分離以使其仍在後台運行,註銷或重新登錄,然後重新附加會話。

讓我們使用ssh命令從另一台計算機與我們的計算機建立 SSH 連接。 我們必須提供要連接的帳戶名稱和遠程計算機的地址。

對於我們的示例,我們鍵入以下內容:

 ssh 戴夫@192.168.4.30 

在遠程計算機上進行身份驗證並登錄後,我們鍵入以下內容以啟動一個名為“ssh-geek”的screen會話:

 屏幕-S ssh-geek 

出於演示目的,我們將在screen窗口中運行top ,但您可以啟動任何長時間運行或無休止的進程。

我們輸入以下內容:

 最佳

廣告

一旦top在窗口中運行,我們按 Ctrl+A,然後按 D 來分離窗口。

我們返回到原來的遠程終端窗口。

用戶返回到原來的終端窗口

如果我們鍵入exit ,如下所示,它會斷開 SSH 會話,我們會回到本地計算機:

 出口

我們鍵入以下內容以重新連接:

 ssh 戴夫@192.168.4.30 

重新連接並登錄後,我們可以鍵入以下內容以重新附加screen會話:

 屏幕-r ssh-geek 

我們現在重新連接到仍在運行的top實例。

如果您想在一台機器上開始一個進程,然後在另一台機器上從中斷的地方繼續,這非常棒。

相關:如何從 Linux Shell 創建和安裝 SSH 密鑰

共享屏幕會話

您還可以使用screen會話來允許兩個人查看同一個窗口並與之交互。 假設有人在他的計算機上運行 Fedora,想要連接到我們的 Ubuntu 服務器。

他會輸入以下內容:

 ssh 戴夫@192.168.4.30 

連接後,他使用 -S(會話名稱)選項啟動一個名為“ssh-geek”的屏幕會話。 他還使用-d (分離)和-m (強制創建)選項來創建一個已經分離的新screen會話。

他鍵入以下內容:

 屏幕 -d -m -S ssh-geek 

廣告

他鍵入以下內容,使用-x (多屏模式)選項附加會話:

 屏幕 -x ssh-geek 

在 Manjaro 計算機上,另一個人使用相同的帳戶憑據連接到 Ubuntu 計算機,如下所示:

 ssh 戴夫@192.168.4.1 

連接後,她輸入screen命令並使用 -X(多屏模式)選項加入同一個窗口會話,如下所示:

 屏幕-X ssh-geek 

現在,任何一個人輸入的任何內容,其他人都會看到。 例如,當一個人發出 date 命令時,他們都會在輸入時看到它,以及它的輸出。

兩人現在正在共享一個在遠程 Ubuntu 計算機上運行的screen會話。


對於一款在 1987 年首次亮相的軟件, screen仍然具有很好的生產力衝擊力。 熟悉它將是值得的時間!

相關:你應該知道的 37 個重要的 Linux 命令

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦