Screen 使用
今天听同学说了这个命令好奇的不行了。一起来研究下吧
下载:
yum install -y screen
查看:
rpm -qa|grep screen
screen-4.0.3-18.el6.x86_64
开始使用:
Screen命令后跟你要执行的程序
=================
screen vi screen_test.txt
退出VI 就退出窗口/会话
================
screen
================
以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c
,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。
screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。
例如,我们打开一个screen窗口编辑/tmp/abc文件:
screen vi /tmp/abc
之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d
,Screen会给出detached提示:
[root@1-11-108 ~]# screen
[detached]
[root@1-11-108 ~]# screen -ls
There is a screen on:
23859.pts-0.1-11-108 (Detached)
1 Socket in /var/run/screen/S-root.
[root@1-11-108 ~]# screen
[detached]
重新连接会话:
screen -r 23859
你可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key binding),C-a叫做命令字符(command character)。
可以通过C-a ?
来查看所有的键绑定,常用的键绑定有:
C-a ? | 显示所有键绑定信息 |
---|---|
C-a w | 显示所有窗口列表 |
C-a C-a | 切换到之前显示的窗口 |
C-a c | 创建一个新的运行shell的窗口并切换到该窗口 |
C-a n | 切换到下一个窗口 |
C-a p | 切换到前一个窗口(与C-a n相对) |
C-a 0..9 | 切换到窗口0..9 |
C-a a | 发送 C-a到当前窗口 |
C-a d | 暂时断开screen会话 |
C-a k | 杀掉当前窗口 |
C-a [ | 进入拷贝/回滚模式 |
Screen常用选项
使用键绑定C-a ?命令可以看到, 默认的命令字符(Command key)为C-a,转义C-a(literal ^a)的字符为a:
-c file | 使用配置文件file,而不使用默认的$HOME/.screenrc |
---|---|
-d|-D [pid.tty.host] | 不开启新的screen会话,而是断开其他正在运行的screen会话 |
-h num | 指定历史回滚缓冲区大小为num行 |
-list|-ls | 列出现有screen会话,格式为pid.tty.host |
-d -m | 启动一个开始就处于断开模式的会话 |
-r sessionowner/ [pid.tty.host] | 重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限 |
-S sessionname | 创建screen会话时为会话指定一个名字 |
-v | 显示screen版本信息 |
-wipe [match] | 同-list,但删掉那些无法连接的会话 |
下例显示当前有两个处于detached状态的screen会话,你可以使用screen -r <screen_pid>重新连接上:
[root@tivf18 root]# screen –ls There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Detached) 2 Sockets in /root/.screen. [root@tivf18 root]# screen –r 8736
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
[root@tivf18 root]# kill -9 8462 [root@tivf18 root]# screen -ls There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Dead ???) Remove dead screens with 'screen -wipe'. 2 Sockets in /root/.screen. [root@tivf18 root]# screen -wipe There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Removed) 1 socket wiped out. 1 Socket in /root/.screen. [root@tivf18 root]# screen -ls There is a screen on: 8736.pts-1.tivf18 (Detached) 1 Socket in /root/.screen. [root@tivf18 root]#
-d –m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname
启动一个初始状态断开的screen会话:
[root@tivf06 tianq]# screen -dmS mygdb gdb execlp_test
连接该会话:
[root@tivf06 tianq]# screen -r mygdb
管理你的远程会话
先来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到系统,直接ftp命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开SSH连接了。让我们使用screen来试试。
SSH登录到系统,在命令行键入screen。
[root@tivf18 root]# screen
Screen详细参数
以上是通过简单的例子介绍screen的常见用法,下面对其参数进行详细介绍。screen的命令语法为:
screen [-AmRvx -ls -wipe][-d <name>][-h <line>][-r <name][-s ][-S <name>]
其中的参数意义如下:
- -A:将所有的视窗都调整为目前终端机的大小。
- -d:分离指定的screen会话。
- -h:指定视窗的缓冲区行数。
- -m:即使目前已在会话中的screen会话,仍强制建立新的screen会话。
- -r:恢复分离的screen会话。
- -R:先试图恢复离线的会话。若找不到离线的会话,即建立新的screen会话。
- -s:指定建立新视窗时,所要执行的shell。
- -S:指定screen会话的名称。
- -v:显示版本信息。
- -x:恢复之前离线的screen会话。
- -ls:显示目前所有的screen会话。
- -list:显示目前所有的screen会话。
- -wipe:检查目前所有的screen会话,并删除已经无法使用的screen会话。
在每个screen会话中,可以使用的命令如下。注意,screen的命令都是以ctrl+a(C-a)开始的,以下省略C-a而直接以后面的按键替代:
- ?:Help,显示按键绑定情况。
- c:Create,创建新的窗口。
- n:Next,切换到下个窗口。
- p:Previous,切换到前一个窗口。
- M:查看活动状态。
- x:锁住当前的窗口,需用用户密码解锁。
- d:Detach,暂时离开当前会话,此后可以恢复。
- z:把当前会话放到后台执行,可以使用shell的fg命令回去。
- w:Windows,列出已创建的窗口。
- t:Time,显示当前时间。
- K:Kill,强行关闭当前的窗口。
- [0..9]:切换到第 0..9个窗口。
- [Space]:由窗口0顺序切换到窗口9。
- C-a:在两个最近使用的窗口间切换。
- S:水平分屏。
- |:垂直分屏。
- X:关闭当前分屏。
- Q:关闭除当前分屏的所有分屏。
- [Tab]:在分屏中切换。
- [:Copy,进入拷贝模式,此时可以回滚、搜索、复制,就像用使用vi一样。
- ]:Paste,粘贴刚刚在拷贝模式选定的内容。
其中在拷贝模式下可以使用的命令包括
- C-b:Backward,PageUp。
- C-f:Forward,PageDown。
- H:High,将光标移至左上角。
- L:Low,将光标移至左下角。
- 0:移到行首。
- $:移到行末。
- w:forward one word,前移一个字。
- b:backward one word,后移一个字。
- Space:第一次按标记起点,第二次按标记终点。
- Esc:结束copy mode。
参考地址:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/
http://noalgo.info/1000.html