Contents

Linux中screen命令简介

1. 概述

有时在 Linux 机器上工作时,可能很难跟踪分布在多个终端窗口中的任务。在关闭窗口后重新设置终端会话也很耗时。

在本快速教程中,我们将学习如何使用GNU屏幕  最大限度地 提高工作区效率并在每次登录时保持连续设置

2. 安装

screen应该已经安装在大多数标准的 Linux 发行版上。如果不是,则包安装程序可以解决问题——例如:

$ yum install screen

或者

$ apt-get install screen

我们也可以下载源码 ,手动安装

3. 建立一个会话

3.1. 启动 screen

首先,我们将在 Linux 终端窗口中启动一个screen

$ screen

默认情况下,会话中只有一个窗口,它会在我们运行screen命令的目录中显示一个命令提示符。screen中的窗口类似于 Internet 浏览器中的选项卡——每个会话可以有一个或多个。 我们可以通过按键查看当前的screen窗口列表

CTRL+a "

我们会在终端看到这样的东西:

Num Name
  0 zsh

3.2. 重命名screen窗口

在创建screen窗口后命名 屏幕窗口是保持我们的screen 会话有条理的好方法。由于我们要创建多个screen窗口,因此让我们重命名当前窗口,以便以后更容易找到。

首先,我们点击:

CTRL+a SHIFT+a

然后会出现提示让我们重命名当前窗口:

Set window's title to: zsh

让我们将标题更改为logs 并按Enter键。接下来,让我们显示窗口列表:

CTRL+a "

我们现在有一个自定义标题:

Num Name
  0 logs

现在是时候向我们的会话添加第二个窗口了。

3.3. 多个窗口

要在screen会话中创建第二个窗口,我们使用:

CTRL+a c

在显示我们的窗口列表后:

CTRL+a "

我们现在将在会话中看到两个窗口:

Num Name
  0 logs 
  1 zsh

让我们重命名这个新窗口使用:

CTRL+a SHIFT+a

我们可以将名称更改为timer。现在我们的清单是:

Num Name 
  0 logs
  1 timer

我们可以使用向上向下箭头或 jk键在窗口列表中切换窗口。Enter键将使选定的窗口处于活动状态。

作为窗口列表的替代方法,我们可以使用键盘命令来导航窗口。

让我们试试看。我们可以使用以下方法移动到下一个窗口:

CTRL+a n

我们可以使用以下命令返回上一个窗口:

CTRL+a p

最后,我们可以  使用以下命令切换到先前的活动窗口:

CTRL+a CTRL+a

3.4. 在不同的窗口中同时运行命令

现在让我们看看如何让一个命令在一个窗口中运行,并在第二个窗口中与它一起工作,所有这些都在同一个screen会话中。

我们将首先导航到我们的timer窗口:

CTRL+a "

根据我们当前的窗口,我们需要向上 向下 箭头才能到达timer窗口。输入将选择它。 让我们启动一个简单的timer命令来写入文件:

$ echo Starting at $(date) > counter.txt; \
  while true; do echo $(date); sleep 5; \
  done >> counter.txt

这将每五秒将当前日期和时间输出到一个文件中。

现在,如果我们使用以下命令转到会话中的另一个窗口:

CTRL+a n

我们现在可以启动 tail命令来监视计时脚本的输出:

$ tail -f counter.txt

这将开始输出:

Starting at Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:35 EDT 2020
Sun May 31 14:36:40 EDT 2020

所以现在我们在一个窗口中运行一些代码并在第二个窗口中监视输出。

4. 重新连接一个screen会话

 在上一节中构建screen会话需要一些工作。当我们回到我们的机器时不必重做它, screen让我们从会话中分离并在稍后重新连接到它。我们所有的窗口、设置和命令都将完全恢复为我们离开时的样子。

让我们试试看。要结束我们的会话,我们可以关闭终端窗口或 使用以下方法从我们的会话中分离

CTRL+a d

我们的会话作为一个单独的进程保持活跃。当我们准备好继续工作时,我们可以 从命令提示符重新连接到我们之前的screen会话:

$ screen -R

计时器代码应该仍在运行,tail输出应该仍在滴答作响。

顺便说一句,如果我们想关闭会话中的窗口,我们可以在窗口中键入exit

$ exit

这将关闭当前窗口并切换到上一个窗口。

如果我们 在会话的最后一个窗口中 键入exitscreen会话将以消息结束:

[screen is terminating]

5.自定义 screen会话

我们可以通过将命令放在 用户主目录的.screenrc **文件中来自定义 screen会话。**这也是一种将我们首选的会话设置轻松移植到另一台机器的方法。

作为一个简单的示例,让我们向*.screenrc文件添加一些自定义项。在我们的主目录中,我们将首先打开.screenrc*文件。然后我们可以添加以下行:

screen -t logs
screen -t timer

保存文件并启动 screen后:

$ screen

我们可以检查窗口列表:

CTRL+a "

它显示会话中的两个命名窗口:

Num Name
  0 logs
  1 timer

.screenrc文档 中还有更多选项。