一、screen命令簡介
screen是一種全屏窗口管理器,它可以讓多個進程(通常為交互式shell)在物理終端之間進行多路傳輸。每個虛擬終端都具備dec vt100終端和ansi x3的控制功能。iso 6429 (64) and iso 2022 standards (e.g. insertion/deletion of lines and support for multiple character sets)。用戶可以利用每個虛擬終端的回滾歷史緩沖區和復制粘貼機制,實現在窗口之間移動文本區域的功能。當調用screen時,它會創建一個包含shell(或指定命令)的窗口,然后避開您的方式,以便您可以正常使用該程序。然后,您可以隨時創建包含其他程序(包括更多shell)的新(全屏)窗口、關閉當前窗口、查看活動窗口列表、打開和關閉輸出日志、在窗口之間復制文本、查看滾動歷史記錄、在窗口之間切換,等等。所有窗口都完全獨立運行其程序。當窗口當前不可見時,甚至當整個屏幕會話與用戶終端分離時,程序仍繼續運行。
二、使用示例
1、安裝screen命令
[root@s145]~# yum install -y screenInstalled:screen.x86_64 0:4.1.0-0.27.20120314git3c2946.el7_9Complete!
2、列出當前所有的Session
[root@s145]~# screen -ls
No Sockets found in /var/run/screen/S-root.
3、創建一個新的窗口
[root@s145]~# screen -S test
…
[root@s145]~# screen -ls
There is a screen on:
2877.test (Attached)
1 Socket in /var/run/screen/S-root.
[root@s145]~#
4、退出當前窗口
??可以使用ctrl+a,然后輸入d,退出當前窗口,也可以使用screen -d退出當前窗口。如果要結束只窗口使用exit。
5、重新連接窗口
??使用screen -r id或者名稱重新連接會話,重新連接會話前要求會話的狀態為Detached。
6、清除dead狀態窗口
當會話窗口被結束后,進程狀態變為死亡并且無法連接,此時可以使用命令”screen -wipe”來清除會話窗口。
7、會話鎖定與解鎖
輸入ctl+a s鎖定會話,鎖定之后輸入任何內容屏幕都無反應,輸入ctl+a q之后解鎖,雖然屏幕鎖定的時候無反應但是會接受輸入的命令,解鎖后會全部執行,切勿輸入危險命令,所以建議使用ctl+a x鎖定。
輸入ctl+a x鎖定會話,需要輸入用戶密碼后才可以解鎖。
8、會話共享
9、給screen窗口發送命令
[root@s145]~# date && screen -S test -X screen ls > /tmp/1.txt
Tue Jan 11 17:12:24 CST 2022
[root@s145]~# screen -S test -X screen sh /root/test.sh
10、屏幕分屏
使用快捷鍵分屏正常,但是分屏出來的都無法輸入命令,如果知道的兄弟可以留言告知下原因,求指點,謝謝!
11、實踐示例
編寫一個持續輸出的腳本
[root@s145]~#?cat?test.sh? #!/bin/bash while?true do ??echo?"輸出`date?+%F-%T`" ??sleep?10 done
創建一個screen窗口
[root@s145]~# screen -S echotest
執行test.sh腳本
在其他會話使echotest窗口離線
[root@s145]~# screen -d echotest
[3405.echotest detached.]
重連會話
三、使用語法及參數說明
1、使用語法
用法:screen [-opts] [cmd [args]]
或者:screen -r [host.tty]
2、參數說明
參數 | 參數說明 |
---|---|
-4 | 僅將主機名解析為IPv4地址。 |
-6 | 僅將主機名解析為IPv6地址。 |
-a | 強制將所有功能放入每個窗口的termcap。 |
-A-[r | r] |
-c文件 | 讀取配置文件而不是’。screenrc’。 |
-d(-r) | 分離別處運行的屏幕(并在此處重新連接)。 |
-dmS名稱 | 作為守護進程啟動:分離模式下的屏幕會話。 |
-D(-r) | 分離并注銷遠程(并在此處重新連接)。 |
-D-RR | 做任何需要的事情來獲得屏幕會話。 |
-e xy | 更改命令字符。 |
-f | 流量控制打開,-fn=關閉,-fa=自動。 |
-h行 | 設置回滾歷史緩沖區的大小。 |
-i | 流量控制開啟時,中斷輸出更快。 |
-l | 登錄模式打開(更新/var/run/utmp),-ln=off。 |
-ls[match] | 什么都不做,只列出我們的SockDir[關于可能的匹配],同-list |
-list | 什么都不做,只列出我們的SockDir[關于可能的匹配]。 |
-L | 打開輸出日志記錄。 |
-m | 忽略$STY變量,創建一個新的屏幕會話。 |
-O | 選擇最佳輸出,而不是精確的vt100模擬。 |
-p windows | 如果命名窗口存在,則預選該窗口。 |
-q | 安靜啟動。如果不成功,則使用非零返回代碼退出。 |
-Q | 命令將向查詢進程的標準輸出發送響應。 |
-r[session] | 重新連接到分離的屏幕進程。 |
-R | 如果可能,重新連接,否則啟動新會話。 |
-s shell | 要執行的shell,而不是$shell。 |
-S sockname | 將此會話命名為。sockname而不是。 |
-t title | 設置標題。(窗口名稱)。 |
-T term | 將術語用作windows的$term,而不是“屏幕”。 |
-U | 告訴屏幕使用UTF-8編碼。 |
-v | 打印“屏幕版本4.01.00devel(gnu)2006年5月2日”。 |
-wipe[match] | 什么都不做,只需清理SockDir[可能的匹配項]。 |
-x | 連接到未分離的屏幕上。(多顯示模式)。 |
-X | 在指定會話中作為屏幕命令執行。 |
3、Screen命令中用到的快捷鍵
-
Ctrl+a c :創建窗口
-
Ctrl+a w :窗口列表
-
Ctrl+a n :下一個窗口
-
Ctrl+a p :上一個窗口
-
Ctrl+a 0-9 :在第0個窗口和第9個窗口之間切換
-
Ctrl+a K(大寫) :關閉當前窗口,并且切換到下一個窗口(當退出最后一個窗口時,該終端自動終止,并且退回到原始shell狀態)
-
exit :關閉當前窗口,并且切換到下一個窗口(當退出最后一個窗口時,該終端自動終止,并且退回到原始shell狀態)
-
Ctrl+a d :退出當前終端,返回加載screen前的shell命令狀態