如何使用 Linux 的 screen 命令
已發表: 2022-01-29 使用 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.howtogeek
的screen
窗口已被分離。
您需要窗口名稱開頭的數字才能重新附加它。 如果忘記了,可以隨時使用-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 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦