查看原文
其他

我谨慎地使用了rm -fr,为什么还是导致了灾难?

2017-02-14 天地本无心 生信媛

首先我们得明白, rm -fr 的意思, rm即为删除,-r 表示--recursive,递归的,简单地理解为一切的。-f 表示--force,  就是强制性的意思,不需要经过你的确认。
比如 rm -fr /home/wandering513/ 就表示删除家目录下的wandering513这个文件夹,但如果,你是一个激情洋溢的程序猿,再输入rm -fr /之后就敲入了回车….,这样就可能引发灾难。

前几个礼拜,我朋友圈里的各大技术公众号,纷纷在推送一个新闻,那就是Gitlab这家公司,因为错误的rm -fr操作,删掉了数据库目录,虽然进行了一系列补救措施,但最终Gitlab仍然丢掉了差不多6个小时的数据。之所以产生这个重大的技术事故,是因为Gitlab这个公司犯了两个致命的错误。第一个是运维人员是在生产环境上输入的删除数据库的命令, 另外一个是该公司的恢复数据时5种机制全部失效。其实这种问题,怨不得谁。就像泰坦尼克号,如果不是因为太多的舱进水,如果只是某个船舱进水,它仍然会保持漂浮而不至于沉没。

至于前年的携程宕机事故,原因更为离奇,据说是某个运维小哥,女朋友跟某公司高管好了,冲冠一怒为红颜,把公司的rm -fr / 把公司的根目录给删了,但这是据说而已,大家切勿当真。最后携程公司发布公告,经携程技术排查,确认此次事故是由于员工错误操作所导致,和外界猜测的相符合。

还有一个也是跟rm -fr 相关的,更加忧伤的故事。有一个程序猿错误地使用了rm -fr /操作,把一家公司给删没了…,这个哥们比上面的两个要聪明一点点,没有直接在命令行里删除。而是写了一个bash脚本,但是一个有问题的bash脚本… ,他想执行的是 rm -fr {foo}/{bar}, foo和bar是脚本中动态传递的两个变量。然而由于变量处理出错,通用语法未能成功地在bash中插值,所以最终的指令就变成了灾难性的rm -fr /,不仅删除了全部文件,并且把备份也删了。

最后这个小哥在网上发帖求助,大家只能安慰他,并且劝他请个好律师,这样赔得少点。

好像这些事离我们都很遥远,但是我的身边,包括我自己确实实实在在地经历过这样的事。

刚进入实验室的时候,就听说三师兄把大师兄的的主目录全部删掉了,事情这个样子的,三师兄去大师兄home目录下,打包拷东西,并且建了个文件夹还是怎么着,然后拷完之后,在删除自己建的文件的时候,不小心输入了rm -fr ., 这个命令把大师兄做进化两个多月,画的各种进化树全删了,后来大师兄转NGS方向,现在在美国做博后,据说还挺感谢三师兄当年删了他的家目录。

当初我听到这个消息,我的心情是这样的。


没过多久,这件事就发生在了自己的身上,囧。事情是酱紫的,实验室的二师兄向来神通广大,以收集各种难找的参考基因组,注释文件闻名,有一天我找他要一个物种的参考基因组。师兄直接给我ln -s /his_path/genome  /home/ztxu/softlink, 在我的目录下建了一个软连接。而当这个活做完之后呢,作为一个强迫症患者,不允许自己的主目录下有杂七杂八的东西,所以删除了软连接,大家看好了啊。

我的操作是 rm -fr softlink/,作为一个激情洋溢的半程序猿,总喜欢自动补全。 这下子把师兄原来的genome下的文件全删了!!!,隔了半月,师兄在群里说,谁把我文件夹删了? 这件事惊动了老板。 后来我反复测试,之后弄清楚了原委,然后主动自首,幸好师兄有备份,这场风波才这么过去。

如果我当初的操作是rm -fr softlink, 那没事,就是删除了softlink这个软链接。但我多输入了一个rm -fr softlink/ ,那就坏事了,这个操作是把软连接指向的原链接下的东西全部删光!

这件事情,导致了我们实验室的权限改革,每个人的家目录只能自己可读可写可执行; 公共目录里,大家只能读。并且,各位看客要明白一个道理:今后谨慎地给菜鸟建软连接!!!并且自己的重要文件,比如脚本,pipeline 之类的东西,多弄几个备份。

最后,希望大家能够明白,rm -fr 的严重后果,谨慎使用。同时,大家不要在自己的家目录下测试这里面我提到的东西,不然大家自行负责~
最后,祝大家节日快乐~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存