如何使用 Linux 的 screen 命令
已发表: 2022-01-29 使用 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.howtogeek
的screen
窗口已被分离。
您需要窗口名称开头的数字才能重新附加它。 如果忘记了,可以随时使用-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 命令 | ||
文件 | 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 ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑