Screen命令示例以管理多个终端会话
GNU Screen是终端多路复用器(窗口管理器)。
如名称所说, Screen将物理终端复用在多个交互式shell之间,因此我们可以在每个终端会话中执行不同的任务。
所有 Screen会话都完全独立运行他们的程序。
因此,即使会话意外关闭或者断开, Screen会话中运行的程序或者进程也会继续运行。
例如,在通过SSH升级Ubuntu Server时, Screen命令将继续运行升级过程,以防SSH会话因任何原因终止。
GNU Screen允许我们轻松创建多个 Screen会话,在不同的会话之间切换,在会话之间复制文本,随时从会话添加或者分离。
它是每个Linux管理员的重要命令行工具之一,每个Linux管理员都应该在必要时学习和使用。
在此简要教程中,我们将在Linux中查看 Screen命令的基本用法。
安装GNU Screen
GNU Screen可在大多数Linux操作系统的默认存储库中提供。
要在Arch Linux上安装GNU Screen,请运行:
$sudo pacman -S screen
在Debian,Ubuntu,Linux Mint:
$sudo apt-get install screen
关于Fedora:
$sudo dnf install screen
在Rhel,Centos:
$sudo yum install screen
在CentOS 8上,官方存储库中不可用。
因此,我们需要启用[EPEL]存储库,然后安装 Screen。
$sudo dnf install epel-release
$sudo dnf install screen
在SUSE/OpenSUSE上:
$sudo zypper install screen
让我们继续查看某些 Screen命令示例。
Screen命令示例以管理多个终端会话
Screen中所有命令的默认前缀快捷方式是CTRL + A.使用 Screen时需要使用此快捷方式。
所以,只需记住这个键盘快捷方式。
创建新 Screen会话
让我们创建一个新的 Screen会话并添加到它。
为此,请在终端中键入以下命令:
screen
现在,在本次会话中运行任何程序或者进程。
即使我们与此会话断开连接,运行进程或者程序也会继续运行。
从 Screen程序中分离
从 Screen会话中分离,按Ctrl + A和D。
我们不必同时按下两个关键组合。
首先按Ctrl + A,然后按D.从会话分离后,我们将看到如下所示的输出。
[detached from 29149.pts-0.sk]
其中29149是 ScreenID和PTS-0.SK是 Screen会话的名称。
我们可以使用 ScreenID或者相应会话的名称添加,分离和杀死 Screen会话。
创建一个命名会话
我们还可以创建一个 Screen会话,其中包含我们选择的任何自定义名称,而不是如下面的默认用户名。
screen -S theitroad
上面的命令将创建一个名称"xxxxx.theitroad"的新 Screen会话,并立即添加到它。
要从当前会话中分离,按Ctrl + A后跟D。
命名 Screen会话当我们希望在哪个会话上找到运行的进程时,可以有用。
例如,当会话中的设置灯堆栈时,我们可以简单地将其命名为下面。
screen -S lampstack
创建独立的会话
有时,我们可能希望创建一个会话,但不希望自动添加它。
在这种情况下,运行以下命令以创建名为"senthil"的分离会话:
screen -S senthil -d -m
或者,简短形式:
screen -dmS senthil
上面的命令将创建一个名为"secthil"的会话,但不会添加到它。
列出 Screen会话
要列出所有正在运行的会话(添加或者分离),请运行:
screen -ls
示例输出:
There are screens on: 29700.senthil (Detached) 29415.theitroad (Detached) 29149.pts-0.sk (Detached) 3 Sockets in /run/screens/S-sk.
正如我们所看到的,我有三个正在运行的会话,所有这些都是分离的。
如果没有运行 Screen会话,则将如下所示的输出。
No Sockets found in /run/screen/S-sk.
附加到Screen会话
如果要随时将其添加到会话,例如29415.theitroad,只需运行:
screen -r 29415.theitroad
或者,
screen -r theitroad
或者,只需使用 ScreenID:
screen -r 29415
要验证我们是否已添加到上述会话,只需列出开放会话并检查。
screen -ls
示例输出:
There are screens on: 29700.senthil (Detached) 29415.theitroad (Attached) 29149.pts-0.sk (Detached) 3 Sockets in /run/screens/S-sk.
如上所述,我们目前已添加到29415.theitroad会话。
要退出当前会话,请按Ctrl + A,D。
创建嵌套会话
运行" Screen"命令时,它将为我们创建单个会话。
但是,我们可以创建嵌套会话(会话中的会话)。
首先,创建新会话或者添加到已打开的会话。
我打算创建一个名为"嵌套"的新会话。
screen -S nested
现在,按会话内的Ctrl + A和C键以创建另一个会话。
只需重复此操作即可创建任意数量的嵌套 Screen会话。
每个会话都将分配一个数字。
数字将从0开始。
我们可以通过按Ctrl + N来移动到下一个会话,然后按Ctrl + P移动到以前。
以下是管理嵌套会话的重要键盘快捷键列表。
- Ctrl + a" - 列出所有会话
- Ctrl + A 0 - 切换到会话编号0
- Ctrl + A n - 切换到下一个会话
- Ctrl + A P - 切换到上一个会话
- Ctrl + S - 将电流区域水平分为两个区域
- Ctrl +一个L - 垂直分为两个区域
- Ctrl + A Q - 关闭除了当前的所有会话
- Ctrl + A X - 关闭当前会话
- Ctrl + a \ - 杀死所有会话并终止 Screen
- ctrl + a? - 显示钥匙束。要退出此功能,请按Enter键。
锁定会话
Screen可以选择锁定 Screen会话。
为此,请按Ctrl + A和x。
输入Linux密码以锁定 Screen。
Screen used by sk <sk> on ubuntuserver. Password:
记录会话
我们可能希望在 Screen会话中记录所有内容。
为此,只需按Ctrl + A和H.
或者,我们可以使用-l参数启动新会话时启用日志记录。
screen -L
从现在开始,我们在会话中完成的所有活动都将录制并存储在$Home目录中名为screenlog.x的文件中。
其中x是一个数字。
我们可以使用CAT命令或者任何文本查看器应用程序查看日志文件的内容。
自动启动 Screen会话
通过SSH运行长期运行过程时,自动启动 Screen会议将极大地帮助。
如果由于任何原因丢失了网络连接,则该过程将继续在远程系统中的 Screen会话内运行,并且在网络返回时,我们可以重新连接到它。
要知道如何在系统启动时自动启动 Screen,请参阅以下链接。
- 登录时如何在Linux上自动启动 Screen会话
检查我们是否在 Screen会话中
正如我们所知,正常会话和 Screen会话看起来完全相同。
无论我们是 Screen会话还是正常会话,我们都不会看到任何明显的指示。
要知道我们是否在 Screen会话中,请按照以下链路中给出的步骤进行操作。
- 如何检查我们是否在Linux中的 Screen会话
杀死 Screen会话
如果不再需要会话,只需杀死它。
杀死名为"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页面。
$man screen
还有一个类似的命令行实用程序名为"tmux",它与GNU Screen相同。
要了解更多信息,请参阅以下教程。
- tmux命令示例以管理多个终端会话