永远相信美好的事情终将发生

screen简介

  Screen是大多数Linux发行版自带的一款软件,适用于多种场景,比如你需要使用scp拷贝大量文件时,可以在新的screen中完成(相当于在后台完成);或者你可以在不同的screen中设置不同的环境变量。这些问题均可通过screen解决。
  开启一个screen:你只需要在命令行输入screen,然后按回车即可。
然后,那你就进入了一个screen,但是这个screen与之前的shell界面完全相同,工作时你可能无法确定自己正处于哪个screen。所以我们需要进行一些设置。

  1. 使用exit退出当前的screen窗口。
  2. 在自己的$HOME目录下建立一个.screenrc的文件,文件内容为
    1
    2
    3
    rdstatus on
    hardstatus alwayslastline
    hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
    这个时候再输入screen并回车,你会看到如下的界面:

20161016-screen_0_bash.png

这个界面让screen和普通的shell区别开来了,接下来我们在这个screen中做点事情,比如我们用vi test.cpp打开一个文件,然后输入点什么,如下图所示:

20161016-screen_0_bash_vi.png

我们先不要保存这个文件,而是先按Crtl+a组合键,然后按d,退出当前的screen窗口,我们会回到之前的shell中。
我们用exit命令退出当前的远程登陆窗口,然后重新连接,再用screen –ls命令看一下会输出什么:

20161016-screen_ls.png

screen –ls命令会列出当前已经挂起的screen窗口,显示格式为<pid>.<tty>.<host>,我们现在用命令screen –r 24765来连接这个已经挂起的screen,我们会看到之前的工作依然存在,它并没有因为我们退出远程登陆窗口而退出,极端的情况,当你在screen中做事情的时候,网络突然断开,你来不及通过Ctrl+a, d来挂起一个screen,你重新连接之后,你依然可以通过screen –ls看到之前的screen,并且依然可以通过screen –r <pid>来连接它,你之前的工作不会断掉,因为screen会在你失去连接的时候自动挂起。

当然,你可以用screen –S screenname来建立一个名字叫做screenname的screen,下次,你就可以用screen –r screenname或者screen –r pid来连此接screen了。关于更多screen的命令行选项,你可以通过命令screen –h来查看。

现在我们来介绍一下在screen内部的一些操作,对screen的操作都是以Ctrl+a组合键开始的,我们在app screen内部输入Ctrl+a, ?可以看到关于screen操作的组合键的所有介绍,

接下来我们介绍几个简单的命令:通过Ctrl+a, A来给当前窗口设置名称,比如我们设置当前窗口0的名称为compile,而不是默认的bash,我们按Ctrl+a,A,会出现如下的界面:

20161016-screen_rename.png

我们删除掉bash,输入compile,回车,会看到窗口的名称已经变为compile。

接下来我们再用Ctrl+a,c来建立一个新的窗口1,然后继续用Ctrl+a,A给新的窗口1更名为Amber,完成后,我们继续Ctrl+a,c建立新的窗口2,用Ctrl+a, A给新的窗口2更名为Gromacs,操作无误的话,我们会看到如下的界面:

20161016-screen_mutiple_window.png

我们现在已经在一个叫做app的screen内建立了三个窗口,分别为compile,编号为0;Amber,编号为1;Gromacs,编号为2。三个窗口代表了三个不同的shell,我们可以在这三个shell内设置不同的环境变量,他们彼此之间相互不影响。当然,我们必须通过命令行的方式设置环境变量。

接下来我们首先介绍如何在这三个窗口之间切换。
在同一个screen的不同窗口之间切换很容易,按Ctrl+a,窗口号就可以在不同的窗口之间切换,如Ctrl+a,0切换到compile,Ctrl+a,1切换到Amber。

我们现在已经建立好一个叫做app的screen,它包含了三个窗口,我们每次登陆的时候可以用screen –r app连接到这个screen,退出的时候我们用Ctrl+a,d挂起它就是,直接关掉putty的窗口也没关系(不建议这么做),screen会自动挂起。

稍微总结一下:

1
2
3
4
5
6
7
screen –S app    #建议一个名为app的screen
Ctrl+a A # 给screen内的当前窗口设置名称
Ctrl+a c #在当前screen内新建一个窗口
Ctrl+a $num #切换到窗口号为$num的窗口
Ctrl+a d #挂起当前screen
screen –ls #列出当前存在的screen
screen –r app #连接到名称为app的screen


本文转自大连分中心的使用说明。