Linux Screen 命令

17 Mar 2025 | 6 分钟阅读

有时我们会遇到执行一个长时间运行的操作来移除机器,但连接突然断开了的情况。在这种情况下,SSH 会话会终止,我们的工作也会丢失。

不过,这种情况对我们每个人都发生过。但是,有一个命令叫做 screen,它允许我们恢复会话。

Screen 命令概述

Linux 中,screen 命令允许通过单个 SSH 会话启动和使用多个 shell 会话。这个过程可以被分离出当前会话。如果进程是从 screen 命令开始的,那么之后我们可以重新连接到该会话。

最初,从 screen 开始的进程将由 screen 管理和运行,即使会话被分离。之后,进程可以重新连接到该会话,终端会像离开时一样。

GNU screen 或简称为 screen 可以被定义为终端复用器。此外,这意味着我们可以启动一个 screen 会话,然后在该会话中打开多个窗口(虚拟窗口)。

在 screen 中运行的许多进程,即使窗口没有被清除,在断开连接后也会继续执行。

Screen 命令语法

Screen 命令选项

  • -a: 它会将所有能力强制写入每个窗口的 termcap。
  • -A -[r | R]: 它会适应每个窗口到新的显示高度和宽度。
  • -c file: 它会读取配置文件而不是 '.screenrc'
  • -d (-r): 它会分离一个正在其他地方运行的 screen 会话。
  • -dmS name: 它会以“在分离模式下启动 Screen 会话”的方式开始。
  • -D (-r): 它会支持远程分离和注销。
  • -D -RR: 它会执行任何必要的操作来获取 screen 会话。
  • -e xy: 它会修改命令的字符。
  • -f: 它有助于关闭流控制,-fn = off, -fa = auto。
  • -h lines: 它会设置滚动历史缓冲区大小。
  • -i: 如果流控制处于活动状态,它会更早地中断结果。
  • -l: 它有助于打开登录模式(更新 /var/run/utmp), -ln = off。
  • -ls [match]: 它会显示所有已连接的 screen 会话。
  • -L: 它会开启输出日志记录。
  • -m: 它会忽略 $STY 变量并创建一个新的 screen 会话。
  • -O: 它会选择最佳输出而不是 vt100 仿真(精确)。
  • -p window: 它会在可用时预选一个命名窗口。
  • -q: 它会安静地启动。如果失败,它会以非零返回码退出。
  • -Q: 它有助于将查询进程的回复发送到 stdout。
  • -r [session]: 它会重新连接到一个已分离的 screen 会话。
  • -R: 它会在可能的情况下重新连接,否则启动一个新的 screen 会话。
  • -S (sockname): 它会将会话命名为 .sockname 而不是...
  • -t (title): 它会设置窗口的标题(名称)。
  • -T (term): 它使用 term 作为窗口的 $TERM 而不是 "screen"
  • -U: 它告诉 screen 使用 UTF-8 编码。
  • -v: 它会打印 "Screen version 4.06.02 (GNU) 23-Oct-17"。
  • -x: 它会连接到一个未分离的 screen 会话。它定义了显示的“多模式”。
  • -X: 它会在指定的会话中作为 screen 命令执行。

快捷键选项

  • Ctrl-a + c: 这个快捷键会创建一个新的窗口。
  • Ctrl-a + w: 这个快捷键会显示当前打开的所有窗口列表。
  • Ctrl-a + A 这个快捷键会重命名当前窗口。当你使用 Ctrl-a + w 列出打开的窗口时,这个名字会显示出来。
  • Ctrl-a + p: 它会切换到上一个窗口。
  • Ctrl-a + n: 这个快捷键会切换到下一个窗口。
  • Ctrl-a + Ctrl-a: 它会切换回上一个使用的窗口。
  • Ctrl-a + k: 这个快捷键会关闭当前窗口。
  • Ctrl-a + S: 它会将当前窗口水平分割。要切换多个窗口,你可以使用 Ctrl-a + Tab。
  • Ctrl-a + |: 它会将当前窗口垂直分割。
  • Ctrl-a + d: 这个快捷键会在不终止的情况下分离 screen 会话。
  • Ctrl-a + r: 它会重新连接一个已分离的 screen 会话。
  • Ctrl-a + [: 这个快捷键会启动复制模式。
  • Ctrl-a + ]: 它会粘贴(复制的)文本。

Screen 命令示例

1. 检查 screen 版本

在大多数 Linux 发行版中,screen 命令的包是预装的。我们可以通过输入以下命令来检查它是否已安装在我们的系统中:


Linux Screen Command

如果我们系统中还没有安装 screen 包,我们可以轻松地通过发行版的包管理器来安装它。

2. 安装 screen 命令

我们需要打开终端并输入以下命令来安装 screen 命令:


Linux Screen Command

如果你使用的是 Fedora 和 CentOS,可以使用以下命令安装 screen 命令:

3. screen

这个命令会在 screen 中启动一个新的窗口。


Linux Screen Command

4. -S

这个命令会在 screen 中启动一个新的窗口,并为我们的窗口提供一个名称。它会创建一个用该特定名称识别的会话。以后可以用该名称重新连接 screen。


Linux Screen Command

启动命名会话

当我们运行多个 screen 会话时,命名会话非常有用。我们需要执行 screen 命令以及以下参数来创建一个命名会话:


Linux Screen Command
Linux Screen Command

始终选择一个描述性的会话名称是一个好主意。

5. -ls

它用于显示当前打开的 screen,包括那些在后台运行的。此命令将列出所有已连接和已分离的 screen 会话。


Linux Screen Command

6. -d

它用于分离一个 screen 会话,以便以后可以重新连接。它也可以通过 Ctrl-a + d 快捷键实现。


Linux Screen Command
Linux Screen Command

这里的 4774 是我们要分离的 screen 的 ID。

7. -r

它用于重新连接一个先前已分离的 screen 会话。


Linux Screen Command

8. 自定义 Linux screen

当 screen 启动时,它会通过 ~/ .screenrc 和 /etc/screenrc(如果文件存在)读取配置参数。我们可以使用 .screenrc 文件根据我们的偏好更改 screen 的默认设置。

9. 切换屏幕

当我们运行嵌套的 screen 时,我们可以使用 "Ctrl-A" 命令和 "n" 来切换屏幕。它会移动到下一个屏幕。要切换到上一个屏幕,只需点击 "Ctrl-A""p"

要创建一个新的 screen 窗口,只需点击 "Ctrl-A""c"

10. 使用多个 screen

当我们为了工作需要多个 screen 时,我们可以一次运行多个 screen 窗口。我们可以通过两种方式实现。

首先,我们可以分离初始 screen,然后在实际终端上执行另一个 screen。其次,我们进行嵌套 screen。

11. 记录我们所做的一切

有时有必要记录我们在控制台中执行的操作。例如,我们是处理各种 Linux 服务器的 Linux 系统管理员。使用 screen 日志记录,我们就无需写下我们执行的每一个命令。要激活 screen 日志记录功能,我们需要点击 "Ctrl-A""H"

注意:使用 'H' 字母时要小心,因为 'h' 只会将屏幕的截图保存到另一个名为 hardcopy 的文件中。

在 screen 的左下角,会有一个通知,提示我们:“正在创建日志文件 screenlog.0”。我们会在主目录中找到 screenlog.0 文件。

这个优点是记录我们在 screen 窗口内执行的所有操作。要关闭 screen 的活动日志记录,我们需要再次点击 "Ctrl-A""H"。激活此日志记录功能的其他方法是,在第一次运行 screen 时包含 "-L" 参数。

该命令如下:

我们可以使用以下命令查看 screen 命令的手册页:


Linux Screen Command

我们可以使用以下命令查看 screen 命令的帮助页面:


Linux Screen Command