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

相关推荐
uzong13 分钟前
技术故障复盘模版
后端
GetcharZp40 分钟前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程1 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研1 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi1 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack3 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9654 小时前
pip install 已经不再安全
后端
寻月隐君4 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github