視窗管理工具 screen

来源:https://www.cnblogs.com/salt-fish1/archive/2018/12/26/10179883.html
-Advertisement-
Play Games

簡介 Screen是一款用於命令行終端切換的自由軟體 用戶可以通過該軟體同時連接多個本地或遠程的命令行會話,併在其間自由切換 GNU Screen可以看作是視窗管理器的命令行界面版本 它提供了統一的管理多個會話的界面和相應的功能 主要優點 screen的優點有很多,但我認為最主要的是可以在網路連接中 ...


簡介

Screen是一款用於命令行終端切換的自由軟體 用戶可以通過該軟體同時連接多個本地或遠程的命令行會話,併在其間自由切換 GNU Screen可以看作是視窗管理器的命令行界面版本 它提供了統一的管理多個會話的界面和相應的功能

主要優點

screen的優點有很多,但我認為最主要的是可以在網路連接中斷後,不會丟失對已經打開命令行的控制 其他優點: 1.可以將需要長時間運行的腳本放到後臺運行,雖然nohup和&都有這種功能,但他們不方便再次將其調到前臺進行交互操作 2.可以將視窗共用,即多人可以共用一個視窗,任意一個人產生的輸入輸出,其他人都能看到,共用視窗可以設置密碼保護(如何設置密碼,我還沒查到,希望知道的大神可以回覆一下) 3. 被screen管理的終端,不是放到後臺運行才可以保證進程不中斷,即使在前臺運行時,突然斷電等其他原因導致終端突然關閉,該終端中運行的進程依舊會正常運行,使用screen命令可以繼續調出該終端

常用參數和命令

-A    將所有視窗都調整為目前終端機的大小 -d    後接作業名或id,用於將在其他終端前臺運行的視窗離線,也就是放到後臺運行 -r    後接作業名或id,用於恢復離線視窗,也就是重新將該視窗調到前臺運行。 -R   後接作業名或id,如果存在該離線視窗則調到前臺運行,此時類似-r;如果不存在該離線視窗,則創建新視窗,作業名為指定的字元串;如果存在該視窗,但未離線,則創建同名視窗,但id不一樣;這裡可以看出 id 才是視窗的唯一標識 -S    後接作業名,用於指定視窗的作業名 -v    顯示版本 -x    後接作業名或id,如果該screen作業處於離線狀態,則恢復該離線視窗,此時類似於-r參數;如果該視窗處於前臺運行,則當前終端與原終端共用該視窗,具體介紹見下方例子 -X    給 screen 傳遞指令。通常與-S配合,給指定的視窗發送指令;與stuff配合,表示在指定視窗內執行傳遞的命令。具體介紹見下方例子 -ls或--list    顯示目前所有的screen作業 --wipe    檢查目前所有的screen作業,並刪除已經無法使用的screen作業   這裡說明一下: 上面幾乎所有參數,指定作業名時,可以不用指全,只要能夠確定唯一的一個視窗,即使只寫一個字母也可以 如果多個作業名都包含指定的字元串,且其中有一個作業名正好和指定的字元串完全相同,則會選擇該視窗 如果多個作業名都包含指定的字元串,且其中沒有一個作業名正好和指定的字元串完全相同,則會提示有多個符合的視窗,需要重新選擇,並且列出所有符合的視窗   一點建議: 雖然前面介紹的很多參數都可以不用指定完整的作業名,但我還是建議在使用screen時儘量使用id,或者使用完整的作業名 最好保證作業名間不存在包含關係,如儘量不要讓作業名為 test_screen 和 test_screen_a 同時存在 因為,可能會出現想殺死 test_screen 視窗,但是正好這個視窗不存在或者已經被殺死了,就會導致誤殺 test_screen_a 的情況  

常用命令

新建screen視窗:
screen                                     # 該命令會創建一個新視窗,名稱隨機命名,-S 可以用來指定視窗
screen -S test1                            # 該命令創建一個名為test1的新視窗,預設進入bash,也就是我們終端剛打開時的樣子
screen -S test2 /bin/bash /tmp/1.sh        # 該命令創建一個名為test2的新視窗,並運行腳本1.sh,如果腳本執行結束或者中斷,這整個視窗將被刪除

 

在交互界面離線視窗: Ctrl+a 然後輸入d,不用回車即可將screen視窗離線。但是在輸入 Ctrl + a 後,界面是沒有任何變化的,沒有任何提示信息,直到輸出d才會離線視窗 在其他終端將scren視窗離線:
screen -d test1

 

列出所有視窗:
screen -ls

 

恢復離線視窗:
screen -r test1

 

在 screen 管理的的視窗中,也可以恢復其他離線視窗: 該命令必須要求當前screen在bash界面,能輸入相應命令,而不是運行一個占用前臺的進程的screen視窗 該命令執行後,使用 screen -ls 顯示的上一層的 screen 視窗仍在前臺運行 這時候如果使用 exit 退出 test1 視窗,或者在其他終端使用 screen -d 離線 test1 視窗,就可以回到上一層視窗了,但如果是使用 ctrl + a 再輸入 d 的方式離線 test1 視窗,那麼該終端會完全退出 screen 管理的視窗,切到系統的終端,但使用 screen -ls 列出的剛纔上一層的視窗依然是活躍的,這時候只能使用 screen -d 去離線視窗,然後再使用 screen -r 進入該視窗了   共用screen視窗:
screen -x test1

 

當一個screen視窗(譬如test1)在前臺運行時,從另一個視窗執行以上命令,可以實現兩個screen視窗顯示信息完全一致 兩個終端都可以操作該視窗,輸入和輸出會同時顯示在所有終端上   清除無法使用的screen:
screen --wipe

 

殺死某個session:
screen -X -S test1 quit

 

或者在交互界面Ctrl+a,然後輸入k

screen在腳本中的運用

screen的常用命令經常伴隨著交互,但如果運用到腳本中,就不允許帶有互動式的命令了   使用screen啟動視窗同時離線運行:
screen -d -m -S test1 /bin/bash /tmp/1.sh

 

該命令會開啟一個test1的screen視窗運行/tmp/1.sh腳本,並將視窗離線 適用於作為一個服務的運行命令 這裡 -m 必須加上,否則不允許直接創建一個離線的視窗   使用screen傳遞輸入給離線視窗:
screen -X -S test1 stuff "THIS IS TEST\n"

 

命令會向視窗test1中輸入“THIS IS TEST”字元串,並回車   這裡如果不加上 stuff,則表示後面的內容為發給 screen 的命令(與直接在終端執行的命令不同,是給screen發送的指令) 如果加上 stuff,則表示在指定視窗的終端輸入以上字元串,後面加上\n 表示回車 字元串中可以使用腳本中的變數,它會自動讀取變數的值以後再傳入到視窗執行   雖然上面提到的 "screen -X -S test1 quit" 命令也能退出視窗,但該命令直接跟screen發送指令,類似於kill殺死該視窗,視窗中運行的服務不會平緩關閉,存在丟數據的風險   如果自己運行的服務在前臺運行,且收到quit或者其他指令後會平緩退出,可以在加上 stuff 後接上命令,這樣的退出會可控一點
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 感謝Jeffcky大佬的博客: EntityFramework Core 2.0全局過濾 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p/8491058.html 什麼是值對象 沒有唯一的標識,固定不變的,表示一個具體的概念,用來描述一 ...
  • 一 Docker volume形態 因為Docker 採用 AFUS 分層文件系統時,文件系統的改動都是發生在最上面的容器層,在容器的生命周期內,它是持續的,包括容器在被停止後。但是,當容器被刪除後,該數據層也隨之被刪除了。因此,Docker 採用 volume (捲)的形式來向容器提供持久化存儲。 ...
  • grep 按照指定的模式,在文件中搜索匹配的行,將結果顯示在標準輸出。另外還有兩個指令egrep相當於grep –E,fgrep相當於grep -F。如果沒有給出文件名,那麼從標準輸入讀取。 此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedor ...
  • 伺服器: 客戶端: 參考: 《UNIX網路編程 - 捲1:套接字聯網API》 ...
  • 配置nginx的三種虛擬主機形式。1.基於埠的虛擬主機;2.基於功能變數名稱的虛擬主機;3.基於IP的虛擬主機。 ...
  • 工作環境是suse11sp3系統(內核版本3.0.101-0.47.90-default),需要通過perf排查系統性能問題,但是預設是沒有perf工具的。 在網上搜索了一下,需要linux-tools工具包,幸好手上有SUSE11sp3 ISO文件,直接在ISO的suse/x86_64目錄下 找到 ...
  • 激活Vista以後任何版本的windows原配遠程桌面功能,突破遠程用戶連接數限制。 ...
  • 本章學習內容: 1.WIFI如何開啟 2.掃描熱點 3.連接熱點 4. 斷開熱點 5.關閉WIFI 本節使用的是wpa_supplicant工具,它主要包含wpa_supplicant(命令行模式)與wpa_cli(交互模式)兩個程式。 1.WIFI如何開啟 wpa_supplicant.conf文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...