Linux终端命令神器--Screen

screen的功能

screen的功能大体有三个:

  • 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
  • 会话共享:Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

这三个功能,其实互相交织,组成screen功能繁多的命令集。

安装screen

# CentOS

yum install screen

# Debian/Ubuntu

apt install screen

 

screen命令集

screen,通常的命令格式为:

 

screen [-opts] [cmd [args]]

通常情况下,使用一下基础命令即可,高阶命令过多,比较难记。

 

注意:

命令区分大小写

状态介绍

通常情况下,screen创建的虚拟终端,有两个工作模式:

 

Attached:表示当前screen正在作为主终端使用,为活跃状态。

Detached:表示当前screen正在后台使用,为非激发状态。

通常情况下,不需要关注上面的状态。

 

基础命令

这里列举一些我认为常用的screen命令,使用以下命令基本满足日常使用。

 

1. 帮助查询

screen的帮助文档实在是过于详细,以至于查个命令,可能要查几分钟;但是你可以直接使用帮助命令,查询自己需要的命令:

 

 

# 查询screen提示

screen -help

查询命令

查询命令

通过这个命令,可以查询到大部常用命令。

 

2. 终端列表

怎么查看已经存在的screen终端呢?很简单,使用命令:

 

screen -ls

即可查看已经创建(在后台运行的终端):

 

已经创建的终端

已经创建的终端

如果你之前没有创建,那么是为空的,比如我的另外一台腾讯云服务器(主要用于测试,所以没怎么部署东西):

 

已经创建的终端为空

已经创建的终端为空

3. 新建终端

大部分人使用screen,是为了让进程以前端运行的方式,后端存活(运行)。所以,使用screen新建一个虚拟终端,后端运行很重要。screen创建虚拟终端的方法很多

 

比如:直接输入screen回车,即可新建一个虚拟终端,但是这样的名称太乱(以Linux的hostname命名):

screen官方推荐的创建虚拟终端的方法是:

 

# 创建一个叫Hello的虚拟终端

screen -S Hello

这个时候,我们按Ctril+a,再按d,即可保持这个screen到后台并回到主终端:

 

使用-R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen

使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen(也就是会创建同名的screen)

 

4. 回到终端

 

刚刚我们介绍了创建虚拟终端,并回到主终端的方法。那么,如何重新回到虚拟终端呢?

很简单,使用-R或者-r命令即可:

screen -r [pid/name]

其中:

pid/name:为虚拟终端PID或Name

其中:32307为PID,tool为Name。

回到这个虚拟终端的命令即为:

screen -r 32307

# 或(在没有重名虚拟终端情况下)

screen -r tool

另外一个-R和-r一样,但是没有对应名称的PID或者Name时,会自动创建新的虚拟终端。

 

5. 清除终端

有时候,我们的进程已经“守护”完毕,不需要这个虚拟终端了,也就是需要释放资源,如何操作呢?

 

比较推荐的方法,是进入对应虚拟终端,然后输入:

 

# 退出终端

exit

之后,就会回到主终端。

 

 

当然,你如果对screen运行程序,确定已经停止运行了,也可以在主终端内,使用命令释放:

 

# 使用-R/-r/-S均可

screen -R [pid/Name] -X quit