23 March 2014

为什么我需要screen

第一次用screen的时候我就在想怎么没有人在我第一次需要ssh到一台远程机器的时候告诉我还有screen这样贴心的小工具呢?我觉得任何一个需要ssh到远端服务器工作的人,都碰到过这种烦心事:例如仿真跑到一半,或者同步一个大文件还没完成,ssh连接断了。这时候你最希望做的就是重新连接上后,发现你的任务和环境都没有受到影响。而screen(或者更加新一点的tmux)正是这样一个让你不再担心连接丢失的窗口管理器。

基本使用

screen的使用非常简单,在终端键入 screen 命令,你就进入了screen的窗口管理器,看起来似乎和正常的终端毫无差别。

所有screen自带命令的前缀快捷键默认是 Ctrl-a ,例如 Ctrl-a ? 会列出所有screen命令和对应的快捷键。

这其中你首先会用到的就是所谓的 detach (挂起)命令。 Ctrl-a d 将一个窗口挂起的时候,这个窗口就在后台继续运行,当你下次连接上的时候,用 screen -ls 命令可以查看当前所有screen窗口的状态,例如

$ screen -ls
There is a screen on:
        16792.pts-3.ubuntu      (03/30/2014 04:24:22 PM)        (Detached)
1 Socket in /var/run/screen/S-zhichu.

可以重新 attach 这个窗口

$ screen -r 16792

这样就回到了你挂起前的窗口,而且你会发现不管是你之前没有跑完的仿真还是没有下载完的文件,都不会因为这个窗口被挂起受到任何影响。

当然,如果每次需要ssh后再重新加载窗口还是略显繁琐,我们可以将两步合成一步完成

ssh -t yourhost screen -r

这样就可以直接进入加载后的窗口,而且当重新挂起这个窗口后会自动退出ssh连接。

当你在screen窗口中会发现,窗口是无法滚动的,这当然是无法接受的。这时候只需要 Ctrl-a [ 进入拷贝模式,就可以用箭头或者翻页键来滚动窗口。

有时候你可能在重新 attach 窗口的时候发现因为没有 detach 而无法加载。例如 screen -ls 显示

$ screen -ls
There is a screen on:
        16792.pts-3.ubuntu      (03/30/2014 04:24:22 PM)        (Attached)
1 Socket in /var/run/screen/S-zhichu.

这时候需要用以下命令先挂起再加载,

$ screen -Dr


blog comments powered by Disqus