周末误删根目录《就这样把根目录删了!!!》,引起了广泛的讨论:
(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台服务器全被干掉了”,我们能在十几个小时恢复么?
后续和大家聊聊故障的快速恢复。