很多时候我们会遇到这样的情况,一个任务需要运行很长时间,例如编译某个庞大的软件包,或者运行更新软件包如:apt-get upgrade 等等。没当这个时候,我们被迫一直开启一个ssh客户端的链接,以便观察任务执行的状态、进行下一步操作等等。如果这个时候你的PC机需要关机或者重启,那么对于我们来说可能是个很痛苦的选择,因为一旦ssh连接断开后,想了解任务执行的情况就非常困难了!

这就是我今天向大家推荐Screen这个软件包的原因,这个软件包可以说是一个虚拟shell环境工具。你可以在你登录到服务器之后,用这个工具创建一个虚拟的shell环境,在这个环境中工作,可以完全不用考虑断开连接对你的影响。下面我介绍一下Screen的基本使用方法。

首先是安装。大部分的发行版中都默认安装了这个包,检验你的系统中是否有这个包,可以敲命令:
screen -list
如果你的系统中有这个包,将会输出:
No Sockets found in /tmp/screens/S-root.
如果没有这个包,那么输出可能是:
-bash: screen: command not found
如果没有这个包的话,可以自行安装:
如果你使用APT软件包管理工具:apt-get install screen
如果你使用yum软件包管理工具:yum install screen
你也可以到Screen的官方网站去下载软件包,地址是:
http://www.gnu.org/software/screen/

安装了Screen之后,你就可以享受他给你带来的方便了。
首先,用你的ssh客户端登录你的服务器。在提示符(#或者$)下输入:
screen -S MyScr (其中“MyScr”是你为这个虚拟shell环境起的名字,可以自定义)
输入回车之后,你就可以在这个虚拟的shell环境中工作了,你工作的内容都会被一直保留下来。试试吧,在里面敲几个命令,运行几个程序,和平常没有两样吧~~
如果想要退出要怎么办呢?只要按下Ctrl+A,然后按d,就可以退出刚刚建立的虚拟shell环境了(名字是MyScr)
若干时间后,你又想继续刚才的工作了,只要再敲:
screen -r MyScr
就可以看到刚刚的界面了。怎么样,还是很简单适用的吧,呵呵。

当然,你不给这个虚拟shell环境命名也是没问题的,如果只有一个虚拟环境的话,也可以这样用
screen(回车)
工作……退出……
screen -r
继续工作
系统还会默认用PID号码表识screen虚拟的shell环境。
例如,我直接用screen命令建立了一个虚拟环境,退出之后,我想查看虚拟环境的情况:
screen -list
输出应该是类似下面的:
There is a screen on:
        25202.pts-1.firewallX   (Detached)
1 Socket in /tmp/screens/S-root.
其中:
“25202”是这个虚拟环境的PID。不信的话,可以ps查看一下,呵呵~
“pts-1”是说你的ssh客户端登录的系统端口号是pts-1
“firewallX”是我这台主机的名字
如果你建立了很多虚拟环境,又没有为他们命名的话,就只能用PID来识别他们了。(记住这个PID号码太烦了吧,还是名字好!)
例如,我现在有两个screen建立的虚拟环境,我输入:
screen -list
输出为:
There are screens on:
        25202.pts-1.firewallX   (Detached)
        25403.pts-1.firewallX   (Detached)
2 Sockets in /tmp/screens/S-root.
那么,我如果想进入第二个虚拟环境的话,我可以用什么命令呢?答案如下:
screen -r 25403
如果我登录进去之后,用ctrl-a c:再创建一个新的虚拟Shell环境,那么这个环境就是在PID为25403的虚拟环境里面的子虚拟环境。