1-linux screen 命令详解
一、简介
系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。
通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
screen就是解决这个问题,
1,会话恢复 只要Screen本身没有终止,在其内部运行的会话都可以恢复。
2,多窗口,在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。
3,会话共享,Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性
二,安装
安装screen
流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
[root@TS-DEV ~]# yum install screen [root@TS-DEV ~]# rpm -qa|grep screen screen-4.0.3-4.el5 [root@TS-DEV ~]#
###
三,简单使用
###
Screen命令语法:
screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
Screen命令参数:
-A -[r|R] 将所有的视窗都调整为目前终端机的大小。
-c filename 用指定的filename文件替代screen的配置文件’.screenrc’.
-d [pid.tty.host] 断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。
-D [pid.tty.host] 与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。
-h <行数> 指定视窗的缓冲区行数。
-ls或–list 显示目前所有的screen作业。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-p number or name 预先选择一个窗口。
-r [pid.tty.host] 恢复离线的screen进程,如果有多个断开的进程,需要指定[pid.tty.host]
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s shell 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。(用来替代[pid.tty.host]的命名方式,可以简化操作).
-v 显示版本信息。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
-x 恢复之前离线的screen作业。
###
1 创建 screen 终端
# screen //创建 screen 终端
screen -S test1 给终端指定一个名字
其他用法:
screen -m: 如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。
screen -dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。
screen -p number or name:预先选择一个窗口。
###
2 查看终端
[linux@user~]$ screen -ls
当你执行了上面的创建终端命令之后,执行这个命令会出现,
91638.test (Attached)
Attached这个状态代表的是这个终端有用户在使用中,
####
3 保存并退出终端:
在screen终端内
3.1,临时保存退出
Ctrl+a+d #按Ctrl+a,然后再按d即可保留Screen,注意这是两步,
[detached] #这时会显示出这个提示,说明已经保留好Screen了
这个时候你执行screen -ls,会显示:
91638.test (Detached)
Detached,这说明这个终端目前没有人使用,是可以直接连接的,
3.2,彻底退出关闭终端
在screen中,输入exit,
这就是直接退出终端screen终端了,
这个时候你执行screen -ls,会显示:空
说明这个终端已经被你退出了,就彻底没有了
####
4 重新连接终端
screen -r test1 (or 9649)
这是重新连接到这个名字或者id号的终端,
注意,这个命令一定要保证screen -ls,查看到的终端状态是Detached,否则说明有人再用,你是执行这个命令会失败的,
你重新连接之后,再回来,你会发现你离开是什么样子,你重新回来就是什么样子,就很爽了,enjoy
不过你可以踢掉他,然后你去连接:
screen -d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。
screen -D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接
#####
上面已经是最简单,最简单的了,要使用screen一定要掌握,
下面开始一些好玩的其他用法
###
四,进阶使用-快捷键
快捷键
注意:下面所有的快捷键都是必须要在screen session 下!不要瞎搞,不在screen session,是不行的,
所有命令都以 ctrl+a(C-a) 开始。C-a就是ctrl+a,这里是简写一下,
4.1 在两个最近使用的 window 间切换
C-a C-a -> 按两次,在两个最近使用的 window 间切换
4.2 上一个,下一个窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
4.3 新建窗口并切换
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
4.4 切换0-9个窗口
C-a 0..9 -> 切换到第 0..9 个 window
4.5 循环
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
4.6 保存并临时退出
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
4.7 关闭或杀死窗口
使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
4.8 锁定回话
使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
好了先这些,后面有好玩的用法再继续补充
####
五,进阶使用-其他
5.1 清除dead 会话
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
###
六,screen高级-很好玩的用法,
6.1 分屏
现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,注意这里的是大S,
Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。
分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。
切换到其他屏幕之后,要先使用C-a c 新建一个窗口,
可以用C-a X快捷键关闭当前焦点所在的屏幕区块,注意这里的是大X,
也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。意这里的是大Q,
####
更多功能,后面探索
#####