- A+
大家好,我是良许。
很多时候,我们都需要执行一些需要很长时间的任务。如果这时候,你的网络连接突然断开了,那么你之前所做的所有工作可能都会丢失,所做的工作可能都要重做一遍,这会浪费我们许多的时间,非常影响我们的工作。那么有没有办法可以解决这个问题呢?
答案是肯定的,那就是使用 screen
命令。screen
命令允许用户在一个窗口内使用多个终端会话,可以断开连接,也可以重新连接已断开连接的会话。每个会话都可以恢复连接,这样就算会话断开了,用户也不必担心数据丢失,这正好解决了我们的问题。
因此,良许想与大家分享 Screen 这个实用工具的一些功能以及用法:
安装 Screen
现在许多的 Linux 发行版通常都预装了 Screen 。通过运行以下命令,可以查看系统是否安装了 Screen :
$ screen --version Screen version 4.06.02 (GNU) 23-Oct-17
如果你的系统并未安装 Screen ,则可以执行以下命令来安装:
$ sudo apt install screen
启动 Screen 会话
想要启动一个 Screen 会话,只需输入以下命令:
$ screen
输入 screen
命令后,你会看到一个布满版权信息的界面,你只需按回车或者空格键就可以跳过这个界面。跳过之后,你就可以看到终端界面了。这个终端和原来的终端并没有什么不同,你一样可以浏览文件夹,打开文件,在原来的终端中能做到的事情,它也可以做到。
你也可以在启动 Screen 会话时,使用 -S
参数给会话起名字。例如,我想启动一个叫 alvin
的 Screen 会话:
$ screen -S alvin
当你启动了不止一个 Screen 会话时,这可以用来区分其他 Screen 会话。
进入 Screen 终端后,按 Ctrl a+?
快捷键,可以查看 Screen 所附带的所有命令:
分离与重新连接 Screen 会话
假如你要更新系统,你输入更新命令后,是需要等待很长时间才更新完毕的。这时,如果你没用 screen
命令,一旦你的网络连接断开了,那么更新就会被打断,你就必须要重新开始更新。
Screen 会话的分离功能可以解决这个问题。你可以进入 Screen 终端里执行更新命令,然后输入会话分离快捷键 Ctrl a+d
,你会看到以下提示信息:
这就表示你已经成功从 Screen 会话中分离出来并回到原来的 Shell 会话中了。这时,Screen 会话会继续留在后台执行更新任务。而且无论是网络断开连接,还是关闭原来的 Shell 会话,它都不会受到影响。
当然,如果你来不及按会话分离快捷键网络就断开了,Screen 会话也不会关闭,它一样会继续留在后台执行更新任务。
如果你想重新连接到已分离的 Screen 会话,以查看更新进程,只需执行以下命令:
$ screen -r
需要注意的是,该命令只适用于当前终端只启动了一个 Screen 会话的情况。
嵌套 Screen 会话
嵌套 Screen 会话,顾名思义,就是 Screen 会话中的 Screen 会话,是实现用户在一个窗口中使用多个终端的方法之一。
想要启动一个嵌套 Screen 会话很简单,你只需要在 Screen 终端再次输入 screen
命令,或者按 Ctrl a+c
快捷键,这会在你原来的 Screen 会话中再启动一个 Screen 会话,而原来的 Screen 会话则会在后台保持活动。
例如,你运行了 top
命令来监控系统的 CPU 的使用情况:
$ top
而你既不想关掉这个 top
进程,又想同时做其他的任务,那么你就可以使用 Ctrl a+c
快捷键来启动一个新的 Screen 会话,这样,你既可以保持 top
命令在后台运行,又可以去执行其他的任务。
而如果你想切换回执行 top
命令的 Screen 会话,可以使用快捷键 Ctrl a+n
(切换至下一个 Screen 会话)或者 Ctrl a+p
(切换至上一个 Screen 会话)进行切换。
分离并启动新的 Screen 会话
从 Screen 会话中分离出来再启动新的 Screen 会话,也可以实现用户在一个窗口中使用多个终端。
例如,你启动一个 Screen 会话,然后输入 df -h
来查看硬盘的使用情况:
$ df -h
然后你可以按 Ctrl a+d
快捷键从 Screen 会话中分离出来,回到原来的终端。这时你就可以再次输入 screen
命令启动一个新的 Screen 会话来执行其他的任务。
如果你想重新连接回运行 df -h
命令的 Screen 会话,则需要先从新的 Screen 会话中分离出来,然后尝试输入 screen -r
命令。这时,由于你并行启动了多个 Screen 会话,然而 screen
命令并不知道你想要重新连接到哪个会话中,因此,你会看到以下提示信息:
从图中可以看到,每个 Screen 会话都有自己的 ID( 4352 与 4294 )以及自己的名字( pts-0.lxlinux
)。这里可以看到两个会话的名字都是 pts-0.lxlinux
,那是因为我启动 Screen 会话的时候,没有指定名字,因此它们都以默认的名字作为自己的名字。
想要重新连接到运行 df -h
命令的 Screen 会话,你只需在 screen -r
命令后面再加上会话的 ID 就可以了,像这样:
$ screen -r 4352
当然,如果在启动 Screen 会话时,你给会话指定了独一无二的名字,那么你也可以通过会话的名字来指定重新连接到哪个会话,例如,重新连接到名字为 alvin
的会话:
$ screen -r alvin
如果你并不知道 Screen 会话的 ID 以及名字,你也可以通过以下命令来查看:
$ screen -ls
关闭 Screen 会话
要关闭 Screen 会话很简单,就和关闭平常的会话一样,你可以使用 Ctrl d
快捷键,也可以输入 exit
命令关闭:
$ exit
善用 Screen
在工作中,我们总会遇到需要执行较长时间才能完成的任务,如果在执行这些任务的过程中,遇到网络中断,那将会导致数据丢失以及时间的浪费,这将严重影响我们的工作。Screen 允许会话断开后进程在后台继续运行,且支持从断点恢复进程,这很好地解决了这问题。
而且 screen
命令还使我们可以利用一个窗口来同时执行多个任务,这对我们工作是非常有用的。因此,为了避免数据丢失以及节省时间,我们应该多用 screen
命令。最后,如果你还对 screen
命令有疑问,请留言告诉我呗!