Screen是一个 full-screen software program,它的功能有:
- 可以从一个SSH窗口中使用多个shell会话;
- 网断了的时候该shell会话仍是活跃的; 可以从任一终端重新连接或离开该shell会话;
- 跑长时间任务时,不用保持当前物理窗口始终开着;
所以,用了screen命令,再也不用担心因自己的失误而断送程序了。
一、screen安装
首先检查,看机器上是否已经安装:
[root@office ~]# which screen
/usr/bin/screen
一般是装在了/usr/bin/screen这个目录哈。
如果没有,可以选择:
1、本地安装:可以去https://www.gnu.org/software/screen/下载到本地解压安装。
2、在线安装:比如CentOS系统:
[root@office ~]# yum install screen
...
Complete!
二、启动screen
启动时,命令非常简洁:
[root@office ~]# screen
敲完此命令,出现以下窗口,按个空格键或回车键就进入screen的会话(session)啦。
[root@office ~]# screen -S hello
这样,连接该会话(后面会讲)时,就可以直接打名字,而不用编号逐个看应该是哪个会话了:
[root@office ~]# screen -r hello #
[root@office ~]# screen -x hello #多窗口模式
三、控制命令
screen使用“ctrl-a”作为控制键,通过它能将命令传送到screen。比如,按完“ctrl-a”后再按个“?”,就出现了screen的帮助界面:
四、创建窗口
在screen的窗口内,若想再创建一个新窗口,继续仰仗“ctrl-a”:“ctrl-a”+“c”,当然,之前的旧的screen窗口仍是活跃的。
如此一来,旧窗口里运行的程序可以继续撒丫子跑着,而我可以在新的窗口里琢磨点其他事儿。
五、窗口切换
如果我想从新的窗口回到旧窗口,或者已经打开了N个screen窗口,想切换到其中另一个,咋整?
screen提供了向前和向后两种命令:
1、向前一步(previous):切换到前一个窗口,用“ctrl-a”+“p”
2、向后一步(next):切换到后一个窗口,用“ctrl-a”+“n”
3、向前或向后m步:按数字来,你想切换到第6个窗口,就“ctrl-a” + “6”。
六、断开&重连
“断”-“连”可谓是screen中最牛逼的功能了,可以随时“断开”screen窗口跑出去玩,而你可以回到家或者办公室(只要能连上服务器的地方),就又可以重新“连接”回之前的窗口,它乖乖地就在那儿跑着你之前发出的指令,一点不敢动。
强大的“断开”命令就是“ctrl-a”+“d”(detach的意思),而“重连”命令则是要敲入命令,r是reattach之意:
[root@office ~]# screen -r
当然,在重连时,如果你的screen里有多个窗口,你需要选择下你要重连的窗口:
即再敲一条带窗口名字的命令,指定打开的窗口:
[root@office ~]# screen -r 5950.pts-16.bmcgpu1
如此,我就重新连接进入了第二个窗口。
七、记录screen的输出
如果想要得到该窗口做过那些事儿,有方法!得到这个记录:使用“ctrl-a”+“H”,它能创建该窗口的running log。
这样,如果你不小心误入歧途了,可以通过查询log看到都发生了什么changes,方便回到正确之处。该log就在当前创建log的目录下:
而且,该窗口之后的变化也都会写到这个log中。
八、使用闹钟
此处是个小惊喜!screen可以在长长的程序跑完时,屏幕上出现输出结果时,会用闹钟提醒你跑!完!了!
该惊喜命令为:“ctrl-a”+“M”,M是monitor的意思。
键入该命令后,会在底部出现提示,说已进入监视activity的状态:
再按一次“ctrl-a”+“M”就可以取消监视了。
其实screen是在监测窗口处于“activity”还是“inactivity”,如果发生从activity到inactivity的转换,或者反之,它都能监测到,因此可以给你响个闹铃~
如果想让它监视,但是不想被吵吵,就可以让screen监视时闭嘴:“ctrl-a”+“_”。
九、窗口上锁
如果你暂时离开去干别的,而怕人家进入你的screen窗口修改东西,那就给窗口上个锁吧!
上锁命令:“ctrl-a”+“x”
然后……要重新进入的话,得要输入密码:
如果你不知道密码,还是慎用此功能……当然,如果不小心用了,可以在非screen的状态用下面三条命令解除上锁:
bmcgpu1:~$ script /dev/null
bmcgpu1:~$ screen -d 3066.pts-20.bmcgpu1
bmcgpu1:~$ screen -r 3066.pts-20.bmcgpu1
就可以了。
十、关闭screen
当你工作干完了,最好还是把screen窗口关闭哈,不要让它留在那儿了,善始善终嘛。
关闭一个screen窗口的话,你在该窗口内输入“exit”命令,或者使用“ctrl-a”+“k”就退出来了。
当处于screen外面,想根据会话的编号或名字直接关闭该会话,而不用进入会话再关,则使用:
bmcgpu1:~$ screen -X -S [session # you want to kill] quit
当所有的窗口都退出的时候,整个screen会话也就结束啦,它会给个全部结束的提示的:
[screen is terminating]
当然啦,screen的丰富性及强大程度远不及这些,最好是去查阅它的官方document咯:https://www.gnu.org/software/screen/manual/screen.html