如何使用 Linux 的 screen 命令

已发表: 2022-01-29
笔记本电脑上的 Linux 终端,其后叠加了其他终端会话。
fatmawati achmad zaenuri/Shutterstock

使用 Linux screen命令,您可以将正在运行的终端应用程序推送到后台,并在您想要查看它们时将它们拉到前面。 它还支持分屏显示并通过 SSH 连接工作,即使在您断开并重新连接之后!

相关: 10 个适合初学者的基本 Linux 命令

什么是屏幕命令?

screen命令是一个终端多路复用器,它绝对包含选项。 说它可以做很多事情是轻描淡写的祖父。 手册页长达 4,100 多行。

以下是使用screen命令的最常见情况,我们将在本文中进一步介绍:

  • 标准操作是创建一个包含 shell 的新窗口,运行命令,然后将窗口推送到后台(称为“分离”)。 当您想查看您的进程是如何进行时,您可以再次将窗口拉到前台(“重新附加”)并再次使用它。 这对于您不想通过关闭终端窗口意外终止的长进程非常有用。
  • 运行screen会话后,您可以创建新窗口并在其中运行其他进程。 您可以轻松地在窗口之间切换以监控它们的进度。 您还可以将终端窗口拆分为垂直或水平区域,并在一个窗口中显示各种screen窗口。
  • 您可以连接到远程机器、启动screen会话并启动进程。 您可以断开与远程主机的连接,重新连接,您的进程仍将运行。
  • 您可以在两个不同的 SSH 连接之间共享screen会话,以便两个人可以实时看到相同的内容。

安装屏幕

要在 ubuntu 上安装screen ,请使用以下命令:

 sudo apt-get 安装屏幕

要在 Manjaro 上安装screen ,请使用以下命令:

 sudo pacman -Sy 屏幕

在 Fedora 上,您键入以下内容:

 sudo dnf 安装屏幕

屏幕入门

要启动screen ,只需按如下所示键入并按 Enter 键:

 屏幕

您将看到一个许可证信息页面。 您可以按空格键阅读第二页或按 Enter 返回命令提示符。

广告

您将留在命令提示符下,似乎没有发生任何事情。 但是,您现在正在多路复用终端仿真器中运行 shell。 为什么这是一件好事? 好吧,让我们开始一个需要很长时间才能完成的过程。 我们将下载最新 Linux 内核的源代码并将其重定向到一个名为latest_kernel.zip的文件中。

为此,我们键入以下内容:

 卷曲 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip 

我们的下载开始了, curl输出显示了我们的进度。

我们无法向您展示下一位的图像,因为它是一个击键序列。 您键入 Ctrl+A,释放这些键,然后按 d 分离屏幕。

下载过程仍在运行,但显示下载的窗口已删除。 您将返回到您启动screen会话的终端窗口。 一条消息告诉您标记为23167.pts-0.howtogeekscreen窗口已被分离。

您需要窗口名称开头的数字才能重新附加它。 如果忘记了,可以随时使用-ls (list) 选项,如下所示,获取分离窗口的列表:

 屏幕-ls 

准备好后,您可以使用-r (重新附加)选项和会话数重新附加它,如下所示:

 屏幕-r 23167 

广告

一直在后台工作的窗口现在被带回您的终端窗口,就好像它从未离开过一样。

重新连接的屏幕会话恢复到终端窗口。

如果它是一个将贯穿其结论的过程,它最终将完成。 如果它是一个持续的过程,您最终会想要终止它。 无论哪种方式,当进程结束时,您都可以键入exit以退出screen 。 或者,您可以按 Ctrl+A,然后按 K 强行杀死一个窗口。

键入以下命令:

 出口

您将返回到之前的终端窗口,该窗口仍将显示您用于重新连接窗口的命令。 因为我们关闭了唯一的分离窗口,所以我们收到一条消息, screen正在终止。

相关:如何使用 curl 从 Linux 命令行下载文件

使用命名屏幕会话

您可以使用-S (会话名称)选项来命名您的screen会话。 如果您使用易于记忆的名称而不是会话的数字标识,则重新连接到会话会更方便。 我们键入以下内容将我们的会话命名为“bigfile”:

 屏幕 -S 大文件

screen启动我们的会话时,我们会看到一个带有命令提示符的空白窗口。 我们将下载一个大文件,因此我们可以使用一个长时间运行的进程作为示例。

我们输入以下内容:

 卷曲 http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip 

下载开始时,我们按 Ctrl+A,然后按 D 分离会话。 我们键入以下内容以使用带有screen-ls (列表)选项来查看分离会话的详细信息:

 屏幕-ls 

广告

在数字标识符 (23266) 后面,我们看到了会话的名称 (bigfile)。 我们键入以下内容,包括会话的名称,以重新附加它:

 屏幕 -r 大文件

我们重新连接到我们的下载窗口,看到长时间的下载仍在进行中。

下载完成后,我们键入exit关闭会话窗口。

在多个窗口中使用屏幕

到目前为止,我们已经使用screen将单个进程放置在背景中的分离窗口中。 然而, screen能做的远不止这些。 接下来,我们将运行一些允许我们监控计算机某些方面的进程。

我们输入以下内容来启动一个名为“monitor”的屏幕会话:

 屏幕 -S 显示器

广告

在新窗口会话的命令提示符下,我们将启动dmesg并使用-H (人类可读)和-w (等待新消息)选项。 这将显示内核缓冲区消息; 新消息将在出现时出现。

我们输入以下内容:

 dmesg -H -w 

出现现有消息。 我们没有返回命令提示符,因为dmseg正在等待新消息,并将在它们到达时显示它们。

相关:如何在 Linux 上使用 dmesg 命令

我们想运行另一个应用程序,所以我们需要一个新的screen窗口。 我们按 Ctrl+A,然后按 C 来创建一个新窗口。 我们将使用watch重复运行vmstat ,因此我们会经常更新显示计算机上的虚拟内存使用情况。

在新的命令提示符下,我们键入以下内容:

 观看 vmstat 

vmstat输出出现并每两秒更新一次。

我们的两个进程现在正在运行。 要在screen窗口之间跳转,请按 Ctrl+A 和窗口编号。 我们创建的第一个是窗口零 (0),下一个是窗口 1,依此类推。 要跳到第一个窗口( dmesg窗口),我们按 Ctrl+A 和 0。

如果我们按 Ctrl+A 和 1,它会将我们带回vmstat窗口。

这很漂亮! 我们可以按 Ctrl+A,然后按 D 来脱离这个会话; 我们可以稍后重新连接。 两个会话仍将运行。 同样,要在窗口之间切换,我们按 Ctrl+A 和要切换到的窗口的编号(0 或 1)。

让我们进入下一步,在一个窗口中查看两个屏幕。 执行此操作时,您会将终端窗口拉伸到使此步骤有用的大小。 我们的示例受限于屏幕截图的大小,因此我们的窗口看起来有点狭窄。

广告

为此,我们按 Ctrl+A,然后按 Shift+S(需要大写“S”)。

窗口分成两个“区域”。

顶部区域仍显示vmstat ,底部区域为空白。 光标在下面的屏幕截图中突出显示。 要将其移动到下部区域,我们按 Ctrl+A,然后按 Tab。

光标移动到下部区域,这实际上只是一个空白区域。 它不是一个shell,所以我们不能在里面输入任何东西。 为了得到一个有用的显示,我们按下 Ctrl+A,然后按下“0”在这个区域显示dmesg窗口。

这在一个拆分窗口中为我们提供了两个实时输出。 如果我们按 Ctrl+A 和 D 来分离窗口,然后重新附加它,我们将失去拆分窗格视图。 但是,我们可以使用以下键盘快捷键恢复它:

  • Ctrl+A, S:水平分割窗口。
  • Ctrl+A , Tab:移动到下方区域。
  • Ctrl+A, 0:在下部区域显示窗口零。

我们可以更进一步。 我们现在将垂直拆分下部窗格,并将第三个进程添加到显示中。 将光标放在下部区域,我们按 Ctrl+A 和 C 来创建一个带有外壳的新窗口。 下部区域显示新窗口并为我们提供命令提示符。

接下来,我们运行df命令来检查文件系统的使用情况:

 df 

广告

当我们看到df运行时,我们按下 Ctrl+A 和竖线字符(|) 。 这将垂直分割下部区域。 我们按 Ctrl+A 和 Tab 移动到新区域。 接下来,我们按下 Ctrl+A 和 0 来显示dmesg窗口。

您还可以从一个区域移动到另一个区域,并添加更多垂直或水平分割。 以下是一些更有用的组合键:

  • Ctrl+A:在当前区域和上一个区域之间来回切换。
  • Ctrl+A、Q:关闭除当前区域以外的所有区域。
  • Ctrl+A, X:关闭当前区域。

通过 SSH 使用屏幕

使用screen ,您可以启动窗口会话,将其分离以使其仍在后台运行,注销或重新登录,然后重新附加会话。

让我们使用ssh命令从另一台计算机与我们的计算机建立 SSH 连接。 我们必须提供要连接的帐户名称和远程计算机的地址。

对于我们的示例,我们键入以下内容:

 ssh 戴夫@192.168.4.30 

在远程计算机上进行身份验证并登录后,我们键入以下内容以启动一个名为“ssh-geek”的screen会话:

 屏幕-S ssh-geek 

出于演示目的,我们将在screen窗口中运行top ,但您可以启动任何长时间运行或无休止的进程。

我们输入以下内容:

 最佳

广告

一旦top在窗口中运行,我们按 Ctrl+A,然后按 D 来分离窗口。

我们返回到原来的远程终端窗口。

用户返回到原来的终端窗口

如果我们键入exit ,如下所示,它会断开 SSH 会话,我们会回到本地计算机:

 出口

我们键入以下内容以重新连接:

 ssh 戴夫@192.168.4.30 

重新连接并登录后,我们可以键入以下内容以重新附加screen会话:

 屏幕-r ssh-geek 

我们现在重新连接到仍在运行的top实例。

如果您想在一台机器上开始一个进程,然后在另一台机器上从中断的地方继续,这非常棒。

相关:如何从 Linux Shell 创建和安装 SSH 密钥

共享屏幕会话

您还可以使用screen会话来允许两个人查看同一个窗口并与之交互。 假设有人在他的计算机上运行 Fedora,想要连接到我们的 Ubuntu 服务器。

他会输入以下内容:

 ssh 戴夫@192.168.4.30 

连接后,他使用 -S(会话名称)选项启动一个名为“ssh-geek”的屏幕会话。 他还使用-d (分离)和-m (强制创建)选项来创建一个已经分离的新screen会话。

他键入以下内容:

 屏幕 -d -m -S ssh-geek 

广告

他键入以下内容,使用-x (多屏模式)选项附加会话:

 屏幕 -x ssh-geek 

在 Manjaro 计算机上,另一个人使用相同的帐户凭据连接到 Ubuntu 计算机,如下所示:

 ssh 戴夫@192.168.4.1 

连接后,她输入screen命令并使用 -X(多屏模式)选项加入同一个窗口会话,如下所示:

 屏幕-X ssh-geek 

现在,任何一个人输入的任何内容,其他人都会看到。 例如,当一个人发出 date 命令时,他们都会在输入时看到它,以及它的输出。

两人现在正在共享一个在远程 Ubuntu 计算机上运行的screen会话。


对于一款在 1987 年首次亮相的软件, screen仍然具有很好的生产力冲击力。 熟悉它将是值得的时间!

相关:你应该知道的 37 个重要的 Linux 命令

相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑