Screen命令使用指南

如果你问我什么命令最能提高工作过程中的幸福感,就目前的情况来看,我一定会毫不犹豫地回答:“screen!没错就是screen,一定要会用screen!”至于原因且听下段分解。

1、screen简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。(from维基百科)

2、screen功能

作为一个命令行版本的窗口管理器,screen主要有如下几个功能(如下内容取自维基百科):

(1)会话恢复

只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

(2)多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
(3)会话共享
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

3、使用实例

这部分主要讲我是如何使用screen命令的。其实,screen主要是用在运行作业耗时比较长的情况。比如,我现在从windows用一个ssh的客户端(我一般用SecureCRT)连接到服务器,然后运行一个命令跑起一个作业。如果耗时比较长,我windows端的ssh客户端必须一直开着,不然,服务器上运行的作业就停了。这是很讨人烦的一点,因为即使能够不关机,一直开着这个ssh客户端,万一网络出了问题,还是会悲剧。这里就是screen发挥威力的地方。

screen可以管理一系列的多个会话,然后,可以将要运行的作业跑在某个会话下面。这样,即使windows的ssh客户端关掉或者是网络出了问题,只要没有通过screen将其运行的会话关掉,跑在服务器上的作业仍然会继续运行,而且你可以随时在任何地方(比如换台机器)重新连接服务器,连接到之前的会话来观察作业的运行情况。下面就讲一个使用中的例子。

3.1 使用

为了测试,首先我先写一个比较耗时的任务,这里为了简单,就直接写了两个for循环间隔1s输出,来耗时任务的运行。代码如下:

#!/bin/bash
#file name: work.sh
for a in aaa bbb ccc;
do
    echo $a
    sleep 1
done

for((a = 0;a<1000;a++));
do
    echo $a
    sleep 1
done
然后,对这个脚本使用命令“chmod a+x work.sh”来给其添加执行权限,这样运行这个作业的时候只需使用命令“./work.sh”即可。

3.2 在会话中运行作业

(1)创建会话

使用命令“screen -S RunWork”来创建一个screen会话,命令执行之后,就会得到一个新的shell窗口,为了便于标示可以用快捷键Ctrl-a A(就是按下Ctrl+a键,然后按下shift+a),这样窗口上光标会提示给窗口重命名。输入名称“RunWorkWindow”之后,回车就完成了对该窗口的重命名。这里的重命名是为了避免混淆同一会话中的不同窗口,可以用Ctrl-a w快捷键来查看当前的窗口名称,示意图如下:

Screen命令使用指南_第1张图片

(2)运行作业与会话detach以及会话恢复

下面使用命令“./work.sh”运行作业,然后用快捷键Ctrl-a d将当前会话detach。这样,即使网络断掉或者关掉ssh的客户端,作业仍然会在服务器上运行,而且可以通过“screen -ls”命令来查看当前有哪些会话以及它们各自的状态。如果想要恢复一个已经detach的会话,只需用“screen -r SessionID”即可(SessionID就是screen -ls命令结果中的每个session前面的数字)。会话被恢复之后,可以看到该会话在命令行的输入结果和输出信息。

Screen命令使用指南_第2张图片

到这里,基本上这个例子就结束了。如果要同时运行多个耗时作业,直接多启动几个screen会话就行。

4、总结

有了screen,我们就可以很方便地将作业运行起来,然后自己该干嘛干嘛去。这是我说它能够提升工作中幸福指数的主要原因。

你可能感兴趣的:(Unix)