如何使用 Linux 的屏幕命令

使用 Linux screen
命令,您可以将正在运行的终端应用程序推送到后台,并在您想要查看它们时将它们拉出来。它还支持分屏显示并通过 SSH 连接工作,即使在您断开连接并重新连接后也是如此!
什么是屏幕命令?
screen
命令是一个终端多路复用器,它绝对包含选项。说它可以做很多事情是轻描淡写的祖父。手册页超过 4,100 行。
以下是您将使用 screen
命令的最常见情况,我们将在本文中进一步介绍这些情况:
- 标准操作是创建一个带有外壳的新窗口,运行命令,然后将窗口推送到后台(称为“分离”)。当您想查看进程的运行情况时,可以再次将窗口拉到前台(“重新附加”)并再次使用它。这对于您不想通过关闭终端窗口意外终止的长进程非常有用。
- 在运行
screen
会话后,您可以创建新窗口并在其中运行其他进程。您可以轻松地在窗口之间跳转以监控它们的进度。您还可以将终端窗口拆分为垂直或水平区域,并在一个窗口中显示各种screen
窗口。 - 您可以连接到远程机器,启动一个
screen
会话,并启动一个进程。您可以断开与远程主机的连接,然后重新连接,您的进程仍将运行。 - 您可以在两个不同的 SSH 连接之间共享一个
屏幕
会话,这样两个人就可以实时看到相同的内容。
安装屏幕
要在 ubuntu 上安装 screen
,请使用以下命令:
sudo apt-get install screen

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

在 Fedora 上,您键入以下内容:
sudo dnf install screen

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

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

你留在命令提示符下,似乎什么也没发生。但是,您现在正在多路复用终端仿真器中运行一个 shell。为什么这是一件好事?好吧,让我们开始一个需要很长时间才能完成的过程。我们将下载最新 Linux 内核的源代码并将其重定向到名为 latest_kernel.zip
的文件中。
为此,我们键入以下内容:
curl 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.howtogeek
的 screen
窗口已分离。
您需要窗口名称开头的数字才能重新附加它。如果您忘记了它,您始终可以使用 -ls
(列表)选项,如下所示,以获取分离窗口的列表:
screen -ls

准备就绪后,您可以使用 -r
(重新附加)选项和会话号来重新附加它,如下所示:
screen -r 23167

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

如果这是一个将要运行到结论的过程,那么它最终会完成。如果这是一个持续的过程,你最终会想要终止它。无论哪种方式,当进程结束时,您都可以键入 exit
以退出 screen
。或者,您可以按 Ctrl+A,然后按 K 强行关闭窗口。
键入以下命令:
exit

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

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

当 screen
启动我们的会话时,我们会看到一个带有命令提示符的空白窗口。我们要下载一个大文件,所以我们可以用一个长时间运行的进程作为例子。
我们键入以下内容:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

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

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

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

下载完成后,我们键入 exit
关闭会话窗口。
在多个窗口中使用屏幕
到目前为止,我们已经使用 screen
将单个进程置于分离窗口的后台。然而,screen
的功能远不止于此。接下来,我们将运行一些进程来监控计算机的某些方面。
我们键入以下内容以启动名为“monitor”的屏幕会话:
screen -S monitor

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

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

我们想要运行另一个应用程序,因此我们需要一个新的 screen
窗口。我们按 Ctrl+A,然后按 C 创建一个新窗口。我们将使用 watch
重复运行 vmstat
,这样我们就可以经常更新计算机上虚拟内存使用情况的显示。
在新的命令提示符下,我们键入以下内容:
watch 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 dave@192.168.4.30

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

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

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

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

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

我们键入以下内容以重新连接:
ssh dave@192.168.4.30

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

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

如果你想在一台机器上开始一个过程,然后在另一台机器上从你离开的地方继续,这是很好的。
共享屏幕会话
您还可以使用 screen
会话来允许两个人查看同一窗口并与之交互。假设有人在他的计算机上运行 Fedora 想要连接到我们的 Ubuntu 服务器。
他会输入以下内容:
ssh dave@192.168.4.30

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

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

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

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

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


两个人现在共享一个在远程 Ubuntu 计算机上运行的 screen
会话。
对于一款于 1987 年首次面世的软件,screen
仍然具有很好的生产力冲击力。熟悉它会花很多时间!
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts