与 tmux 工具较为相似,sreen 命令一样提供在惟一个的命令行终端上进行多窗口切换和管理的基本功能( 关于 tmux 基本操做可参见笔者的博文 终端复用工具 tmux 基本操做教程 )。html
screen 命令以会话( session )为基础为用户提供终端复用功能,会话能够被认为是后台运行的程序,其中能够进行命令执行、新窗口建立等操做,不一样的会话能够包含有不一样的运行内容。当终端绑定到特定会话上时,则该终端会显示该会话的信息,包括会话中包含的窗口、执行的命令、输出等。当终端从当前会话解除绑定时,当前终端再也不显示会话的内容,但会话仍然独立的运行在后台,只有当会话中再也不有正在运行的程序时(包括窗口运行的 shell 程序),该会话自动被结束。python
screen 的安装方式与以前介绍的 tmux 大体相同,用户可经过 apt 命令直接在我的计算设备上进行安装。与 tmux 不一样的是,通常的 Ubuntu 服务器操做系统会自带 screen 程序,故而用户使用服务器时,可直接经过 screen 命令进行终端复用和管理。linux
apt-get install screen //经过 apt 安装 screen 命令
想要使用 screen 命令的功能,既能够在 shell 中直接输入 screen + 操做 格式的命令执行操做,又能够经过 screen 提供的 <prefix> + 功能键 的方式进行操做。其中前者可在任何可执行命令行操做的终端中运行,后者只有绑定了 screen 的会话后的终端才能使用。shell
screen operation // operation 指定执行动做,可在任意终端中运行 <prefix> 功能键 // 指定特定 screen 功能,仅可在绑定了 screen 会话的终端中使用
在 screen 建立的窗口中,默认用户的按键操做直接做为终端的按键输入,只有当用户输入特定的命令前缀( prefix )时,后续的按键输入才会根据 screen 命令与按键的绑定状况被解释为特定的 screen 操做,这一点与 tmux 命令的 <prefix> + 功能键 的控制方式相相似。 screen 默认的命令前缀为 Ctrl + a ,在输入命令前缀以后,用户键入 screen 命令所支持的功能按键,便可执行指定的 screen 操做。vim
会话管理
服务器
当用户在某一终端运行 sreen 命令时,当前终端即进入某个 screen 建立的会话,新建的会话默认拥有一个运行 shell 的窗口,用户可在该窗口中进行所需操做,并经过 screen 命令进行会话中新窗口的建立、对某个窗口进行面板划分等操做。用户可经过 screen 命令脱离( detach )某个会话,则该会话会在后台运行而再也不显示到终端上,当前终端也可经过 screen 命令绑定( attach )到某个会话上,从而显示目标会话中的窗口内容,以供用户操做。当会话中全部的窗口均退出时,则 screen 会话自动结束session
用户可经过 screen -S 会话名 建立一个新的会话。在终端中运行上述命令后,当前终端即绑定( attach )新建立的会话,新建会话默认建立一个运行 shell 的窗口,用户便可在其中进行操做。ssh
screen -S session_name //建立名为 session_name 的会话,不指定 session_name 时则建立匿名会话
可经过 screen -d session_name 使得当前终端脱离( 再也不显示 )指定会话,被脱离的会话仍在后台运行,可经过 screen 命令从新绑定.工具
screen -d session_name //脱离( detach ) 指定的会话,不指定 session_name ,则脱离当前会话
可经过 screen -ls 命令显示全部存在的会话。spa
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 相似,详见官方文档及文后参考资料 [ //将复制模式中复制的内容粘贴
参考: