如何在 Linux 中使用 screen 命令?

screen 命令是一个终端多路复用器。 它类似于桌面环境的窗口管理器,不同之处在于它在终端内工作。 它可以创建会话和拆分窗口,这是在终端中进行多任务处理的一种非常强大的方式。

安装屏幕命令

screen 命令可以与您正在使用的发行版的默认包管理器一起安装。 以下是在大多数用户使用的两个主要发行版上安装 screen 命令的步骤。

1. 在基于 Debian/Ubuntu 的系统上安装

可以使用 apt 命令安装屏幕命令:

sudo apt install screen 
使用 Apt 安装屏幕

2.安装在RedHat/Fedora 基于系统

默认存储库中不存在屏幕包。 相反,它存在于 EPEL(企业 Linux 的额外包)存储库中。

您需要先添加该 repo,这可以使用 dnf 命令完成:

sudo dnf install epel-release 
添加 EPEL 仓库

然后要安装屏幕,请键入:

sudo dnf install screen 
首先安装使用 dnf 安装 Screen

screen命令的基本用法

在我们开始使用 screen 命令之前,了解一些与之相关的术语会很有用。 在 screen, 一个 会议 是一个虚拟终端的集合 screen 管理。

一个会话可能包含多个 视窗 它们通常是独立的交互式外壳。 一个虚拟终端可以分为 窗格 它们是终端内的矩形区域,由 screen. 这些窗格可以包含一个窗口。

1. 不带参数使用 screen

要使用屏幕只需键入:

screen 

它将启动一个“未命名”会话。 您不会发现与原始提示有任何不同,但 screen 现在正在侦听命令。 紧迫 CTRL + A + ? 调出键绑定 screen

屏幕键绑定屏幕键绑定

如上所示, CTRL + A (有时写成 ^A ) 是“命令键” screen. 按命令键告诉 screen 即将按下的键是一个命令 screen.

(“A”中的 CTRL + A 不是大写的。 你不需要按 Shift 钥匙。 ‘A’ 我指的是小写的 ‘a’,因为手册页和键绑定是这样引用的。 对于其他键,我会明确提到这种情况。)

还有一个类似 vim 的命令模式,可以通过按 CTRL + A +

不同之处在于,必须在命令模式下输入整个命令而不是键盘快捷键。 例如,按 CTRL + A + X (大写的“x”)相当于按下 CTRL + A + 然后打字 remove 在窗格底部提供的提示上。

屏幕命令模式屏幕命令模式

2. 创建命名会话

要创建命名会话,请在 -S 选项后提供会话名称:

screen -S newsession 

3. 在会话中创建一个新窗口

要在会话中创建一个新窗口,请按 CTRL + A + C (小写’c’)。 紧迫 CTRL + A + (双引号)表示可选择的窗口列表。 可以通过按打开一个窗口 Enter 在列表中该窗口的选项上。

窗口列表窗口列表

要更改当前窗口的名称,请按 CTRL + A + A (大写’a’)。 它会在底部显示一个提示。 在那里输入新名称并按 Enter.

给窗户取名给窗户取名

4. 列出活动会话

可能有多个 screen 会议同时进行。 要列出它们,请键入:

screen -ls 
上市会议上市会议

该列表包含会话的 PID(进程 ID),后跟会话名称。 在列表下方是插座数

请注意,此命令是在一个 screen 会话(在括号中附加的那个)。 您可以在屏幕会话中运行屏幕命令!

5. 终止会话

终止会话的方法取决于您是在会话内部还是外部。

在会话之外时 要被杀死,您应该知道会话的名称或会话的 PID。 它们可以从列表中获得 screen -ls.

在知道会话的名称或 PID 后,键入:

screen -X -S 607719 quit 
屏幕终止屏幕终止

上述命令将终止PID为607719的会话,打印 [screen is terminating] 并带您返回到您开始屏幕的提示。

您还可以指定 PID,直到使 PID 唯一的数字为止。 例如,如果有两个 PID 为 699389 和 607719 的会话,并且您想终止 PID 为 607719 的会话,您可以只使用:

screen -X -S 60 quit 

名称也可以进行相同的收缩。

quit 是命令 screen 这会杀死会话。 您可以通过这种方式向会话发送任何命令(有关所有可用命令,请参阅键绑定页面)。

在会话中时, 您可以通过按终止当前会话 CTRL + A + (反斜杠)。

屏幕作为终端多路复用器

screen 是一个终端多路复用器,这意味着您可以将终端水平或垂直拆分为多个窗格。 这些窗格可以进一步水平或垂直拆分。 您需要在屏幕会话中才能执行此操作。

让我们首先通过按下垂直拆分终端 CTRL + A +| (竖线/竖线字符)

垂直拆分 2垂直拆分

窗格的左下角指示窗口编号及其名称。 screen 默认情况下打开一个编号为 0 的窗口。

您可以通过按在窗格之间切换 CTRL + A + Tab . 按那个,你会在右窗格中。 然后,您可以使用可选列表(CTRL + A +") 或者您可以创建一个新的 (CTRL + A + c)。 创建新窗口后,我们的终端如下所示:

多个窗格多个窗格

现在让我们通过按水平拆分 1 号窗口(垂直拆分后创建的新窗口) CTRL + A + S (大写 ‘s’) ,移至新窗格 (CTRL + A +Tab),并创建一个新窗口 (CTRL + A + c)。

我们的终端现在看起来像这样:

水平分割水平分割

要移除窗格,请按 CTRL + A + X (大写的“x”)在那个窗格上。

分离和重新连接

真正的力量 screen 在于它能够脱离和重新连接到会话。 从会话中分离会给你提示从你跑的地方回来 screen. 然后整个会话 在后台运行 有一个 screen 过程。

这在通过 SSH 访问机器时特别有用。 长时间运行的命令可以在屏幕会话中运行 远程机器. 然后我们可以从 screen 会话和安全 close 来自我们的 ssh 会话 本地机器.

然后,我们可以在几个小时后再次通过 SSH 连接到机器,重新连接到屏幕会话。 你会发现命令还在运行! 在正常的 SSH 会话下,该命令会被杀死。

要从会话中分离,请按 CTRL + A + d (小写’d’)。 它将带您进入原始提示。

分离后 1分离后

现在列出屏幕会话:

拆后挂牌拆后挂牌

要重新附加到会话,请键入:

screen -r -S newsession 

如果您设置了任何窗格,它们将消失,您需要根据您的要求再次拆分您的终端。 窗户仍然会在那里。

请注意,这里我使用了会话的名称而不是 PID。

屏幕作为协作工具

令人惊讶的是,Screen 可以用作协作工具。 我将说明如何连接到一个公共 screen 来自两台远程计算机的会话。

假设我想向某人展示如何编辑服务器上的配置文件。 我会创建一个 screen 服务器上的会话:

screen -S newsession 

然后进入命令模式(CTRL + A + :)并输入 multiuser on 并按下 Enter

我会要求其他人以与创建 screen 会话的用户相同的用户登录 来自不同的机器 并输入:

screen -x 
通用屏幕会话通用屏幕会话

右边的终端是想要展示如何编辑配置文件的人。 左侧终端只是反映了右侧终端上所写的内容。 通过这种方式,一个人可以打开 vim 或 nano 并向其他人展示如何编辑文件。

结论

Screen 是一个非常有用的命令,它有助于多任务处理,因为它能够在终端内运行多个交互式 shell。 有关屏幕的更多信息,请查看其手册。