先来看看Screen的官方说明: GNU's Screen 官方站点:http://www.gnu.org/software/screen/

简单来讲Screen 个人来说主要用于执行长时间不能中断的备份、测试和传输任务等(恢复会话);以及共享终端会话窗口(窗口共享)

使用 screen -S <会话名> 创建并进入screen会话,例如:

[root@centos7 11:11:29 ~]#screen -ls
No Sockets found in /var/run/screen/S-root.

[root@centos7 11:11:35 ~]#screen -S zmh
[root@centos7 11:11:40 ~]#screen -ls
There is a screen on:
        4705.zmh        (Attached)
1 Socket in /var/run/screen/S-root.

这里创建并进入名叫“zmh”的screen作业,再使用screen -ls查看当前存在的screen会。“Attached”表示这个screen会话是活动的(个人理解为有人接入)。其中“3891.zmh” 3891表示此screen会话的进程号,zmh表示screen会话名。 在我们使用ctrl+a,d(同时按ctrl 和 a 再松手按d)剥离screen会话后,可以使用以下方法再次接入screen会话:

[root@centos7 11:33:12 ~]#screen -ls
There is a screen on:
	4705.zmh	(Detached)
1 Socket in /var/run/screen/S-root.

[root@centos7 11:33:18 ~]#screen -x 4705

或者:

[root@centos7 11:34:17 ~]#screen -ls
There is a screen on:
	4705.zmh	(Detached)
1 Socket in /var/run/screen/S-root.

[root@centos7 11:34:20 ~]#screen -r zmh

两种方法后面参数分别可以跟上进程或者会话名都可以

1.利用screen来执行一个长时间任务,这里使用ping来测试:

[root@centos7 11:50:21 ~]#screen -x zmh
[root@centos7 11:54:25 ~]#
[root@centos7 11:54:25 ~]#screen -ls
There is a screen on:
	4705.zmh	(Attached)
1 Socket in /var/run/screen/S-root.

[root@centos7 11:54:27 ~]#ping 192.168.30.1
PING 192.168.30.1 (192.168.30.1) 56(84) bytes of data.
64 bytes from 192.168.30.1: icmp_seq=1 ttl=128 time=0.362 ms
64 bytes from 192.168.30.1: icmp_seq=2 ttl=128 time=1.46 ms
64 bytes from 192.168.30.1: icmp_seq=3 ttl=128 time=1.26 ms
^A64 bytes from 192.168.30.1: icmp_seq=4 ttl=128 time=1.00 ms
d64 bytes from 192.168.30.1: icmp_seq=5 ttl=128 time=1.35 ms
^C
--- 192.168.30.1 ping statistics ---
6 packets transmitted, 5 received, 16% packet loss, time 5021ms
rtt min/avg/max/mdev = 0.362/1.090/1.465/0.394 ms

然后ctrl+a,d退出,并logout终端:

[root@centos7 12:13:09 ~]#screen -ls
There is a screen on:
	4705.zmh	(Detached)
1 Socket in /var/run/screen/S-root.
[root@centos7 12:13:13 ~]#
[root@centos7 12:14:40 ~]#exit
logout
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(192.168.30.103_Cent7.4) at 12:17:45.

Type `help' to learn how to use Xshell prompt.
[c:\~]$ 

Connecting to 192.168.30.103:22...   *<<<<<<<<<<重新登录*
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Sun Apr  1 11:39:36 2018 from 192.168.30.1
[root@centos7 12:15:15 ~]#screen -x zmh
[detached from 4705.zmh]
[root@centos7 12:15:23 ~]#screen -x zmh

64 bytes from 192.168.30.1: icmp_seq=20 ttl=128 time=1.43 ms
64 bytes from 192.168.30.1: icmp_seq=21 ttl=128 time=1.08 ms
64 bytes from 192.168.30.1: icmp_seq=22 ttl=128 time=1.19 ms
64 bytes from 192.168.30.1: icmp_seq=23 ttl=128 time=1.73 ms
64 bytes from 192.168.30.1: icmp_seq=24 ttl=128 time=1.23 ms
64 bytes from 192.168.30.1: icmp_seq=25 ttl=128 time=0.635 ms

可以看到screen会话ping任务仍然在执行未中断。

这里还有个疑问:其他系统用户能够接入此screen会话吗?

[root@centos7 12:29:23 ~]#screen -ls
There is a screen on:
        4705.zmh        (Attached)
1 Socket in **/var/run/screen/S-root**.

[root@centos7 12:30:01 ~]#

<<<<<<以下是zmh用户的screen状态>>>>>>>>>>>

[zmh@centos7 12:30:12 ~]$screen -ls
No Sockets found in **/var/run/screen/S-zmh**.

[zmh@centos7 12:30:14 ~]$

显然其他用户看不到root用户创建的screen 会话。绿色部分可以看出每个用户各自的screen会话路径信息不同。在创建一个zmh用户下的screen作业后,进一步查看此路径可以看到,每个screen作业会打开一个socket文件

[root@centos7 12:36:50 ~]#ll /var/run/screen/S-zmh/
total 0
srwx------. 1 zmh zmh 0 Apr  1 12:36 5923.screentest
[root@centos7 12:39:16 ~]#ll /var/run/screen/S-root/
total 0
srwx------. 1 root root 0 Apr  1 12:15 4705.zmh
[root@centos7 12:39:22 ~]#

因此这里也提供另一种关闭screen会话的方式,即删除这些socket文件

[root@centos7 12:39:22 ~]#rm -f /var/run/screen/S-zmh/5923.screentest 
[root@centos7 12:42:11 ~]#rm -f /var/run/screen/S-root/4705.zmh 
[root@centos7 12:42:37 ~]#screen -ls
No Sockets found in /var/run/screen/S-root.

[root@centos7 12:42:39 ~]#

2.Screen的另一个比较实用的功能是能够多终端会话共享,以下是使用"screen -S ZMH"开启一个叫ZMH的screen作业,并在两个终端使用"screen -x ZMH"命令同时接入作业实现终端打印共享:

因为screen会话能够共享因此在自己使用screen作业时小心有人来监视你哟,我们可以在作业中使用ctrl+a, * 来查看当前screen有多少个终端接入:

term-type   size         user interface           window       Perms
---------- ------- ---------- ----------------- ----------     -----
 xterm       74x37        root@/dev/pts/1          0(root@cento) rwx
 xterm       74x37        root@/dev/pts/0          0(root@cento) rwx


以上可以看到有pts/0和pts/1两个终端接入此screen作业。此时可以使用w命令看看系统登录情况:

[root@centos7 13:01:16 ~]#w
 13:02:56 up  2:58,  5 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/4    192.168.30.1     12:54    0.00s  0.05s  0.00s w
root     pts/5    192.168.30.1:S.0 12:55    8.00s  0.10s  0.10s /bin/bash
[root@centos7 13:02:56 ~]#

这里虽然只看到两个TTY登录,其中pts/5 的FROM IP,192.68.30.1:S.0后面有:S表示该TTY是screen作业,在本实验中就隐藏着两个登录TTY终端。 分别在两个接入screen作业中退出ctrl+a,d 再用w命令查看登录情况,可以看到screen作业占用的TTY终端已经释放,隐藏的连个家伙现身了:

[root@centos7 13:02:56 ~]#w
 13:06:32 up  3:02,  6 users,  load average: 0.03, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.30.1     12:54   16.00s  0.09s  0.09s -bash
root     pts/0    192.168.30.1     12:15    8.00s  0.13s  0.13s -bash
root     pts/4    192.168.30.1     12:54    0.00s  0.05s  0.00s w
[root@centos7 13:06:32 ~]#

另外,在screen作业中,使用ctrl+a,? 可以查看还有很多快捷操作等待我们慢慢探索。