如何使用Linux的screen命令
使用Linux的screen命令,我们可以将正在运行的终端应用程序推送到后台,并在需要查看它们时将它们向前拉。它还支持分屏显示,并且即使我们断开连接并重新连接后也可以通过SSH连接工作!
什么是screen命令?
" screen"命令是一个终端多路复用器,并且绝对包含选项。说它可以做很多事是轻描淡写的祖父。手册页超过4,100行。
以下是使用" screen"命令的最常见情况,我们将在本文中进一步介绍这些情况:
标准操作是创建一个带有shell的新窗口,运行命令,然后将窗口推到后台(称为分离)。当我们想查看过程的运行状况时,可以再次将窗口拉到前台(重新连接)并再次使用它。这对于不需要关闭终端窗口意外终止的长进程非常有用。
一旦运行了"屏幕"会话,就可以创建新窗口并其中运行其他进程。我们可以轻松地在窗口之间跳来监视它们的进度。我们还可以将终端窗口划分为垂直或者水平区域,并在一个窗口中显示各种"屏幕"窗口。
我们可以连接到远程计算机,启动"屏幕"会话,然后启动一个进程。我们可以断开与远程主机的连接,然后重新连接,进程仍将运行。
我们可以在两个不同的SSH连接之间共享"屏幕"会话,这样两个人可以实时看到同一件事。
安装screen
要在ubuntu上安装screen
,请使用以下命令:
sudo apt-get install screen
要在Manjaro上安装屏幕,请使用以下命令:
sudo pacman -Sy screen
在Fedora上,键入以下内容:
sudo dnf install screen
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.theitroad"的"屏幕"窗口。
我们需要窗口名称开头的数字以重新添加它。如果忘记了它,可以始终使用如下所示的-ls选项(列表)来获取分离窗口的列表:
screen -ls
准备就绪后,可以使用-r(重新连接)选项和会话号来重新连接它,如下所示:
screen -r 23167
一直在后台运行的窗口现在像从未离开过一样被带回到终端窗口。
如果这是一个要完成的过程,它将最终完成。如果这是一个连续的过程,我们最终将要终止它。无论哪种方式,当过程结束时,我们都可以键入"退出"以退出"屏幕"。或者,我们可以按Ctrl + A,然后按K强制杀死一个窗口。
键入以下命令:
exit
返回上一个终端窗口,该窗口仍会显示我们用来重新连接窗口的命令。由于我们关闭了一个也是唯一的分离窗口,因此我们收到一条消息,表示屏幕
正在终止。
使用命名屏幕会话
我们可以使用-S(会话名称)选项来命名screen会话。如果使用令人难忘的名称而不是会话的数字标识,则重新连接到会话更方便。我们键入以下内容以将会话命名为bigfile:
screen -S bigfile
当" screen"启动会话时,我们会看到一个带有命令提示符的空白窗口。我们将下载一个大文件,因此我们可以使用一个长时间运行的过程作为示例。
我们输入以下内容:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
下载开始后,我们按Ctrl + A,然后按D断开会话。我们输入以下内容,将-ls
(list)选项与screen
一起使用,以查看分离会话的详细信息:
screen -ls
在数字标识符(23266)的后面,我们看到了会话的名称(bigfile)。我们键入以下内容(包括会话名称)以重新添加它:
screen -r bigfile
我们重新连接到我们的下载窗口,看到长时间的下载仍在进行中。
下载完成后,我们输入`exit'关闭会话窗口。
在多个Windows中使用屏幕
到目前为止,我们已经使用"屏幕"将单个进程在后台的独立窗口中放置。但是,"屏幕"的功能远不止于此。接下来,我们将运行一些过程,使我们可以监视计算机的某些方面。
我们键入以下内容以启动一个名为monitor的屏幕会话:
screen -S monitor
在新窗口会话的命令提示符下,我们将启动dmesg
并使用-H(人类可读)和-w(等待新消息)选项。这将显示内核缓冲区消息;新消息将出现。
我们输入以下内容:
dmesg -H -w
出现现有消息。我们没有返回到命令提示符,因为dmseg
正在等待新消息,并将在它们到达时显示它们。
我们要运行另一个应用程序,因此我们需要一个新的"屏幕"窗口。我们按Ctrl + A,然后按C创建一个新窗口。我们将使用"监视"来反复运行" vmstat",因此我们会经常更新计算机上虚拟内存使用情况的显示。
在新的命令提示符下,我们键入以下内容:
watch vmstat
出现vmstat输出,并每两秒钟更新一次。
我们的两个流程现在正在运行。要在屏幕窗口之间切换,请按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,选项卡:移至下部区域。
Ctrl + A,0:在下部区域显示窗口零。
我们可以更进一步。现在,我们将垂直拆分下部窗格,并在显示中添加第三个过程。将光标放在下部区域中,我们按Ctrl + A和C可以创建一个带有shell的新窗口。下部区域显示新窗口,并为我们提供命令提示符。
接下来,我们运行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 [email protected]
在远程计算机上进行身份验证并登录后,我们键入以下内容以启动名为ssh-data的" screen"会话:
screen -S ssh-data
出于演示目的,我们将在"屏幕"窗口中运行"顶部",但是我们可以开始任何长时间运行或者无休止的过程。
我们输入以下内容:
top
一旦" top"在窗口中运行,我们按Ctrl + A,然后按D分离窗口。
我们返回到原始的远程终端窗口。
如果我们输入exit
,如下所示,它将断开SSH会话的连接,然后返回本地计算机:
exit
我们键入以下内容以重新连接:
ssh [email protected]
重新连接并登录后,我们可以输入以下内容来重新连接" screen"会话:
screen -r ssh-data
现在,我们重新连接到仍在运行的top
实例。
如果我们想在一台机器上启动一个进程,然后在另一台机器上停下来的地方继续工作,那就太好了。
共享屏幕会话
我们还可以使用"屏幕"会话来允许两个人看到同一窗口并与之交互。假设某人在其计算机上运行Fedora想要连接到我们的Ubuntu服务器。
他将键入以下内容:
ssh [email protected]
连接后,他使用-S(会话名称)选项开始一个名为ssh-data的屏幕会话。他还使用-d(分离)和-m(强制创建)选项来创建已经分离的新的screen会话。
他键入以下内容:
screen -d -m -S ssh-data
他使用-X(多屏模式)选项添加以下会话来键入会话:
screen -X ssh-data
在Manjaro计算机上,另一个人使用相同的帐户凭据连接到Ubuntu计算机,如下所示:
ssh [email protected]
连接后,她输入screen命令并使用-X(多屏模式)选项来加入相同的窗口会话,如下所示:
screen -X ssh-data
现在,任何人键入任何内容,对方都会看到。例如,当一个人发出date命令时,他们都可以看到键入的日期以及它的输出。