1、事因:
执行shell测试时,shell中rm -rf $path/* 变量$path为空,结果执行的命令是rm -rf /
事发时及时ctrl+c中断,导致只有/bin /boot目录删除
2、造成后果
大部分/bin下的shell命令无法执行,例如ls mkdir chmod tar ssh login。。。也就是想ssh远程登录也不行了。
3、解决过程
1)、好在我当前ssh会话没有关上,虽然新会话没有办法远程ssh,但只要现在这个会话不关闭那么就可以一直用着………………
2)、从集群其他机器将/bin里边的目录考入,因为tar和scp都用不了,所以使用一个取巧的方法,将shell文件放到web服务器的web目录,通过wget进行下载。
3)、。。。。但是,没有权限啊!!没有权限啊!!! 因为chmod也被删除了,无法赋值权限
4)、网上查这种情况没有办法,只能去机房使用系统光盘恢复bin目录,可怜的运维兄弟华丽的被我给坑了……我们真心不愿意去那该死的机房 ,太远太偏僻啦!方圆一公里尼玛连吃饭的地方都没有,想吃饭得去村儿啦啊啊啊!!!
5)、。。。在我们出发前曙光发生了,在一个台湾网站发现了通过perl来赋权限的方法,代码如下:perl -e "chmod 0777, 'mkdir'"
大概原理应该是perl中本身存在自己的赋权限的函数,所有通过perl可以给方法权限。。。。。
6)、权限赋上问题就好解决了……从别的节点考/bin /boot就好了…………
7)、shell命令都可以使用,但是boot这块会有风险,有可能导致重启机器会启不来;
所以解决方案分两部分,一部分是运维兄弟拿虚拟机测试一下删除/boot,然后再恢复/boot,最后再重启机器看看是否会出现问题;
另一部分是因为当前节点是master节点,申请采购新机器,将master在新机器做成ha,将这个问题机器平滑下线。
4、教训
1)、以前都说回收root权限,一直觉得小心小心就好了,没想到出来混真的是早晚都要挨刀;这两天就把root权限回收,以后root能不用就不用了!
2)、所有的rm -rf删除路径要删除是否为空……为空时不做删除。