如何防止根目录被删?

2018-05-08 15:59 更新

周末误删根目录《就这样把根目录删了!!!》,引起了广泛的讨论:

(1)部分朋友表达了同情

(2)部分朋友建议买机票跑路

(3)部分朋友分享了类似的悲剧(例如:多一个空格)

rm -rf / home/work/logs/

(4)大部分朋友分享了避免类似悲剧的经验,今天将大伙的经验进行一个汇总,分享给大家,希望“误删根目录”的事情永远不再出现


一、悲剧回顾

执行了一个清理日志的脚本,大致的逻辑是:

...
cd ${log_path}
rm -rf *
...

看上去没有任何问题,进入到日志目录,然后把日志都删除。但是,当目录不存在时,悲剧就发生了

二、大伙建议

【命令替换】

点赞数最多的朋友“39度的风”建议:

生产环境把rm -rf 命令替换为mv,再写个定时shell定期清理,以模拟“回收站”功能


【收拢权限】

这个方案建议的人数最多

帐号权限的分离,线上分配work帐号,只能够删除/home/work/logs/目录,无法删除根目录。


【使用&&】

有部分朋友建议,使用&&

cd ${log_path}

rm -rf *

合并成一个语句

cd ${log_path} && rm -rf *

当前半句执行失败的时候,后半句不再执行。


【不使用cd】

对于

cd ${log_path}

rm -rf *

直接改为

rm -rf ${log_path}

不是cd到目录下再执行

这个方案个人感觉对于这个case可行,但不太通用,总有需要cd的场景吧


【判断目录是否存在】

制定编码规范,对目录进行操作之前,要先判断目录是否存在

确实,可是靠人的自觉来保证规范的执行,总感觉有些不太靠谱


【单元测试】

和制定编码规范类似,自测貌似比较难测出来,根据经验:rd往往以自己编写代码的思路和逻辑编写自测用例,来证明自己代码的正确性


【使用Python,避免使用shell】

这… 

貌似不太通用,技术讨论的第一大前提“不要有语言之争”(技术讨论的第二大前提“不要讨论哪个编辑器好用”)。


三、其他悲剧

除了部分朋友反馈也删除过根目录,还有朋友提到:

(1)删除过es数据

(2)删除过生产数据库

(3)删除过home目录

(4)误格式化过硬盘

还有朋友提到了携程之前的线上事故,我们都放下吃瓜看笑话的心态,别人还能够在十几个小时故障恢复,我们问自己一句,“假如我们线上20台服务器全被干掉了”,我们能在十几个小时恢复么

后续和大家聊聊故障的快速恢复



欢迎加入我的社群或关注公众号“架构师之路”进行讨论。

架构师之路二维码

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号