如何使用screen命令
- 2020 年 8 月 13 日
- 筆記
大家好,我是良許。
很多時候,我們都需要執行一些需要很長時間的任務。如果這時候,你的網路連接突然斷開了,那麼你之前所做的所有工作可能都會丟失,所做的工作可能都要重做一遍,這會浪費我們許多的時間,非常影響我們的工作。那麼有沒有辦法可以解決這個問題呢?
答案是肯定的,那就是使用 screen
命令。screen
命令允許用戶在一個窗口內使用多個終端會話,可以斷開連接,也可以重新連接已斷開連接的會話。每個會話都可以恢復連接,這樣就算會話斷開了,用戶也不必擔心數據丟失,這正好解決了我們的問題。
因此,良許想與大家分享 Screen 這個實用工具的一些功能以及用法:
安裝 Screen
現在許多的 Linux 發行版通常都預裝了 Screen 。通過運行以下命令,可以查看系統是否安裝了 Screen :
$ screen --version
Screen version 4.06.02 (GNU) 23-Oct-17
如果你的系統並未安裝 Screen ,則可以執行以下命令來安裝:
$ sudo apt install screen
啟動 Screen 會話
想要啟動一個 Screen 會話,只需輸入以下命令:
$ screen
輸入 screen
命令後,你會看到一個布滿版權資訊的介面,你只需按回車或者空格鍵就可以跳過這個介面。跳過之後,你就可以看到終端介面了。這個終端和原來的終端並沒有什麼不同,你一樣可以瀏覽文件夾,打開文件,在原來的終端中能做到的事情,它也可以做到。
你也可以在啟動 Screen 會話時,使用 -S
參數給會話起名字。例如,我想啟動一個叫 alvin
的 Screen 會話:
$ screen -S alvin
當你啟動了不止一個 Screen 會話時,這可以用來區分其他 Screen 會話。
進入 Screen 終端後,按 Ctrl a+?
快捷鍵,可以查看 Screen 所附帶的所有命令:
分離與重新連接 Screen 會話
假如你要更新系統,你輸入更新命令後,是需要等待很長時間才更新完畢的。這時,如果你沒用 screen
命令,一旦你的網路連接斷開了,那麼更新就會被打斷,你就必須要重新開始更新。
Screen 會話的分離功能可以解決這個問題。你可以進入 Screen 終端里執行更新命令,然後輸入會話分離快捷鍵 Ctrl a+d
,你會看到以下提示資訊:
這就表示你已經成功從 Screen 會話中分離出來並回到原來的 Shell 會話中了。這時,Screen 會話會繼續留在後台執行更新任務。而且無論是網路斷開連接,還是關閉原來的 Shell 會話,它都不會受到影響。
當然,如果你來不及按會話分離快捷鍵網路就斷開了,Screen 會話也不會關閉,它一樣會繼續留在後台執行更新任務。
如果你想重新連接到已分離的 Screen 會話,以查看更新進程,只需執行以下命令:
$ screen -r
需要注意的是,該命令只適用於當前終端只啟動了一個 Screen 會話的情況。
嵌套 Screen 會話
嵌套 Screen 會話,顧名思義,就是 Screen 會話中的 Screen 會話,是實現用戶在一個窗口中使用多個終端的方法之一。
想要啟動一個嵌套 Screen 會話很簡單,你只需要在 Screen 終端再次輸入 screen
命令,或者按 Ctrl a+c
快捷鍵,這會在你原來的 Screen 會話中再啟動一個 Screen 會話,而原來的 Screen 會話則會在後台保持活動。
例如,你運行了 top
命令來監控系統的 CPU 的使用情況:
$ top
而你既不想關掉這個 top
進程,又想同時做其他的任務,那麼你就可以使用 Ctrl a+c
快捷鍵來啟動一個新的 Screen 會話,這樣,你既可以保持 top
命令在後台運行,又可以去執行其他的任務。
而如果你想切換回執行 top
命令的 Screen 會話,可以使用快捷鍵 Ctrl a+n
(切換至下一個 Screen 會話)或者 Ctrl a+p
(切換至上一個 Screen 會話)進行切換。
分離並啟動新的 Screen 會話
從 Screen 會話中分離出來再啟動新的 Screen 會話,也可以實現用戶在一個窗口中使用多個終端。
例如,你啟動一個 Screen 會話,然後輸入 df -h
來查看硬碟的使用情況:
$ df -h
然後你可以按 Ctrl a+d
快捷鍵從 Screen 會話中分離出來,回到原來的終端。這時你就可以再次輸入 screen
命令啟動一個新的 Screen 會話來執行其他的任務。
如果你想重新連接回運行 df -h
命令的 Screen 會話,則需要先從新的 Screen 會話中分離出來,然後嘗試輸入 screen -r
命令。這時,由於你並行啟動了多個 Screen 會話,然而 screen
命令並不知道你想要重新連接到哪個會話中,因此,你會看到以下提示資訊:
從圖中可以看到,每個 Screen 會話都有自己的 ID( 4352 與 4294 )以及自己的名字( pts-0.lxlinux
)。這裡可以看到兩個會話的名字都是 pts-0.lxlinux
,那是因為我啟動 Screen 會話的時候,沒有指定名字,因此它們都以默認的名字作為自己的名字。
想要重新連接到運行 df -h
命令的 Screen 會話,你只需在 screen -r
命令後面再加上會話的 ID 就可以了,像這樣:
$ screen -r 4352
當然,如果在啟動 Screen 會話時,你給會話指定了獨一無二的名字,那麼你也可以通過會話的名字來指定重新連接到哪個會話,例如,重新連接到名字為 alvin
的會話:
$ screen -r alvin
如果你並不知道 Screen 會話的 ID 以及名字,你也可以通過以下命令來查看:
$ screen -ls
關閉 Screen 會話
要關閉 Screen 會話很簡單,就和關閉平常的會話一樣,你可以使用 Ctrl d
快捷鍵,也可以輸入 exit
命令關閉:
$ exit
善用 Screen
在工作中,我們總會遇到需要執行較長時間才能完成的任務,如果在執行這些任務的過程中,遇到網路中斷,那將會導致數據丟失以及時間的浪費,這將嚴重影響我們的工作。Screen 允許會話斷開後進程在後台繼續運行,且支援從斷點恢復進程,這很好地解決了這問題。
而且 screen
命令還使我們可以利用一個窗口來同時執行多個任務,這對我們工作是非常有用的。因此,為了避免數據丟失以及節省時間,我們應該多用 screen
命令。最後,如果你還對 screen
命令有疑問,請留言告訴我唄!
公眾號:良許Linux