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,

 

####

更多功能,后面探索

 

 

 

 

#####

posted @ 2021-09-22 17:02  技术改变命运Andy  阅读(1090)  评论(0编辑  收藏  举报