Linux运维之screen

作者: ikaroskun | 来源:发表于2017-03-23 19:44 被阅读93次
    一、简介

    Linux系统的管理员经常是在远程通过ssh命令或者telent命令登录到服务器上,虽然这样十分方便,但是也有一个很大的缺陷-----在执行一些需要长时间的任务时,我们开启的连接不能够被断开,否则就会结束该任务,之前的都是无用功了。

    所以就出现了一个GUN计划开发的一个自由软件。GNU Screen。他可以将会话保存为一个session中。这样你断开连接之后,该进程仍在运行。重新连接之后,还可以恢复到之前的会话中。

    官方站点Screen

    二、使用简介:

    命令结构:

    screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
    

    相关参数的说明:

    • -A  将所有的视窗都调整为目前终端机的大小。
    • -d <作业名称>  将指定的screen作业离线。
    • -h <行数>  指定视窗的缓冲区行数。
    • -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
    • -r <作业名称>  恢复离线的screen作业。
    • -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
    • -s  指定建立新视窗时,所要执行的shell。
    • -S <作业名称>  指定screen作业的名称。
    • -v  显示版本信息。
    • -x  恢复之前离线的screen作业。
    • -ls或-list  显示目前所有的screen作业。
    • -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。
    三、Screen Session中的命令
    • C-a ? -> 显示所有键绑定信息
    • C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
    • 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 -> 显示所有窗口列表
    • C-a t -> Time,显示当前时间,和系统的 load
    • C-a k -> kill window,强行关闭当前的 window
    • C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
    • C-b Backward,PageUp 
      
    • C-f Forward,PageDown 
      
    • H(大写) High,将光标移至左上角 
      
    • L Low,将光标移至左下角 
      
    • 0 移到行首 
      
    • $ 行末 
      
    • w forward one word,以字为单位往前移 
      
    • b backward one word,以字为单位往后移 
      
    • Space 第一次按为标记区起点,第二次按为终点 
      
    • Esc 结束 copy mode 
      
    • C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上
    四、Install

    本机是在centos7下,使用命令

    sudo yum install screen
    # ubuntu
    sudo apt-get install screen
    
    五、示例:

    1.查看当前保存的session会话:

    命令:screen -ls/-list
    
    [alex@bogon ~]$ screen -list
    No Sockets found in /var/run/screen/S-alex.
    

    2.创建一个新的session会话:

    命令 screen - S myTask
    
    创建之后查看  screen -ls
    
    [alex@bogon ~]$ screen -ls
    There is a screen on:
    20653.myTask    (Attached)
    1 Socket in /var/run/screen/S-alex.
    

    3.断开连接之后重新恢复:

    命令:screen -r [pid]
    
    [alex@bogon ~]$ screen -r 20653
    
    此时就会重新连接上之前的会话。
    

    4.关闭会话:

    使用exit可以直接退出会话。
    或者使用快捷键C-a k
    

    5.清除dead会话:

    如果由于某种原因其中一个会话死掉了(如杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话。

    [alex@bogon ~]$ screen -ls
    There is a screen on:
    21387.myTask    (Detached)
    1 Socket in /var/run/screen/S-alex.
    
    [alex@bogon ~]$ kill -9 21387
    [alex@bogon ~]$ screen -ls
    There is a screen on:
    21387.myTask    (Dead ???)
    Remove dead screens with 'screen -wipe'.
    1 Socket in /var/run/screen/S-alex.
    
    [alex@bogon ~]$
    
    此时可以使用screen -wipe命令清除该会话
    
    alex@bogon ~]$ screen -wipe
    There is a screen on:
    21387.myTask    (Removed)
    1 socket wiped out.
    No Sockets found in /var/run/screen/S-alex.

    相关文章

      网友评论

        本文标题:Linux运维之screen

        本文链接:https://www.haomeiwen.com/subject/xgianttx.html