使用GNU screen
为什么我需要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