Linux命令: Screen

Screen是一款强大的会话管理工具,支持多窗口操作、会话恢复及共享等功能。本文介绍Screen的基本概念、工作原理及其常见使用场景,包括如何创建、挂起、恢复会话以及在多个窗口间切换。

screen

一. screen 简介

Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能

  • [官网](http://www.gnu.org/software/screen/)  
    
  • 文档

  • ####会话恢复

    假设你有一个命令需要执行两个小时(如:编译,数据备份等).在执行期间如果你临时有事需要出去一下或者ssh连接由于网络问题中断了.那你的工作也就停止了.如果使用screen,只要Screen本身没有终止,在其内部运行的会话都可以恢复

  • ####多窗口

    Screen可以创建多个session(会话),一个session又可以创建多个window(窗口).所有的session都独立的运行,并拥有各自的编号、输入、输出和窗口缓存

  • ####会话共享

    Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护

二. screen 原理

  • 典型的ssh连接

    screen

这里假设用户已经使用 SSH 登录到一台远程主机.最初在本地主机(比如您的笔记本或桌面计算机)上有一个本地 shell 和一个远程 shell.通常使用远程 shell 在远程主机上运行命令;输出经过加密之后通过 SSH 连接发送到本地 shell.(在各张图中,用蓝色表示当前可见的 shell 输出).但是,如果本地 shell 或远程 shell 或它们之间的连接中断了,远程 shell 就会终止,您的工作成果就会丢失.

  • Screen 管理 shell 窗口

    screen

    在远程主机上启动 Screen 之后的情况.Screen 实用程序启动,进而启动一个新的 shell 窗口 A,可以在此窗口中运行命令.A 的输出是可见的(由蓝色表示);这个 shell 的输出经过 Screen,再经过远程登录 shell,最后通过 SSH 到达本地登录 shell

  • Screen 管理 shell 窗口

    screen

    当用户ssh连接中断.Screen 代理仍然存在,它控制的所有窗口也还存在,但是与 Screen 的连接临时切断了,这会让用户返回到远程登录 shell.

  • Screen 可以管理多个窗口

    screen

    上图显示为用户重新建立了到 Screen 的连接,还创建了另外两个窗口(B 和 C).窗口 A 和 B 继续运行 shell 和所有附属作业,但是只有 C 的输出是可见的.当然,可以在窗口之间切换以监视各个作业的状态

  • Screen 提供多个会话,每个会话有多个窗口

    screen

    Screen可以同时运行多个session,每个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环境下的快捷键

    在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

C-a ? -> 显示所有键绑定信息 C-a c -> 创建一个新的运行shell的窗口并切换到该窗口 C-a n -> Next,切换到下一个 window C-a p -> Previous,切换到前一个 window C-a 0..9 -> 切换到第 0..9 个 window C-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 选定的内容贴上


- ####**创建一个screen**

  创建一个会话名叫test的screen,控制台会闪一下之后跟普通shell环境没有任何差别,但是此时您已经进入screen环境中,您可以使用screen相关的命令,快捷键等
```bash
[root@localhost ~]# screen -S test
  • ####挂起一个screen

    detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响

Ctrl-a d 
  • ####查看screen信息

[root@localhost ~]# screen -ls
There are screens on: 28391.test (Detached) 1 Sockets in /var/run/screen/S-root.


- ####**恢复会话**
```bash
[root@localhost ~]# screen -r 28391      
  • ####新建一个窗口

    创建一个新的运行shell的窗口并切换到该窗口

Ctrl-a c
  • ####关闭一个窗口 关闭当前运行的窗口
Ctrl-a k
Really kill this window [y/n]: yes
  • ####会话共享 还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:
[root@TS-DEV ~]# screen -x 28391      

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话 了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到 这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

  • ####一个小测试 screen测试

转载于:https://my.oschina.net/bluesummer/blog/888551

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值