深入浅出 screen

这周的内部技术交流会,是一个同事介绍 screen 的使用。俺一时嘴痒,就从怀旧开始,给大家从终端开始发散:

十年前,刚接触 UNIX 主机的时候,机房里的终端已经基本不再使用了。但调试维护路由器交换机总偶尔会碰上忘带串口线或者针头不匹配,前辈就从一堆老终端里翻出台合用的代替。第一次看见别人用终端印象非常深刻——总算知道windows那个“超级终端”,或者 telnet.exe 里的 vt100 对应的实物是什么了。

从形态上,terminal 和 console 是一致的,就是输入设备和输出设备的组合。它自己没有计算能力,任务在主机上执行。

在终端键盘上敲一个字符,比如 'a',首先把 'a' 送到主机上,主机再把这个 'a' 回显(echo),然后我们才能在终端屏幕上看到这个 'a'。和在编辑器里输入并看到一个 'a' 相比,是完全不一样的概念。

最近几年入行的新人是不太可能有机会亲手摸一下终端了(可在 google 上图片搜索 vt100 或 vt220 过过眼瘾)。但如果安装过 Linux 操作系统,它的文本控制台(console)可以很好的帮助理解 screen。

A. Linux 控制台,缺省有 6 个虚拟终端,我们可用 Alt-F1/F6 来依次切换;在 screen 里就可以这么干。

B. Linux 控制台的某虚拟终端上,登录进去,然后拔掉键盘,拔掉显示器,再把它们插上,你会发现刚才登录的状态还保持在;screen 也是这样的——在不可靠的网络环境下想长时间的在终端前台执行某程序,screen 就是必须的工具了。

C. 最后,刚才拔掉键盘显示器,再插回去的动作,用英文怎么说?不就是 detach 和 attach 么

在该同事演示的过程中,screen -x 命令效果是最让人震撼的。我开玩笑说,以后大家都必须在 screen 里工作,这样我就可以做一个真正的监工了。昨晚回家骑车的路上想,这就是远程 PP 啊!如果不得不在不同地点办公,同时又想执行结对编程的团队,是可以考虑利用这个功能来结对的。 只是不知道 X Terminal或远程桌面是否也能实现这样完整共享设备的特性

UPDATE: 有人指出 Eclipse 有一个叫 DocShare 的插件;我看了看,觉得还是不像真正的 PP 那样两人共享一个终端的感觉。
想象一下,甲和乙在地球的两端,开着 screen-x,头戴耳机通过skype通话。
甲:(疯狂击键ing)
乙:停一下,你这里好像忽略了一个情况
甲:(stop typing)..好的,你来吧...(然后看着编辑器光标向上移动了两行,增加了一个判断)
乙:现在好了
甲:我想想,你为什么这样处理...(恍然大悟)...没错没错...不过最好这里再加一个注释.
乙:下面你接着来
.......
纯属 YY

你最后假想的情景可

你最后假想的情景可以用 http://www.sun.com/123 这个工具似乎更合适。

PP

PP 是两人共享输入输出设备,最好是能有一致的访问权力,这样得到最好的效果。
Docshare 我觉得不好的一点就是权限控制.
Sun Shared Shell 不知道是不是有同样的问题,没有尝试,不敢评论

是不是Dou Yuan

是不是Dou Yuan 介绍啊?
screen 的问题在于,我不知道如何设置屏幕 buffer, 没法往回滚屏。

screen

screen 的确这点不爽
我觉得原因是 screen 只是一个软件,而不是终端仿真
把它看作 top 会好理解一些,所以此问题应该是无解

screen 适合用在特殊网络环境下

C-a [ C-a C-[

C-a [
C-a C-[
C-a esc (copy) Enter copy/scrollback mode.
基本键位和 vi 差不多
这个男人里都写了:)