如何使用Linux的screen命令

时间:2020-01-09 10:39:52  来源:igfitidea点击:

使用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命令时,他们都可以看到键入的日期以及它的输出。