Screen工具使用总结

本文总结和记录了笔者在Linux系统应用过程中常用到的screen命令相关的操作和内容,以做手册和参考之用。

关于Screen

screen,意为"屏幕",是Linux(Unix)系统中的一个终端多路复用工具。它允许用户在一个终端窗口中运行多个独立的终端会话。可以简单的理解它可以基于一个终端或者连接,衍生出多个"虚拟"的终端,并在它们中运行不同的程序和命令,而不需要使用真正的多个终端窗口或者连接。

虽然screen是一个非常常用和基础的工具,但遗憾的是很多发行版却没有将其作为默认软件进行安装。当然大多数软件会将其作为默认软件仓库内的一个成员,所以可能需要在系统安装完成后由管理员手动安装,安装方式和普通软件无异。如在debain上可以使用以下命令进行安装和检查。

js 复制代码
sudo apt install screen
screen -version

场景

我们已经有了bash、sh作为命令行终端工具,为什么还要使用screen呢。笔者觉得,它是为一些扩展的场景和需求而准备的,下面简单总结几条:

  • 防止会话中断

作为一个开发者或者系统运维人员,我们最常用的Linux操作场景,并不是坐在服务器的控制台前面来进行操作,而是通过网络包括互联网进行远程管理,比如使用ssh连接远程终端的方式。如果网络的质量不太好或者其他意外情况发生,在操作过程中,ssh会话被中断,正在执行中的命令和操作,可能也会受到影响或者出错。这时使用screen,基本上就可以解决和避免这个问题。

  • 长期或者持久运行

有很多软件的运行模式,就是需要长期和持续运行的,比如网络服务、下载工具、后端音乐播放程序等等。很多时候管理员不希望这些程序影响正常的操作,就可以使用screen命令,将它们放在后台运行,同时可以很方便的恢复操作的界面和状态。

  • 共享ssh

显然,如果有多个任务需要执行并监控,或者希望保持操作状态和信息,就可以在一个ssh会话的基础上,使用多个screen来进行管理和切换,非常方便。

  • 保持登录状态

如果在screen里面,进行了用户切换(如sudo),这个登录会话状态是可以保持的,下次之间复用这个窗口就可以了。当然这里可能稍微有一点点安全隐患,管理员有责任知晓并了解这个情况。

基本使用

screen的使用的主命令就是screen命令,但需要组合使用命令行参数和键盘快捷方式来执行相关操作。这个工具的一般使用过程和生命周期如下:

  • 查看帮助

使用screen -help查看这个命令的帮助信息。如果认真阅读,可以发现里面有很多有趣的内容。

  • 启动会话

可以简单的使用screen命令,就可以启动一个新的终端,和启动一个新的会话基本无异。虽然可以以匿名的方式来启动会话,但还是建议创建时提供一个名字(-S参数),方便进行后续的操作和管理。否则就只能使用会话的pid来操作了。

  • 分离会话

如果要在会话中进行切换,或者需要临时退出会话到主命令行环境。需要在screen会话中,按下Ctrl-a,然后按下 d,即"Ctrl-a d"。这将使你从screen会话中分离出来,回到会话调用界面,但会话仍在后台运行。

  • 查看会话列表

使用-list(-ls)参数,可以显示当前系统中活动的会话列表,包括名称、pid等信息,可以用于关闭或者恢复会话。

  • 恢复会话

使用-r命令选项,可以恢复一个存在的会话。恢复会话需要指定会话的pid或者会话名称。

  • 退出会话

使用exit命令,可以退出当前会话。也可以使用"Ctrl-d"来达到相同的效果。

相关的操作,在命令行环境中的内容大体如下:

shell 复制代码
// 创建会话
screen -S newscreen

// 分离会话
ctrl-a d
[detached from 142.newscreen]

// 查看会话列表
$ screen -ls
There is a screen on:
        142.newscreen   (02/02/2024 04:14:52 PM)        (Attached)
1 Socket in /run/screen/S-yanjh.

// 检查screen进程 可以看到相关的pid
$ ps aux | grep screenns.
yanjh      142  0.0  0.0  14904  1364 ?        Ss   16:14   0:00 SCREEN -S newscreen
yanjh      150  0.0  0.0  14116  1148 tty1     S    16:17   0:00 grep screen

// 恢复会话
screen -r newscreenh[100]

// 退出会话
$ exit
[screen is terminating]
  • 运行程序

创建新的screen会话后,可以使用和终端程序完全相同的方式,执行各种命令行程序和操作。只要不显式的运行exit命令,这个会话将永远存在。如果出现网络中断,重新连接后,可以随时恢复当前状态。

高级操作

除了上述基本应用方式和流程之外,这里列举一些扩展的应用方式,通常用于重度的linux终端用户:

  • 会话中创建新会话

在当前会话中,使用"Ctrl-a c"可以创建一个新会话。

  • 顺序切换会话

在当前会话中,使用"Ctrl-a p"或者"Ctrl-a n",可以切换到上一个或者下一个窗口会话。

也可以使用"Ctrl-a"查看所有窗口编号,然后使用"Ctrl-a n"切换到对于窗口。

  • 强行恢复会话

有时候我们会遇到某个会话可能在另一个连接中,已经被使用了,如果尝试恢复,会收到无法恢复的提示信息。这时可以组合使用 -d -r 命令组合使用,先分离会话,然后在当前连接中恢复。好像也可以直接使用 -x 参数。

  • 其他

认真阅读-help信息,可以在其中发现很多有趣的操作选项和操作,但很多功能笔者没有机会实践,读者有兴趣可以自己探索。

相关推荐
hlsd#12 分钟前
go mod 依赖管理
开发语言·后端·golang
陈大爷(有低保)16 分钟前
三层架构和MVC以及它们的融合
后端·mvc
亦世凡华、16 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
河西石头17 分钟前
一步一步从asp.net core mvc中访问asp.net core WebApi
后端·asp.net·mvc·.net core访问api·httpclient的使用
2401_8574396929 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66630 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
阿华的代码王国1 小时前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话
小码编匠1 小时前
领域驱动设计(DDD)要点及C#示例
后端·c#·领域驱动设计
德育处主任Pro2 小时前
『Django』APIView基于类的用法
后端·python·django
哎呦没4 小时前
SpringBoot框架下的资产管理自动化
java·spring boot·后端