我在公司的服务器上执行了sudo rm -rf /*

TL;DR

  * 依靠人的小心谨慎是不靠谱的,人总有失误的时候
  * 看了下docker volume的权限机制,貌似是从docker image中继承。
  * 写了两个脚本,用来把rm alias到mv,避免手滑

又是一个可以摸鱼的周五晚上,sensespider系统测试了一天,fix了几个Bug,似乎可以发布了。系统一直是部署在了docker中..这几天测试产生了不少结果文件在host的volume中... 看着不舒服,干脆删一下好了

嗯?怎么所有者是root。。。那我sudo一下,也没什么大不了的嘛

然而手滑了... 打了个 sudo rm -rf /*   ...

提示无法删除/boot  device is busy...

吓了一跳,下意识Ctrl-C...

从新在本地ssh到服务器,发现已经登不上去了...报错在找不到sh

看了一下,果然服务器的/bin 目录已经被删干净了...

google了一些从rm中恢复文件的帖子...

试图用 sudo apt-get install  装一些工具包...

这个时候已经提示我找不到apt-get 了。。。

非常慌。花了3分钟思考了我到目前为止的一生

看了下scp命令还在,赶紧趁着这个终端回话还没关,把本地的/bin目录拷贝了上来。

试了下,ssh命令可以用了。 这样至少后续的修复(在不麻烦IT同事的情况下)不用跑机房了。有些镇定。

然后发现apt-get 命令还是用不了。。。思考了1分钟。。。

然后发现服务器用的是centos.......

再试了各种常用命令,试了docker相关的各种命令,都可以正常工作。

然而整个人都被吓傻了....睡了一觉才回过神。

又查了下docker volume权限的事情,发现挂载目录继承docker image中用户的权限是feature  Volumes files have root owner when running docker with non-root user.   那似乎就没办法了。

以及写了两个脚本,来避免手滑,分别是zsh环境和bash环境下的。

kkrm