使用过unix、linux、bsd系统的人应该都体验过shell的强大功能,尤其是配合openssh使用,可以方便的管理远程主机,这也几乎是远程维护服务器的最高效的方式了。
但是shell也有一个小缺陷,那就是缺少窗口界面下的“多窗口”功能,用户的操作是单线性的,无法暂停去处理其他事务,然后再回来,常用的解决办法应该是多开几个ssh窗口,这样是不是太笨了呢?注意我只是说用户操作是单线性的,系统的处理仍然是多用户多任务的,把任务放到后台处理不属于“用户操作”范畴。
其实,借助强大的Screen(screen的另外一个家)这个程序,我们可以在简陋的命令行操作方式下模拟多窗口的运行模式。Screen的主要功能是使一个用户登录能够同时打开多个shell进行操作,每个shell互不影响,如果把shell比作“窗口”的话,Screen就可以让你打开无数个“窗口”。
有了Screen的帮助,就不需要再打开许多个terminal窗口了,只要打开一个,并且进入screen,就可以随用随开shell了。比如说,我要在a目录下编辑程序,然后在b目录下运行程序,然后在c目录下查看errorlog,那么在打开screen之后,在默认的shell中cd a目录,这是第一个“窗口”,然后按Ctrl+a c键,注意是按住Ctrl键和a键,然后单独按一下c键,就打开了第二个“窗口”,在这个shell中cd b目录即可,同理打开第三个shell,cd c目录。“窗口”之间的切换主要有两种方式,一种是Ctrl+a p跳到前一个窗口,Ctrl+a n跳到后一个窗口,另一种方式是用Ctrl+a “显示出窗口列表进行选择,方便吧,手指不用离开键盘就完成了。如果窗口太多分不清了,还可以用Ctrl+a A给窗口起标题。
从上面的例子可以看出Screen的命令都是以Ctrl+a开头的,常用的命令还有(注意开头的Ctrl+a省略了,并且要注意大小写和控制键): C 清屏 Ctrl+D 或者 d 从当前的screen中跳出来,相当于“休眠”,以后还可以再连接上 h 截屏,屏幕上的字符内容会存为一个hardcopy文件 ? 显示帮助信息,常用的按键都有说明 k 关闭当前“窗口” c 开一个新窗口 n 下一个窗口 p 上一个窗口 ” 显示窗口列表 A 定义当前窗口的标题
按键看似复杂,用的多了自然就会熟悉并记住了,大家也可以参考一下另一份按键说明。
Screen的另外一个用法要稍微特殊一些,这么说吧,比如你开了n个窗口正在工作,突然有事要停下来,暂时关闭掉作别的事,或者是在公司没作完回家接着作,抑或是到服务器的网络连接断掉了,那么你已经打开的n个窗口、你的工作状态能不能保留呢?答案当然是肯定的!这也是Screen的一大特色,遇到上述情况,你只要Ctrl+a d就从screen的工作界面中跳出来了,回到正常的shell环境,什么时候想回来了,再使用screen -r命令就又能连接到你刚才的工作状态继续工作了。即使是在公司的screen没有用Ctrl+a d命令进行deatach,还可以用screen -x把控制权“抢”过来,嘿嘿。
Screen还具有log功能,使用Screen -L命令启动,就会在用户的home目录下自动生成screenlog.?文件,其中?是你在screen中开的“窗口”号,默认第一个为0。这样用户在screen中的所有操作就都可以记录下来了,不管是为了写文章还是存档用都很方便。不过screenlog中还记录了Escape Code信息,所以直接用vi或者less查看很不方便,cat出来倒是原汁原味,保存了彩色shell的所有颜色,但毕竟不方便,所以我自己写了一个把screenlog转换为html代码的工具,自己觉得还有点用吧。
screenlog中的颜色和linux shell中的颜色一样,都是用Escape Code中的颜色代码来实现的,关于这些颜色代码,Pradeep Padala有一篇文章介绍的比较详细,值得学习一下。
熟悉和掌握screen对工作学习都有很大帮助的,记得原来讨论远程桌面vnc的时候,一位牛人就曾经说过ssh+screen是最强大的,现在自己也有了相应的环境,果然言如其实,nix主机的管理大可扔掉远程桌面软件了。
PS: 在写上面那个screenlog转换工具的时候顺便发掘了一个正则表达式检测工具,不知道是哪位不知名的前辈流传到网上的,十分好用,只是js代码不太标准,在firefox下无法使用,我就对它小小的动了一点手术,解决了兼容性的问题,反正我在Linux+Firefox下是可以用的,地址:http://www.fwolf.com/tools/regex_test.html。
funny things
以前我们网管告诉我这东西,用的很欢,后来自己用的时候怎么也弄不出来,以为是记错快捷键了,原来还得现装 -,- 我一直以为这些都是“内部命令”,还有像 cronolog 什么