在一些生产环境中,需要使用SSH或者是telnet登陆远程的Linux服务器,例如阿里云等。在打开一个终端窗口之后,我们一般会执行命令,然后等待结束关闭窗口。如果碰到了需要长时间执行的任务,例如备份文件、传输海量数据等等耗时的操作时,必须等待当前的任务完成之后才能离开当前的窗口,否则在任务停止之前关闭窗口,也会导致当前任务的终止。如果碰到类似上述的情况,那么就可以考虑使用screen命令来解决该问题。
screen是什么?
screen命令是用来管理终端窗口的工具。我们可以在screen命令下新建多个终端窗口,并且可以在这些终端窗口之间自由的切换,也可以让当前的正在执行命令的会话窗口离开screen界面,返回到后台运行,即使退出了SSH会话,该命令依然执行。如何新建一个screen会话?
screen -S mytest
一般情况下,直接输入screen命令就可以进入到screen会话中,这里的 -S命令作用是为了给screen标识一个名字供用户识别。
- 如何在screen会话中同时执行多个命令?
在进入screen会话之后,直接键入要执行的命令,例如 top命令,这个命令会一直执行直到我们显示的关闭它。此时突然有一个需求,我们要切换到某个目录下配置某个文件,这个时候键入ctrl + a,然后键入c,这样就新建了一个新的shell窗口并且切换到了该窗口。这里的ctrl +a是screen会话的格式,稍后会说。
- 如何退出当前的screen会话?
键入命令ctrl +a,然后键入d(detach)命令就可以离开当前的screen会话,此时在之前screen会话中的命令依然在执行,只是切换到了后台执行,哪怕我们关闭了当前的shell会话也不会中断这些命令的执行。
- 如何回到之前的screen会话中?
首先需要查看当前的screen命令中存在哪些screen会话。键入命令screen -list,结果如下:
root@iZ25gnpvvy1Z:~# screen -list
There is a screen on:
15927.test (06/25/2016 12:24:49 AM) (Detached)
1 Socket in /var/run/screen/S-root.
发现存在一个已经分离的screen会话,id是15927,名字是test。这个正是之前的screen会话,键入screen -r 15927,可以重新回到之前的会话中并且查看命令的执行情况。
一些基本的用法大致如上所示。刚才说到screen会话中的命令以ctrl + a开头,后面接不同的命令,一些常用的命令如下:
c —新建一个新的shell命令窗口并且切换到该窗口
n —(next)切换到另外一个window窗口
p —(previous),切换到前一个window窗口
d —(detach),离开当前的screen环境
w —显示所有窗口列表
常用的如上所示,更加详细的说明请参考linux screen命令详解