管理多个终端会话的屏幕命令示例

在本指南中,我们将通过 Linux 和 Unix 操作系统中的示例了解什么是 GNU Screen 以及 Screen 命令的基本用法。

什么是 GNU 屏幕?

GNU 屏幕 是一个终端多路复用器(窗口管理器)。 顾名思义,Screen 在多个交互 shell 之间多路复用物理终端,因此我们可以在每个终端会话中执行不同的任务。

所有屏幕会话完全独立地运行它们的程序。 因此,即使会话意外关闭或断开,在屏幕会话中运行的程序或进程仍将继续运行。

例如,当 升级 Ubuntu 服务器通过 SSH,Screen 命令将继续运行升级过程,以防您的 SSH 会话因任何原因终止。

GNU Screen 允许我们轻松地创建多个屏幕会话、在不同会话之间切换、在会话之间复制文本、随时附加或分离会话等等。

GNU Screen 是每个 Linux 管理员都应该学习和在必要时使用的重要命令行工具之一。

让我们看看如何在 Linux 中使用 Screen 命令和示例来管理多个终端会话。

在 Linux 中安装 GNU Screen

GNU Screen 在大多数 Linux 操作系统的默认存储库中都可用。

要在 Arch Linux、EndeavourOS、Manjaro Linux 上安装 GNU Screen,请运行:

$ sudo pacman -S screen

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install screen

在 Fedora、RHEL、CentOS。 AlmaLinux、洛基 Linux:

$ sudo dnf install screen

或者,

$ sudo yum install screen

在 CentOS 8 上,Screen 在官方存储库中不可用。 所以你需要启用 [EPEL] 存储库,然后安装屏幕。

$ sudo dnf install epel-release
$ sudo dnf install screen

在 SUSE/openSUSE 上:

$ sudo zypper install screen

让我们继续看一些屏幕命令示例。

屏幕命令示例

Screen 中所有命令的默认前缀快捷方式是 Ctrl+a. 使用 Screen 时,您需要经常使用此快捷方式。 所以,只要记住这个键盘快捷键。

创建新的屏幕会话

让我们创建一个新的 Screen 会话并附加到它。 为此,请在终端中键入以下命令:

screen

现在,在此会话中运行任何程序或进程。 即使您与此会话断开连接,正在运行的进程或程序也将继续运行。

从屏幕会话中分离

要从屏幕会话中分离,请按 Ctrl+ad. 您不必同时按下两个组合键。 第一次按下 Ctrl+a 然后按 d. 从会话中分离后,您将看到如下所示的输出。

[detached from 29149.pts-0.sk]

这里, 29149 是个 屏幕标识pts-0.sk 是屏幕会话的名称。 您可以使用屏幕 ID 或相应会话的名称附加、分离和终止屏幕会话。

创建命名会话

您还可以使用您选择的任何自定义名称创建屏幕会话,而不是默认用户名,如下所示。

screen -S ostechnix

上面的命令将创建一个新的屏幕会话,名称为 “xxxxx.ostechnix” 并立即附上它。 要从当前会话中分离,请按 Ctrl+a 其次是 d.

当您想要查找哪些进程在哪些会话上运行时,命名屏幕会话会很有帮助。 为了 example,当在会话中设置 LAMP 堆栈时,您可以简单地将其命名如下。

screen -S lampstack

创建分离会话

有时,您可能想创建一个会话,但不想自动附加它。 在这种情况下,运行以下命令来创建名为 “森提尔”

screen -S senthil -d -m

或者,很快:

screen -dmS senthil

上面的命令将创建一个名为“senthil”的会话,但不会附加到它。

列表屏幕会话

要列出所有正在运行的会话(附加或分离),请运行:

screen -ls

样本输出:

There are screens on:
    29700.senthil   (Detached)
    29415.ostechnix (Detached)
    29149.pts-0.sk  (Detached)
3 Sockets in /run/screens/S-sk.

如您所见,我有三个正在运行的会话,并且都是分离的。

如果没有正在运行的屏幕会话,您将输出如下所示。

No Sockets found in /run/screen/S-sk.

附加到屏幕会话

如果您想随时附加到会话,对于 example 29415.ostechnix,只需运行:

screen -r 29415.ostechnix

或者,

screen -r ostechnix

或者,只需使用屏幕 ID:

screen -r 29415

要验证我们是否附加到上述会话,只需列出打开的会话并检查。

screen -ls

样本输出:

There are screens on:
        29700.senthil   (Detached)
        29415.ostechnix (Attached)
        29149.pts-0.sk  (Detached)
3 Sockets in /run/screens/S-sk.

正如您在上面的输出中看到的,我们当前连接到 29415.ostechnix 会议。 要退出当前会话,请按 ctrl+a、d。

创建嵌套会话

当我们运行“screen”命令时,它会为我们创建一个会话。 但是,我们可以创建嵌套会话(会话中的会话)。

首先,创建一个新会话或附加到打开的会话。 我将创建一个名为“nested”的新会话。

screen -S nested

现在,按 Ctrl+aC 在会话内部创建另一个会话。 只需重复此操作即可创建任意数量的嵌套 Screen 会话。 每个会话都将分配一个编号。 号码将从 0.

您可以通过按移动到下一个会话 Ctrl+n 并通过按移动到上一个 Ctrl+p.

以下是管理嵌套会话的重要键盘快捷键列表。

  • Ctrl+a” – 列出所有会话
  • Ctrl+a 0 – 切换到会话号 0
  • Ctrl+an – 切换到下一个会话
  • Ctrl+ap – 切换到上一个会话
  • Ctrl+a S – 将当前区域水平拆分为两个区域
  • Ctrl+al – 将当前区域垂直拆分为两个区域
  • Ctrl+Q – 关闭除当前会话之外的所有会话
  • Ctrl+a X – 关闭当前会话
  • Ctrl+a – 杀死所有会话并终止屏幕
  • Ctrl+a ? – 显示键绑定。 要退出此操作,请按 ENTER。

锁定会话

Screen 具有锁定屏幕会话的选项。 为此,请按 Ctrl+aX. Enter 锁定屏幕的 Linux 密码。

Screen used by sk <sk> on ubuntuserver.
Password:

记录会话

您可能希望在 Screen 会话中记录所有内容。 为此,只需按 Ctrl+aH.

或者,您可以在启动新会话时使用 -L 范围。

screen -L

从现在开始,您在会话中完成的所有活动都将记录并存储在一个名为 屏幕日志.x 在您的 $HOME 目录中。 这里, X 是一个数字。

您可以使用查看日志文件的内容 命令或任何文本查看器应用程序。

记录屏幕会话

建议阅读:

  • 如何记录您在终端中所做的一切

自动启动屏幕会话

通过 SSH 运行长时间运行的进程时,自动启动 Screen 会话将有很大帮助。 如果您由于某种原因失去了网络连接,该进程将继续在远程系统的 Screen 会话中运行,您可以在网络恢复联机时重新连接到它。 要了解如何在系统启动时自动启动屏幕,请参阅以下链接。

  • 登录时如何在 Linux 上自动启动屏幕会话

检查您是否是 Screen 会话

您可能已经注意到,正常会话和屏幕会话看起来完全一样。 无论您是在 Screen 会话中还是在正常会话中,您都不会看到任何明显的迹象。 要知道您是否在 Screen 会话中,请按照以下链接中给出的步骤操作。

  • 如何检查您是否在屏幕会话中或不在 Linux 中

杀死屏幕会话

如果不再需要会话,只需将其杀死。 要终止名为“senthil”的分离会话:

screen -r senthil -X quit

或者,

screen -X -S senthil quit

或者,

screen -X -S 29415 quit

如果没有打开的会话,您将看到以下输出:

$ screen -ls
No Sockets found in /run/screens/S-sk.

有关更多详细信息,请参阅手册页。

$ man screen

还有一个类似的命令行实用程序,名为 “Tmux” 它的作用与 GNU Screen 相同。 要了解更多信息,请参阅以下指南。

  • 管理多个终端会话的 Tmux 命令示例

资源: