Linux之screen命令使用技巧

先来看看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 Apr1 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 zmh64 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 ~]#

【Linux之screen命令使用技巧】<<<<<<以下是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 Apr1 12:36 5923.screentest [root@centos7 12:39:16 ~]#ll /var/run/screen/S-root/ total 0 srwx------. 1 root root 0 Apr1 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"命令同时接入作业实现终端打印共享:
Linux之screen命令使用技巧
文章图片

因为screen会话能够共享因此在自己使用screen作业时小心有人来监视你哟,我们可以在作业中使用ctrl+a, * 来查看当前screen有多少个终端接入:
term-typesizeuser interfacewindowPerms ---------- ------- ---------- ----------------- --------------- xterm74x37root@/dev/pts/10(root@cento) rwx xterm74x37root@/dev/pts/00(root@cento) rwx

以上可以看到有pts/0和pts/1两个终端接入此screen作业。此时可以使用w命令看看系统登录情况:
[root@centos7 13:01:16 ~]#w 13:02:56 up2:58,5 users,load average: 0.00, 0.01, 0.05 USERTTYFROMLOGIN@IDLEJCPUPCPU WHAT rootpts/4192.168.30.112:540.00s0.05s0.00s w rootpts/5192.168.30.1:S.0 12:558.00s0.10s0.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 up3:02,6 users,load average: 0.03, 0.02, 0.05 USERTTYFROMLOGIN@IDLEJCPUPCPU WHAT rootpts/1192.168.30.112:5416.00s0.09s0.09s -bash rootpts/0192.168.30.112:158.00s0.13s0.13s -bash rootpts/4192.168.30.112:540.00s0.05s0.00s w [root@centos7 13:06:32 ~]#

另外,在screen作业中,使用ctrl+a,? 可以查看还有很多快捷操作等待我们慢慢探索。
Linux之screen命令使用技巧
文章图片

    推荐阅读