Screen

我 的 host 是 Ubuntu 10.04 , 而我的 guest 是 RHEL 5.4 . 由于我的小黑只有 1G 的内存 , 所以每次开启 Vbox , 在 Vbox 下操作 RHEL , 机子都卡的不行了 . 后来就想直接在我这台 host 上 ssh 到我 guest 里面的 RHEL : 最开始的时候是一个 Gnome Terminal 开四个标签 : pts/0 ssh 到 guest 上的 RHEL , 由做实验 ; pts/1 连接到本机 , 做日常管理 ; pts/2 还是连接到本机 , 由做笔记 ; pts/3 专门是用来控制 mocp . 后来用着用着发现这四个标签切换太繁琐了 , 尽管可以是用快捷键 : Alt+1/2/3/4 . 穷则思变.

于是 screen 就诞生了.

其实 , screen 真正的用场是这样的 : 当你 ssh  到 Linux 做一些诸如备份 , ftp 传输这样的工作 . 在这种情况下需要为 ftp 单独开一个终端 , 必须等待它执行完毕 , 才能关闭这个窗口 , 也就是说在它工作的时候 , 你是什么事都做不成的 .

$screen 就可以创建一个 screen ; $screen -d 挂起该会话 ; 然后可以通过 $screen -r pid 来重新连接至会话.

常用的快捷键操作:
C-a c : 开启另外一个 screen
C-a " : 列出当前的 screen , 并选择
C-a d : 暂时退出 screen
C-a ? : 帮助文档.
C-a w : 显示所有窗口列表
C-a C-a : 切换到之前显示的窗口(跟 $cd – 有点类似)
C-a n : 切换到下一个窗口
C-a p : 切换到前一个窗口
C-a 0..9 : 切换到窗口0..9
C-a d : 暂时断开 screen 会话
C-a k : 杀掉当前窗口(或者 $exit )
C-a A(Annotate) : 给当前的 screen 起个名字

$screen -ls : 列出现有 screen 会话 , 格式为 pid.tty.host.
这时候屏幕上会显示各个 screen 的状态 : Detached 表示会话处于挂起状态 , Attached 表示有终端在连接会话.


$screen -wipe : 删掉那些无法连接的会话
$screen -t : 创建一个 screen 并且同时给这个 screen 指定名称.

可以使用状态栏在视觉上进一步区分各个窗口 . 启动您喜欢的文本编辑器 , 在主目录中创建包含以下代码的 .screenrc 文件:
hardstatus on hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
效果如下图:


参考 :
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
http://www.ibm.com/developerworks/cn/aix/library/au-gnu_screen/

PS : 我在 screen 下开了一个 vim 来写这篇博客 , 不过将其在 Google Docs 上排版时是一片混乱 , 将其直接 cp 到 wp 上后 , 排版也是乱的 , 不知道为什么 ==?