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信息,可以在其中发现很多有趣的操作选项和操作,但很多功能笔者没有机会实践,读者有兴趣可以自己探索。

相关推荐
北冥you鱼28 分钟前
Go 语言读取链上数据:从基础到实战
开发语言·后端·golang
程序员cxuan1 小时前
Claude Code 为了封禁中国用户,竟然在代码里下毒
人工智能·后端·程序员
郡杰1 小时前
Git基础与开发平台搭建
git·后端
ServBay1 小时前
MCP (Model Context Protocol) 深度指南,协议原理、Python 实现与生产级安全实践
后端·ai编程·mcp
道友可好1 小时前
Claude Code 泄露源码里的 89 个秘密
前端·人工智能·后端
用户8356290780512 小时前
使用 Python 保护和取消保护 Excel 工作表和工作簿
后端·python
Java面试题总结2 小时前
CubeSandbox 实战:从零部署到快照/克隆/回滚全体验
后端
Csvn3 小时前
Python 开发技巧:函数式编程与 lambda 进阶
后端
考虑考虑3 小时前
nginx配置ssl
运维·后端·nginx
uhakadotcom3 小时前
Python 中,`None` 不等于 `False`导致的问题
后端·面试·github