有时候要远程登录操作服务器,突然有事要离开,但你的find还在执行,或者你还在下载东东,这个时候怎么办?

哈哈,你可以用screen来解决上述的情况。Screen是个终端的“窗口管理器”,你可以在同一个终端里打开多个shell,最重要的是screen将程序的标准输出和虚拟终端(pts)给分开了。这意味着如果你把某个任务放在screen里执行,你不需要完全守在它旁边,只要按一下Ctrl-a,d,screen 就和当前的虚拟终端设备detach,然后你可以去忙其他的事情了。即使你关闭了当前的ssh连接,也没有关系,下次ssh登录之后,执行screen -r,原先的工作环境又回来了!

上面只是描述了screen其中的一个用途。接下来详细了解一下screen的使用方法。

以下内容来自这里:作者charlee  http://tech.idv2.com/2006/12/12/screen-command-tips/

—————————-  第一次使用分割线 :-)  —————————

首先,你可以建立自定义的screen配置文件:.screenrc。下面是我的.screenrc的内容:

# 启动时不显示欢迎屏幕
startup_message off

# 定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。
escape ^Zz

# 屏幕缓冲区 1024 行。
defscrollback 1024

# 在最下一行显示窗口列表和时钟
hardstatus on
hardstatus alwayslastline
hardstatus string “%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s ”

# 关闭错误提示
vbell off

# 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表
bind w windowlist -b
bind ^w windowlist -b

常用快捷键

注:这些快捷键都需要在按完 escape 键之后使用。默认的escape键是 Ctrl-A,
上面贴出的 .screenrc 中将其改成了 Ctrl-Z。例如 d,实际操作时应当按 Ctrl-Z d。

快捷键         功能
d中断当前会话,下次可以用 screen -r 命令恢复
c开新窗口
0-9数字在窗口0-窗口9之间迅速切换
n下一个窗口
p上一个窗口
S分割屏幕
TAB在分割的屏幕之间切换
X关闭分割出的屏幕
[进入复制模式,用hjkl移动光标,空格选中开始点,再次按空格选择结束点,进行复制
]粘贴
?帮助
:进入screen的命令行

 

另外要提到的几个常用技巧

  1. 重复 escape 键可以在当前窗口与上一个窗口之间迅速切换。例如从窗口1按^Z3切换到窗口3,之后可以按^Z^Z在窗口1和3之间切换。
  2. 窗口分割的用法:首先按^ZS(S要大写)进行分割,然后用^Z<TAB>切换到分割出的新屏幕,再用^Z<数字>在新屏幕内切换窗口。结束分割可以用^ZX。
  3. 翻页:用了screen之后就不能用平常的 Shift-PageUp 和 Shift-PageDown 来翻页。可以按 ^Z[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。

关于 escape 键的选择

默认的Ctrl-A与vi的增1功能冲突。如果你不幸习惯了Ctrl-A,那么当你在没有screen的环境下使用vim时,你会在不经意之间按下Ctrl-A而改变附近的数字。因此最好改成别的键。

常用的screen快捷键都在左手,因此escape应当放在键盘的左面三列。Ctrl-Q和Ctrl-S被终端使用无法绑定,Ctrl-` screen不支持,Ctrl-W与vim的切换窗口命令冲突,Ctrl-D与vim的翻页冲突, Ctrl-X与vim的减1功能冲突,Ctrl-E与vim的滚屏冲突,Ctrl-C为很常用的中止程序。因此只能用Ctrl-Z了。Ctrl-Z用于暂停程序,不常用,可以将其设置为screen的escape键。需要暂停程序时按 Ctrl-Z z 即可。