如何使用Linux screen命令

时间:2020-03-05 15:29:23  来源:igfitidea点击:

Linux中的Screen命令允许用户创建多个虚拟终端,这些虚拟终端可以按名称保存并使用键盘快捷键重新打开。

我们是否应该考虑使用screen来改善工作流程?
让我们看一下我们可能要尝试的一些原因。

如果我们在终端上花费大量时间,则可能会发现自己一次使用多个终端来执行不同的任务。

例如,我们可以通过SSH登录到远程服务器并其中执行一些任务。
同时,在本地系统上工作时,我们可能希望保持服务器内存和CPU利用率的标签。

使用“screen”,我们可以从一个“screen”中完成所有操作。
我们可以将正在运行的进程和会话发送到后台,而不会中断当前的工作流程。

在Linux发行版上安装screen

首先,我们要查看该软件是否已包含在Linux发行版中。
许多现代发行版都包含它,但通常安装起来很容易。

我们可以通过运行以下命令查看是否已安装:

screen --version

我正在使用Pop OS,它是使用apt软件包管理器的Debian衍生版本。
screen默认情况下未安装,因此我将输入:

sudo apt install screen

如果我们使用其他程序包管理器,则此命令显然可能会有所不同。

screen中的按键绑定

screen相当易于使用,但是对于新用户而言,它仍然有些令人困惑,特别是因为它完全依赖于终端中的键盘快捷键。

我创建了一个表格来解释一些基本功能。
我们也可以访问快捷键screen以获取完整列表。

作用快捷键
Detach Screen[ctrl + a] + d
Quit/Kill Screen[ ctrl + a ] + k
Switch to Next[ ctrl + a ] + n
Switch to Previous[ ctrl + a ] + p
All Keybindings[ ctrl + a ] + ?

我们不会一次按下所有键。
相反,我们将按[ctrl + a],然后按“指定的键”。

请务必注意,这些快捷方式区分大小写。
像linux上的大多数东西一样,它们也可以被定制。
这可以通过编辑.screenrc文件来实现,该文件通常可以在/etc/screenrc中找到。

如何在Linux中使用Screen

我将以一种易于遵循的线性方法研究这些常见的管理任务。
在演示功能时,这将有效地使我们坐在驾驶员席上。

开始并命名会话

我们可以启动screen并应用一个令人难忘的名称。

screen -S top

在本例中,我创建了一个名为top的名称(不要将其与命令top混淆,可以将其命名为任何名称)。
它会自动启动命名的会话,我可以完成所需的任何任务。

我将启动top命令的一个实例。
然后,我将使用键盘快捷键[ctrl + a] + d来分离它。
Top将继续在后台运行,但我又回到了screen应用程序。

从其中我可以开始另一个会话。
我们称其为“免费”(因为我将在此处使用免费命令,但可以将其命名为session2等),然后输入:

watch free

结合使用watch命令和free命令,我们可以不断监视内存使用情况。

Every 2.0s: free                                                  pop-os: Sun Dec 22 02:25:32 2019
              total        used        free      shared  buff/cache   available
Mem:       32596848     5500212    22689952      894876     4406684    25801480
Swap:             0           0           0

使用键盘快捷键[ctrl + a] + d再次分离。
因此,我们现在有两个正在后台运行的进程。

我们如何返回到流程进行检查?
我会向我们解释。

快速重新连接

我们可以使用会话名称轻松地通过选项-r重新添加screen。

screen -r free

我们可以在上面看到它的作用。
如果我们没有获得相同的结果,则可能是在命名会话时(或者一起忘记了)时出错了。
这没什么可惊慌的。

列出screen中的所有会话

我们可以使用以下命令列出所有打开的screen会话。

screen -ls

由于我再次分离了免费会话以输入该会话,因此得到以下输出:

使用PID重新连接

如果我们没有命名会话,则可以通过分配的PID和计算机ID来识别会话。
我们可以使用进程ID(PID)来访问所需的screen,就像命名会话一样。

screen -r 685

这是与我命名为“免费”的screen相关的PID。

关闭screen

我们可以使用[ctrl + a + k]取消活动screen。
一条消息将显示在左下角,并带有确认提示。
输入“ y”退出会话。
片刻之后,我们将看到类似以下的内容:

Hyman@theitroad:~$screen -r free
[screen is terminating]

我们可以通过再次列出所有带有-ls的会话来进行确认。

如我们所见,“免费screen会话”不再处于活动状态。

一次查看多个终端窗口

真正使screen不可或者缺的是能够将终端在一个会话中水平或者垂直排列地分成多个窗口的能力。

screen将使用活动区域执行拆分功能并创建screen功能。
创建拆分后,它将成为活动区域。
但是,我们可能会发现我们无法在活动窗口中输入任何内容。
为此,我们需要创建一个screen。
我们可以使用[ctrl + a] + c初始化shell。

还有更多键盘快捷键对于管理和导航终端窗口必不可少:

FunctionShortcutSplit水平(左/右)[ctrl + a] +S垂直分割(顶部/底部)[ctrl + a] +|创建screen/启动Shell [ctrl + a] +c通过窗口ID切换[ctrl + a] +01等,重命名窗口[ctrl + a] +A关闭活动窗口[ctrl + a] +X关闭所有非活动窗口[ctrl + a] +Q切换到下一个窗口[ctrl + a] +[tab]

随意创建我们自己的安排并进行探索。
我们可以分成多个会话,但我发现,就我个人而言,超出象限的任何内容都会使文本难以阅读。

在表中,我们可以看到重命名窗口的选项。
这与我们先前使用screen -S [name]执行的screen命名不同。
我们会在左下角看到窗口名称。
我们可以通过输入“ [ctrl + a] + [“]”来获取带有相应名称和ID的窗口列表。