在使用ssh或者telnet登录远程主机后,执行一些耗时的命令,如果此时ssh或者telnet中断,那么远程主机上正在执行的程序或者说命令也会被迫终止。比如你远程登录之后需要执行一个耗时的指令如svn checkout,这时马上又要下班了,你要关闭你的电脑走人了,怎么办?screen能够很好地解决这个问题。screen也叫虚拟终端,可以在一个物理终端上实现多个虚拟终端的效果。很实用.
这里来说一下常规用法:
1、新建一个screen
直接screen或者screen -S XXX(XXX是你为这个screen指定的名字)
2、在screen中新建一个虚拟终端(此时你的screen中就有了两个虚拟终端了)
ctrl+a+c(先按ctrl+a,然后再按c,下面的命令也一样)
3、在虚拟终端之间切换
前一个ctrl+a+p
后一个ctrl+a+n
列表选择ctrl+a+shift+"
4、关闭一个虚拟终端
ctrl+a+k或者exit
5、挂起screen(挂起之后你又回到了创建screen的shell)
ctrl+a+d
6、重新连接screen
screen -ls列出当前挂起的screen
比如有这样一条“8888.XXX (Detached)”
那么可以使用screen -r 8888或者screen -r XXX来重新连接。
对于文章开头的问题,应该可以解决了,你连上远程主机后,先不要急于运行你的指令,而是先创建一个screen,然后在screen的虚拟终端里面运行你的指令,要断开连接之前先把screen挂起,下次连进来的时候你只需要重新连接你的screen,你会发现你的指令已经乖乖地执行完毕或者正在执行而不是被迫中断了。
一般以上的用法已经足够,如果需要更多,请直接screen --help。顺便说一下,一般发行版是不带这个软件的,你需要自行安装,ubuntu下面就直接sudo apt-get install screen。
语 法:
screen [-AmRvx -ls -wipe][-d < 作业名称 >][-h < 行数 >][-r < 作业名称 >][-s <shell>][-S < 作业名称 >]
参 数:
-A 将所有的视窗都调整为当前终端机的大小。-d <作业名称> 将指定的 screen 作业离线。-h <行数> 指定视窗的缓冲区行数。-m 即使当前已在作业中的 screen 作业,仍强制建立新的 screen 作业。-r <作业名称> 恢复离线的 screen 作业。-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的 screen 作业。-s<shell> 指定建立新视窗时,所要执行的 shell。-S <作业名称> 指定 screen 作业的名称。-v 显示版本信息。-x 恢复之前离线的 screen 作业。-ls 或–list 显示当前所有的 screen 作业。-wipe 检查当前所有的 screen 作业,并删除已经无法使用的 screen 作业。
如果遇到attach的状态,但就是进不去的话,这样操作: screen -dr sessions ,对着这个表,就知道意思啦。
screen 翻页。
[Ctrl] + [A],再按 [ESC],进入复制模式
备注
在每个 screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help,显示简单说明
C-a ” -> 列出终端列表 #这个吊
C-a A -> 重命名终端
C-a c -> 创建新的终端, 并切换到该终端
C-a d -> 暂时断开会话, 但所有任务都依然执行
C-a K -> 关闭当前终端, 并切换到下一个终端 (当没终端时 退到原始 shell 终端)
C-a n -> 切换到下一个终端
C-a p -> 切换到上一个终端
C-a t -> 显示当前时间, 和系统的 load
C-a S -> 新建水平线分割终端
C-a Tab -> 水平线切换终端
C-a X -> 关闭当前终端
C-a + -> 扩大当前终端
C-a – -> 缩小当前终端 C-a [Space] -> 窗口切换
C-a 0-9 -> 在 0-9 个终端之间切换
C-a C-a -> 最近使用的 2 个窗口切换
C-a w -> 列出终端列表 #在标题上面显示,一般般把
C-a x -> 锁住当前窗口,需用用户密码解锁
C-a z -> 把当前会话放到后台执行,用 shell 的 fg 命令则可回去。
C-a ? -> Help,显示简单说明
C-a ” -> 列出终端列表 #这个吊
C-a A -> 重命名终端
C-a c -> 创建新的终端, 并切换到该终端
C-a d -> 暂时断开会话, 但所有任务都依然执行
C-a K -> 关闭当前终端, 并切换到下一个终端 (当没终端时 退到原始 shell 终端)
C-a n -> 切换到下一个终端
C-a p -> 切换到上一个终端
C-a t -> 显示当前时间, 和系统的 load
C-a S -> 新建水平线分割终端
C-a Tab -> 水平线切换终端
C-a X -> 关闭当前终端
C-a + -> 扩大当前终端
C-a – -> 缩小当前终端 C-a [Space] -> 窗口切换
C-a 0-9 -> 在 0-9 个终端之间切换
C-a C-a -> 最近使用的 2 个窗口切换
C-a w -> 列出终端列表 #在标题上面显示,一般般把
C-a x -> 锁住当前窗口,需用用户密码解锁
C-a z -> 把当前会话放到后台执行,用 shell 的 fg 命令则可回去。
exit:关闭当前终端 (注:和 “C-a c” 一样
Ctrl-a:
:screen <command> 新建 screen 终端,并运行命令 < command>
:resize <height> 改变当前窗口高度为 < height>
:quit 退出 screen 关闭所有 screen 终端,结束其中所有任务 Ctrl-a <Esc> 进入选择模式
<PageUp> 或 Ctrl-u 光标上移一页
<PageDown> 或 Ctrl-d 光标下移一页
<Left> 或 h 光标左移一格
<Down> 或 j 光标下移一行
<Up> 或 k 光标上移一行
<Right> 或 l 光标右移一格
<Space> 选择开始,选择结束
<Esc> 退出选择模式,翻页模式
Ctrl-a ] 粘贴选择的内容
:screen <command> 新建 screen 终端,并运行命令 < command>
:resize <height> 改变当前窗口高度为 < height>
:quit 退出 screen 关闭所有 screen 终端,结束其中所有任务 Ctrl-a <Esc> 进入选择模式
<PageUp> 或 Ctrl-u 光标上移一页
<PageDown> 或 Ctrl-d 光标下移一页
<Left> 或 h 光标左移一格
<Down> 或 j 光标下移一行
<Up> 或 k 光标上移一行
<Right> 或 l 光标右移一格
<Space> 选择开始,选择结束
<Esc> 退出选择模式,翻页模式
Ctrl-a ] 粘贴选择的内容