网站搜索

管理 Linux 终端的 20 个 Screen 命令示例


简介:在本指南中,我们将讨论 screen 命令的一些有用示例。在本指南结束时,用户将能够使用单个 Linux 终端窗口处理多个 shell 会话。

作为 Linux 用户,我们经常需要执行长时间运行的任务,例如下载或复制大文件、执行耗时的数据库查询等。有时,这些重要任务会由于会话超时而突然终止。

为了缓解这种情况,我们可以使用 screen 命令,它是一个全屏软件程序,可用于在多个进程(通常是交互式 shell)之间复用物理控制台。它允许用户在单个终端窗口管理器中打开多个单独的终端实例。

如果您要从命令行界面处理多个程序以及将程序与终端 shell 分开,则 screen 应用程序非常有用。它还允许您与其他用户共享您的会话以及分离/附加终端会话。

在本指南中,我们将讨论如何在 Linux 系统上安装、配置和使用 screen 命令。在本指南中,我们将通过实际示例了解 screen 命令的用法和优点。

那么让我们开始吧。

在 Linux 中安装 Screen 命令

在我的 Ubuntu Server Edition 上,默认安装了 screen 命令。但是,Linux Mint默认没有安装screen,所以我需要先使用apt-get命令安装它,然后才能使用它。

请按照您的发行版安装程序来安装屏幕。

sudo apt-get install screen      [On Debian, Ubuntu and Mint]
sudo yum install screen          [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/screen   [On Gentoo Linux]
sudo apk add screen              [On Alpine Linux]
sudo pacman -S screen            [On Arch Linux]
sudo zypper install screen       [On OpenSUSE]    

现在,让我们验证该命令是否已成功安装:

screen --version

Screen version 4.8.00 (GNU) 05-Feb-20

实际上,screen是Linux中一个非常好的终端多路复用程序,它隐藏在数百条Linux命令中。

让我们通过以下示例开始了解 Linux 中 screen 命令的用法。

屏幕命令语法

screen命令的语法如下

screen [OPTIONS] [ CMD [ ARGS ] ]

在上面的语法中,我们可以看到所有参数都是选项,它们由方括号([])表示。

1. 首次启动屏幕

只需在命令提示符下键入屏幕即可。然后屏幕将显示与命令提示符完全相同的界面。

screen

2. 显示屏幕参数

当您进入屏幕时,您可以像在正常命令行环境中一样完成所有工作。但由于屏幕是一个应用程序,因此它有命令或参数。

输入“Ctrl-A”和“?”(不带引号)。然后您将在屏幕上看到所有命令或参数。

要退出帮助屏幕,您可以按“空格键”按钮或“Enter”。 (请注意,所有使用“Ctrl-A”的快捷键都是不带引号的)。

3. 如何列出所有打开的窗口

在前面的示例中,我们使用 screen 命令启动了一个新的 shell 会话。现在让我们使用 ctrl-a + " 组合键列出当前屏幕会话的所有打开的窗口:

在上面的输出中,我们可以看到窗口的编号和名称。第一列代表窗口号,从零开始。

下一列表示窗口的名称,其默认格式为 @:

4. 如何终止屏幕窗口会话

我们可以使用 ctrl-a + k 组合键终止活动窗口会话。需要注意的是,此操作将中断当前虚拟窗口的命令执行。

在上面的输出中,我们可以看到 screen 命令正在等待用户的确认。它在左下角显示警告消息。

就像其他 Linux 命令一样,我们可以使用 'y' 继续操作或使用 'n' 中止操作。

5. 如何使用名称启动屏幕会话

screen 命令允许我们创建一个具有用户定义名称的会话,当有多个会话可用时,这会派上用场。

因此,让我们使用命令的 -S 选项来创建命名会话:

screen -S demo-screen

在上面的命令中,演示屏幕是会话的名称。

6. 使用 Screen 分离终端会话

屏幕的优点之一是您可以将其拆卸。然后,您可以恢复它,而不会丢失您在屏幕上所做的任何操作。这是示例场景:

您正在服务器上使用SSH。假设您正在使用 wget 命令为您的系统下载400MB补丁。

下载过程预计需要2 小时。如果您断开 SSH 会话,或者突然意外丢失连接,则下载过程将停止。你必须重新从头开始。为了避免这种情况,我们可以使用屏幕并将其拆下。

看看这个命令。首先,您必须进入屏幕。

screen

然后你就可以进行下载过程了。例如,在我的 Linux Mint 上,我使用 apt 命令升级我的 dpkg 软件包。

sudo apt install dpkg
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following packages will be upgraded:
  dpkg
1 upgraded, 0 newly installed, 0 to remove and 1146 not upgraded.
Need to get 2,583 kB of archives.
After this operation, 127 kB of additional disk space will be used.
Get:1 http://debian.linuxmint.com/latest/ 
testing/main dpkg i386 1.16.10 [2,583 kB]
47% [1 dpkg 1,625 kB/2,583 kB 47%]     14,7 kB/s

下载过程中,您可以按“Ctrl-A”和“d”。当您按下这些按钮时,您将看不到任何东西。输出将是这样的:

[detached from 5561.pts-0.mint]
pungki@mint ~ $

7. 重新连接带有屏幕的终端会话

分离屏幕后,假设您要断开 SSH 会话并回家。在您的家中,您再次开始通过 SSH 连接到您的服务器,并且您希望查看下载过程的进度。为此,您需要恢复屏幕。您可以运行此命令:

pungki@mint ~ $ screen -r

您将看到您离开的进程仍在运行。

当您有超过1个屏幕会话时,您需要输入屏幕会话ID。使用 screen -ls 查看有多少个屏幕可用。

pungki@mint ~ $ screen -ls
pungki@mint ~ $ screen -ls
There are screens on:
        7849.pts-0.mint (10/06/2021 01:50:45 PM)        (Detached)
        5561.pts-0.mint (10/06/2021 11:12:05 AM)        (Detached)
2 Sockets in /var/run/screen/S-pungki

如果您想恢复屏幕 7849.pts-0.mint,请键入此命令。

pungki@mint ~ $ screen -r 7849

8. 使用多屏幕终端窗口

当您需要1 个屏幕来完成工作时,这可能吗?是的。您可以同时运行多个屏幕窗口。有两(两种)方法可以做到这一点。

首先,您可以分离第一个屏幕并在真实终端上运行另一个屏幕。其次,您进行如图所示的嵌套屏幕。

要创建新窗口,请使用 ctrl-a + c 组合键两次来创建两个新窗口。接下来,让我们使用 ctrl-a + " 组合键列出所有活动窗口:

在上面的输出中,我们可以看到现在有三个窗口。

9. 如何重命名屏幕窗口

在前面的示例中,我们创建了两个新窗口。但是,它们的默认名称并未提供有关它们的任何详细信息。在这种情况下,我们可以给它们指定一些有意义的名称。

我们可以使用 ctrl-a + A 组合键来重命名当前窗口会话。此组合键提示用户设置窗口标题:

10. 屏幕终端窗口之间的切换

在前面的示例中,我们创建了多个窗口。现在让我们看看如何在它们之间进行切换。

首先,让我们使用 ctrl-a + " 组合键列出所有活动窗口。接下来,使用向上或向下箭头键选择适当的窗口。最后,按 Enter 键切换到所选窗口窗户。

在此示例中,我们选择了标题为 - db-query 的窗口。

11. 如何移动到下一个屏幕窗口

我们可以使用 ctrl-a + n 组合键移动到下一个窗口。让我们通过一个例子来理解这一点。

首先,切换到第一个窗口并使用 ctrl-a + " 组合键验证它:

现在,让我们按两次 ctrl-a + n 组合键转到第三个窗口,并使用 ctrl-a + " 组合键进行验证。

在上面的输出中,我们可以看到现在我们位于第三个窗口。

12. 如何移至上一屏幕窗口

类似地,我们可以使用ctrl-a + p组合切换到上一个窗口。

目前,我们正处于第三个窗口。因此,让我们使用 ctrl-a + p 组合键两次并验证我们是否再次位于第一个窗口:

在上面的输出中,我们可以看到现在我们回到了第一个窗口。

13. 如何在当前窗口和上一个窗口之间切换

有时,我们只想在两个窗口之间切换。在这种情况下,我们可以使用 ctrl-a + ctrl-a 组合键。

要理解这一点,首先切换到第一个窗口:

接下来,切换到最后一个窗口:

最后,使用ctrl-a + ctrl-a组合键再次跳转到第一个窗口。

14. 如何跳转到特定屏幕窗口

在前面的示例中,我们看到了在窗口之间切换的各种方法。然而,有时我们想跳转到某个特定的窗口。在这种情况下,我们可以使用窗口号。

首先,我们使用 ctrl-a + " 组合键来查找窗口编号:

在上面的输出中,第一列代表窗口号。需要注意的是,screen 命令从零开始编号。

现在,让我们使用 ctrl-a + 2 组合键跳转到第三个窗口并验证我们是否位于正确的窗口中:

15. 如何水平分割屏幕窗口

就像普通终端一样,我们也可以分割屏幕窗口。我们可以使用 ctrl-a + S 组合键来水平分割窗口。

现在,我们可以使用 ctrl-a + tab 组合键在区域之间跳转。

最后,我们可以使用 ctrl-a + X 组合键来删除当前区域。需要注意的是,这里我们必须使用大写的 X 字符。

16. 如何垂直分割屏幕窗口

同样,我们可以使用 ctrl-a + | 组合键来垂直分割当前窗口:

除此之外,我们还可以使用ctrl-a + tab组合键在区域之间切换以及ctrl-a + X组合键关闭当前区域。

17. 在 Linux 中启用屏幕日志记录

有时,记录您在控制台中所做的事情很重要。假设您是一名管理大量 Linux 服务器的 Linux 管理员

通过此屏幕日志记录,您无需写下已执行的每一条命令。要激活屏幕记录功能,只需按“Ctrl-A”和“H”。 (请小心,我们使用大写“H”字母。使用非大写“h”,只会在另一个名为硬拷贝的文件中创建屏幕截图) 。

在屏幕的左下角,会有一条通知告诉您喜欢:创建日志文件“screenlog.0”。您将在主目录中找到一个 screenlog.0 文件。

此功能将附加您在屏幕窗口中所做的所有操作。要关闭屏幕以记录运行活动,请再次按“Ctrl-A”和“H”。

另一种激活日志记录功能的方法是,您可以在第一次运行屏幕时添加参数“-L”。命令将是这样的。

pungki@mint ~ $ screen -L

18. 锁定 Linux 终端屏幕

屏幕还有一个锁定屏幕的快捷方式。您可以按“Ctrl-A”和“x”快捷键锁定屏幕。如果您想快速锁定屏幕,这会很方便。这是按下快捷键后锁定屏幕的输出示例。

Screen used by Pungki Arianto  on mint.
Password:

您可以使用您的 Linux 密码来解锁它。

19. 为屏幕会话添加密码

出于安全原因,您可能需要将密码输入屏幕会话。每当您想要重新连接屏幕时,都会询问密码。此密码与上面的锁定屏幕机制不同。

要保护屏幕密码,您可以编辑“$HOME/.screenrc”文件。如果该文件不存在,您可以手动创建它。语法将是这样的。

password crypt_password

要创建上面的“crypt_password”,您可以在 Linux 上使用“mkpasswd”命令。这是带有密码“pungki123”的命令。

pungki@mint ~ $ mkpasswd pungki123
l2BIBzvIeQNOs

mkpasswd 将生成一个哈希密码,如上所示。获得哈希密码后,您可以将其复制到“.screenrc”文件中并保存。所以“.screenrc”文件将是这样的。

password l2BIBzvIeQNOs

下次运行屏幕并将其分离时,当您尝试重新连接时,系统会询问密码,如下所示:

pungki@mint ~ $ screen -r 5741
Screen password:

输入您的密码,即“pungki123”,屏幕将再次重新连接

执行此屏幕密码后,按“Ctrl-A”和“x”,则输出将如下所示。

Screen used by Pungki Arianto on mint.
Password:
Screen password:

系统将要求您两次输入密码。第一个密码是您的 Linux 密码,第二个密码是您在 .screenrc 文件中输入的密码。

20. 离开屏幕终端会话

2(两种)方式离开屏幕。首先,我们使用“Ctrl-A”和“d”来分离屏幕。其次,我们可以使用 exit 命令来终止屏幕。您还可以使用“Ctrl-A”和“K”来关闭屏幕。

屏幕命令备忘单

screen -S <session_name>

使用会话名称启动新会话。

screen -ls

列出正在运行的会话/屏幕。

screen -x

附加到正在运行的会话。

screen -r <session_name>

使用名称附加到正在运行的会话。

screen -d <session_name>

分离正在运行的会话。

Ctrl-a c

创建新窗口。

Ctrl-a Ctrl-a

更改为上次访问的活动窗口。

Ctrl-a <number>

按编号更改为窗口。

Ctrl-a ' <number or title>

按编号或名称更改窗口。

Ctrl-a n or Ctrl-a <space>

更改到列表中的下一个窗口。

Ctrl-a p or Ctrl-a <backspace>

更改到列表中的上一个窗口。

Ctrl-a "

请参阅窗口列表。

Ctrl-a w

显示窗口栏。

Ctrl-a k

杀死当前窗口。

Ctrl-a \

杀死所有窗口。

Ctrl-a A

重命名当前窗口。

Ctrl-a S

水平分割显示。

Ctrl-a | or Ctrl-a V

垂直分割显示。

Ctrl-a tab

跳转到下一个显示区域。

Ctrl-a X

删除当前区域。

Ctrl-a Q

删除除当前区域之外的所有区域。

Ctrl-a H

在屏幕会话中启用日志记录。

Ctrl-a x

锁定(密码保护)显示。

这是日常使用的一些屏幕命令。 screen命令内部还有很多功能。您可以查看屏幕手册页以获取更多详细信息。

您知道 Linux 中 screen 命令的任何其他最佳示例吗?请在下面的评论中告诉我们您的观点。