screen 命令是一个终端多路复用器。 它类似于桌面环境的窗口管理器,不同之处在于它在终端内工作。 它可以创建会话和拆分窗口,这是在终端中进行多任务处理的一种非常强大的方式。
安装屏幕命令
screen 命令可以与您正在使用的发行版的默认包管理器一起安装。 以下是在大多数用户使用的两个主要发行版上安装 screen 命令的步骤。
1. 在基于 Debian/Ubuntu 的系统上安装
可以使用 apt 命令安装屏幕命令:
sudo apt install screen
2.安装在RedHat/Fedora 基于系统
默认存储库中不存在屏幕包。 相反,它存在于 EPEL(企业 Linux 的额外包)存储库中。
您需要先添加该 repo,这可以使用 dnf 命令完成:
sudo dnf install epel-release
然后要安装屏幕,请键入:
sudo dnf install 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
+|
(竖线/竖线字符)
窗格的左下角指示窗口编号及其名称。 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’)。 它将带您进入原始提示。
现在列出屏幕会话:
要重新附加到会话,请键入:
screen -r -S newsession
如果您设置了任何窗格,它们将消失,您需要根据您的要求再次拆分您的终端。 窗户仍然会在那里。
请注意,这里我使用了会话的名称而不是 PID。
屏幕作为协作工具
令人惊讶的是,Screen 可以用作协作工具。 我将说明如何连接到一个公共 screen
来自两台远程计算机的会话。
假设我想向某人展示如何编辑服务器上的配置文件。 我会创建一个 screen
服务器上的会话:
screen -S newsession
然后进入命令模式(CTRL
+ A
+ :
)并输入 multiuser on
并按下 Enter
我会要求其他人以与创建 screen 会话的用户相同的用户登录 来自不同的机器 并输入:
screen -x
右边的终端是想要展示如何编辑配置文件的人。 左侧终端只是反映了右侧终端上所写的内容。 通过这种方式,一个人可以打开 vim 或 nano 并向其他人展示如何编辑文件。
结论
Screen 是一个非常有用的命令,它有助于多任务处理,因为它能够在终端内运行多个交互式 shell。 有关屏幕的更多信息,请查看其手册。