与 tmux 工具较为类似,sreen 命令同样提供在唯一个的命令行终端上进行多窗口切换和管理的基本功能( 关于 tmux 基本操作可参见笔者的博文 终端复用工具 tmux 基本操作教程 )。

  screen 命令以会话( session )为基础为用户提供终端复用功能,会话可以被认为是后台运行的程序,其中可以进行命令执行、新窗口创建等操作,不同的会话可以包含有不同的运行内容。当终端绑定到特定会话上时,则该终端会显示该会话的信息,包括会话中包含的窗口、执行的命令、输出等。当终端从当前会话解除绑定时,当前终端不再显示会话的内容,但会话仍然独立的运行在后台,只有当会话中不再有正在运行的程序时(包括窗口运行的 shell 程序),该会话自动被结束。

screen 安装

  screen 的安装方式与之前介绍的 tmux 大致相同,用户可通过 apt 命令直接在个人计算设备上进行安装。与 tmux 不同的是,一般的 Ubuntu 服务器操作系统会自带 screen 程序,故而用户使用服务器时,可直接通过 screen 命令进行终端复用和管理。

    apt-get install screen        //通过 apt 安装 screen 命令

  

screen 基本操作

  想要使用 screen 命令的功能,既可以在 shell 中直接输入 screen + 操作 格式的命令执行操作,又可以通过 screen 提供的 <prefix> + 功能键 的方式进行操作。其中前者可在任何可执行命令行操作的终端中运行,后者只有绑定了 screen 的会话后的终端才能使用。

    screen operation        // operation 指定执行动作,可在任意终端中运行
<prefix> 功能键      // 指定特定 screen 功能,仅可在绑定了 screen 会话的终端中使用

  在 screen 创建的窗口中,默认用户的按键操作直接作为终端的按键输入,只有当用户输入特定的命令前缀( prefix )时,后续的按键输入才会根据 screen 命令与按键的绑定情况被解释为特定的 screen 操作,这一点与 tmux 命令的 <prefix> + 功能键 的控制方式相类似。 screen 默认的命令前缀为 Ctrl + a ,在输入命令前缀之后,用户键入 screen 命令所支持的功能按键,即可执行指定的 screen 操作。

  会话管理

  当用户在某一终端运行 sreen 命令时,当前终端即进入某个 screen 创建的会话,新建的会话默认拥有一个运行 shell 的窗口,用户可在该窗口中进行所需操作,并通过 screen 命令进行会话中新窗口的创建、对某个窗口进行面板划分等操作。用户可通过 screen 命令脱离( detach )某个会话,则该会话会在后台运行而不再显示到终端上,当前终端也可通过 screen 命令绑定( attach )到某个会话上,从而显示目标会话中的窗口内容,以供用户操作。当会话中所有的窗口均退出时,则 screen 会话自动结束

  用户可通过 screen -S 会话名 创建一个新的会话。在终端中运行上述命令后,当前终端即绑定( attach )新创建的会话,新建会话默认创建一个运行 shell 的窗口,用户即可在其中进行操作。

    screen -S session_name     //创建名为 session_name 的会话,不指定 session_name 时则创建匿名会话

  可通过 screen -d session_name 使得当前终端脱离( 不再显示 )指定会话,被脱离的会话仍在后台运行,可通过 screen 命令重新绑定.

    screen -d session_name        //脱离( detach ) 指定的会话,不指定 session_name ,则脱离当前会话

  可通过 screen -ls 命令显示所有存在的会话。

    screen -ls               //显示当前存在的所有会话

  可通过 screen -r session 使得当前终端重新进入某个会话,用户既可以使用每个会话拥有的独立编号指定会话,也可以通过创建会话时的会话名来指定会话。

    screen -r session          // 使得当前终端重新进入( attach )并显示 session 指定的会话

  用户也可以直接通过 screen command 的方式创建一个单窗口会话,command 直接指定新建会话中要运行的命令( 不再默认运行 shell ),命令执行完毕则会话自动退出。

    screen python main.py        // 创建一个运行 main.py 程序的会话,程序运行完成后会话直接退出

  对于一个 screen 会话而言,当其中运行的最后一个程序退出时( 如唯一的窗口中的 shell 程序退出 ),会话即自动结束。当会话非自然的无法使用时,通过 screen -ls 查看时,该会话后面会带有"dead"后缀,用户可通过 screen -wipe 直接上述删除这些会话。

    screen -wipe        //删除非正常( dead )状态的会话

  实例:

  1.在服务器登陆的 ssh 终端中新创建一个名为 test 的会话,此时终端会绑定到新创建的终端中并显示其窗口;

  

  2.在该窗口中输入 screen -d 则取消当前终端与会话的绑定,此时又回到之前的登录终端上,终端会显示 detach 信息;

  

  3.通过 screen -ls 命令显示所有存在的会话信息,这里可以看到笔者通过 screen 命令创建的会话的 id 和名字;

  

  4.用户可通过指定会话 id 或会话名的方式通过 screen -r 命令将当前终端重新绑定到指定会话中,终端会重新显示绑定终端的窗口内容;

  

    

  窗口管理

  在绑定了 screen 会话的窗口中,可以进行 screen 窗口的管理。一般而言常用的窗口管理方式有两种,一种直接通过命令行输入 screen 命令,另一种则是通过 screen 会话所支持的 <prefix> + 操作 的方式。在实际使用过程中,由于 screen 会话提供的窗口一般会用于执行用户所需的命令,故而命令行输入命令的方式并不总是可用的,笔者更常使用适用范围更广的 <prefix> + 操作 的方式进行窗口管理。下列命令即记录输入 <prefix> ( screen 的命令前缀为 Ctrl + a )后各个特定输入与命令之间的对应关系,不再记录命令前缀。注意,下列窗口管理的功能也可通过命令行输入命令的方式实现,具体可参见 screen 命令的 man 帮助文档。

  窗口创建和切换  

    c      //创建一个带有 shell 的新窗口并切换至新窗口
k      //关闭当前窗口(以及其中运行的程序)
d      //退出当前会话 i      //显示当前窗口的信息
w      //显示所有窗口的序号  
"      //显示所有窗口,以供选择切换
num             //num 为 0-9 之间的数字,切换至 num 对应的窗口
space / n         //切换到下一窗口( next )
backspace / p       //切换到上一窗口( previous )

  上述操作中,注意通过 <prefix> + d 的快捷操作直接退出退出当前会话,其效果与 screen -d 一致。

  窗口划分及其管理

  一个完整的终端窗口可以被进一步的划分为若干个小部分,每个部分均可独立运行程序。

    S        //将当前终端水平划分
|        //将当前终端垂直划分
tab       //终端中划分的不同区域进行顺序切换
Q        //删除除当前所在区域外的所有的区域
X        //删除当前区域

  辅助功能

    H          //开始/结束对当前窗口输出的记录,记录保存在名为 "screenlog.n" 的文件中
C          //清空当前屏幕(终端)
l          //刷新当前窗口
?          //显示按键与功能的绑定
[ //进入复制模式,其大致操作与 vim 类似,详见官方文档及文后参考资料
[ //将复制模式中复制的内容粘贴

  问题

  有时候会出现想要进入某个会话如 test,但是使用 screen -r test 时并没有进入已存在的会话,而是新建了会话的情况。通过 screen -ls 命令查看已经存在的会话,发现会话 test 处于 attached 状态,而不是正常的 detached 状态。这是因为存在 screen 不正常的脱离会话。解决方法是使用 -D 参数。

    screen -D -r test    #进入 test 会话,若无法进入,会先退出前一个远程对话显示(使得会话进入detached状态)

参考:

  Linux 命令大全 - screen 命令

  Screen User’s Manual

screen 命令基本操作教程的更多相关文章

  1. Screen命令安装使用教程

    在安装lnmp之前,我们一般先运行一下Screen程序,因为screen好像一个容器一样,把lnmp的安装过程保护了起来.以CentOS中安装lnmp为例,程序下载.编译都需要比较长的时间,如果中途遇 ...

  2. 天河2号-保持使用yhrun/srun时连接不中断 (screen 命令教程 )

    问题重述: 当我们使用天河机进行并行程序实验的时候,都会使用到yhrun/srun命令.在超算环境下,yhrun 命令用来进行提交交互式作业,有屏幕输出.但是容易受到网络波动影响导致断网或者关闭窗口最 ...

  3. Linux系统中的screen命令基本使用教程

    作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作. 也许你遇到过使用telnet或SSH远程登录linux,运行一些程序.如果这些程序需要运行很长时间(几个小时) ...

  4. 终端复用工具 tmux 基本操作教程

    简介 在 Linux 操作环境下,终端操作是发挥 Linux 强大命令功能的重要途径,但在本地主机操作中,针对不同任务开启不同的终端,在使用时进行频繁的终端切换在某些场合下是一种使人分心和疲惫的操作, ...

  5. linux screen 命令详解

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  6. linux screen 命令详解[转]

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  7. Linux screen 命令

    简单的来说 在screen里面敲的命令都是在后台的,所以不需要想bg那样,ctrl+z在bg把后台服务运行起来.而且下次可以直接进去screen作业的后台界面,可以看到我们过去敲的命令记录,即使你的C ...

  8. git常用命令-基本操作

    git常用命令-基本操作 1)      新增文件 新增了Test_1.java git add Test_1.java git commit –m “新增了Test_1.java” git push ...

  9. linux screen 命令详解(未验证+研究)

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

随机推荐

  1. rsyslog 配置 二

    转自:https://www.cnblogs.com/cherishry/p/6775163.html rsyslog 配置 二 # rsyslog configuration file # For ...

  2. asp查找</td>标记时遇到以外的文件结尾

    正确的<td></td> 错误的<td> 没有写完整

  3. 美图吴欣鸿:请不要叫我CEO

    关于采访提纲上“对互联网+如何理解?”的问题能否不做回答? 他的说法听上去谦虚而实在,“我一般对于这种大的.有点政策性的问题其实是Hold不住的,我的谈话风格就是比较随性.感性,也很难说去推出一个很强 ...

  4. [javaSE] 数组(排序-选择排序)

    两层嵌套循环,外层循环控制次数,内层循环进行比较 for(int x=0;x<arr.length;x++){ for(int y=0;y<arr.length;y++){ if(arr[ ...

  5. hdu 1226

    超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. Code Signal_练习题_shapeArea

    A 1-interesting polygon is just a square with a side of length 1. An n-interesting polygon is obtain ...

  7. css-css和html的结合方式(四种结合方式)

    (1)在每个HTML标签上面都有一个属性 style,把css和HTML结合在一起   <div style="background-color:red;color:blue;&quo ...

  8. <Android 基础(二十五)> View Animation

    简介 视图动画,主要包括位移,透明度,旋转和缩放,View本身的属性并没有发生变化,只是在这个视图上添加一些渐变的效果,所以总体而言,视图动画只能实现一些简单的动画效果,属性动画功能更强大. 使用 r ...

  9. fuzz实战之honggfuzz

    Honggfuzz实战 前言 本文介绍 libfuzzer 和 afl 联合增强版 honggfuzz .同时介绍利用 honggfuzz 来 fuzz 网络应用服务. 介绍 honggfuzz 也是 ...

  10. windows域渗透实战

    测试环境 域控: 192.168.211.130 已经控制的机器: 192.168.211.133 获取网络信息 查看机器的网络信息 ipconfig /all # 查看 网卡信息,获取dns 服务器 ...