Linux screen 会话命令详解

1,592 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

我们经常需要远程登录到Linux服务器,运行一些需要很长时间才能完成的任务或者脚本,一般情况下我们都是为每一个这样的任务单独开一个终端窗口,由于它们执行的执行时间太长,在任务执行的过程中又不能关闭终端窗口或者断开连接,否则这个任务就会被杀掉,就会功亏一篑。在这种情况下,使用Linux的screen命令可以有效的避免这个问题,接下来我们一起来了解一下这个工具的用法。

screen是一款用于命令行终端切换的工具,用户可以通过该工具同时连接多个本地或远程的命令行会话,并在其间自由切换。
在screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。

安装screen

在一些流行的Linux发行版上已经预装screen,可以使用screen -v命令检查服务器上是否已经安装。

如果在没有安装screen,可以使用系统提供的包管理器进行安装。

CentOS:

yum -y install screen

Ubuntu:

apt-get -y install screen

使用

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

  • Attached:表示当前screen正在作为主终端使用,为活跃状态。
  • Detached:表示当前screen正在后台使用,为非激发状态。

语法

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>]

参数说明

  • -A  将所有的视窗都调整为目前终端机的大小。
  • -d <作业名称>  将指定的screen作业离线。
  • -h <行数>  指定视窗的缓冲区行数。
  • -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
  • -r <作业名称>  恢复离线的screen作业。
  • -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
  • -s  指定建立新视窗时,所要执行的shell。
  • -S <作业名称>  指定screen作业的名称。
  • -v  显示版本信息。
  • -x  恢复之前离线的screen作业。
  • -ls或--list  显示目前所有的screen作业。
  • -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

启动screen终端

# 使用 -S 创建一个叫name的screen终端
screen -S name

# 使用 -R 创建一个叫name的screen终端
screen -R name

之后,会新建一个空白的Terminal,这个就是新的screen终端了,可以在这个新终端里运行我们想要运行的程序或脚本等。

离开screen终端

要想离开当前的screen终端,回到主终端,可以按下Ctrl + a和d键,离开后,screen会话仍将是活跃的,之后可以随时重新连接。

重新连接到screen终端

screen -r

如果你有多个 screen 会话,你可以用 ls 参数列出它们。

screen -ls
There are screens on:
        45214.session3  (2021年09月30日 10时19分41秒)   (Detached)
        45195.session2  (2021年09月30日 10时19分34秒)   (Detached)
        45132.session1  (2021年09月30日 10时19分13秒)   (Detached)
3 Sockets in /run/screen/S-psh.

如上,有三个活跃的screen会话,如果想要重新连接到“session2”会话,可以执行:

screen -r 45195

或者

screen -r -S session2

中止screen终端

可以按下Ctrl+d,或者在命令行中使用exit命令。

要查看screen命令所有的功能,你可以使用man screen命令查看screen的man手册。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !