代码改变世界

screen命令学习

2013-12-18 11:40  cmsd  阅读(430)  评论(0编辑  收藏  举报

我们有时需要做一些长时间的工作,比如格式化一个20T的raid磁盘,可能需要几个小时以上,如果只是执行格式化的话,由于网络不稳定,或者要下班了,还没格式化完成,关闭了ssh的窗口,命令可能就执行失败了,有人说用nohup后台执行,这个也是可以的,但是我们今天来用screen实现。

1. screen分session和window

    session就是执行screen [-S session-name]生成的一个会话,在会话中可以打开多个window

2. screen命令使用说明

   -A  将所有的视窗都调整为目前终端机的大小。
   -d <作业名称>  将指定的screen作业离线。
   -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
   -r <作业名称>  恢复离线的screen作业。
   -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
   -s  指定建立新视窗时,所要执行的shell。
   -S <作业名称>  指定screen作业的名称。
   -v  显示版本信息。
   -x  恢复之前离线的screen作业。
   -ls或--list  显示目前所有的screen作业。
   -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

   实例:

# screen -S test1          ##建立一个session,不带-S会随机session的名称
# ls /tmp                        ##执行一个命令
# Ctrl+a + d                   ##暂时离开当前session,回到原来的shell
# screen -ls                    ##查看所有session
    263.test1
# screen -r  263              ##返回session,263是指session名称前面的数字

3. 在session中的一些快捷键

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window 
C-a p -> Previous,前一个 window 
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换 
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里    每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些 
C-a t -> Time,显示当前时间,和系统的 load 
C-a K -> kill window,强行关闭当前的 window

4.其他说明

若 screen -ls 里有 Attached sessions:
screen -d [id] -> 强制离线,然后再screen -r [id]恢复

不需要的session screen -r 进去以后,exit即可