工具延展了人的能力,当你手头只有锤子时,世界在你眼里都是钉子,当你掌握了锤子、刨子、锯子、电锤、电钻一套工具之后,可做的事情就比较多了,简单的可以做个板凳,复杂的可以打套柜子。
今天我们来掌握screen,等screen掌握了你再去看nohug、fg、bg、tmux、byobu,你就知道什么时候该用锤子,什么时候该用电锤,虽然它们都带个锤字。
screen是窗口会话管理器,通过screen可以在服务器端起一个长期存在的会话,当出现网络中断或本地电脑蓝屏死机,会话不受干扰,仍可恢复。
我这样解释 screen 的作用估计会把软件作者气死,但这的确是大多数人使用screen的场景。Linux服务器管理员一般都会告诫新手,不要通过ssh登到服务器上直接执行需要长时间运行的任务,比如格式化大的分区、数据库导入导出操作。因为网络是不稳定的,说不定你的电脑的网线或电源线被人踢掉了,这时候ssh就断了,你执行的程序会有什么后果,这个谁有不知道。正常的流程是先ssh登陆到服务器,然后起一个screen会话,最后把你要做的事在screen会话中执行。做到这一步,就算你电脑被强行关机了,服务器上所执行的会话也不会受干扰。下面的动图演示了在screen会话中执行top,当连接窗口被强制叉掉,重新登陆服务器后执行top的会话仍然存活。
下面开始介绍命令
screen -S any_name #起一个会话
screen -r any_name #恢复一个会话
screen -ls #显示会话列表
常用的就这几个,剩下的都要在会话中用快捷键操作。我只列最基础的,等用熟了之后你自然会面临更复杂的场景。
screen中的快捷键与其它软件的快捷键不一样,它有一个唤醒键 ctrl+a,比如我执行 screen -S test , 进入到了会话环境。这时我想保留这个会话,而不是像上面动图那样叉掉窗口。这是要用到它的Detached快捷键,它的执行过程是ctrl+a, d 对就是这样描述的,先执行ctrl+a,然后再单敲一个d,代表detach。这时会话就进入后台模式,我们在屏幕上看到的就是恢复到执行screen -S test 之前的状态。因为是快捷键操作,这个录屏是看不到操作过程的,需要脑补一下。
有这几个命令就够了,screen -S test 启动会话,ctrl+a, d 从会话中解离出来,screen -r test 恢复会话。如果想退出会话,在会话中执行exit就可以了。
再多介绍一个,screen -d -r test,将 attache 状态的会话踢掉,然后自己登进去。有时不知道在哪儿 attache了这个会话,你不想去找,可以这样做。先踢掉再重登。
screen 有几组命令很相似,screen -d -r test 与 screen -D -r test 功能相似,但 -D -r 更过份它是强制踢掉。如果 -d -r 登不进去,可以试试 -D -r,使用screen我们最怕的就是起的会话无法恢复,如果遇到无法登陆的会话,这个保命技能一定要试试。
剩下的80%的命令都是screen作者为大家精心准备的,比如把一个窗口拆分成多个窗口,然后左移右移上移下移,一个窗口不够再开多个tab页,窗口之间的大小也可以通过命令来调节。screen的作者把大家的工作环境想象的非常的残酷,只有一个字符终端可用,没有鼠标只能通过键盘来操作Linux系统,但实际情况是大家都很懒,一个屏幕不够就来俩,能开多个terminal终端,就绝对不只开一个。所以,剩下的命令就不介绍了,连 byobu都简化到只用F2、F3、F4三个快捷键,你让screen用户记那么多干嘛。如果不是为了炫技或条件限制,没有人愿意在最原始的终端上干活,能在 X Window下使用 Terminal干嘛还要ctrl+alt+Fn切到真实终端上去受虐。