先来看看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,? 可以查看还有很多快捷操作等待我们慢慢探索。