CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?


CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?
本文插图

作者 | 小林coding
责编 | 伍杏玲
出品 | CSDN博客
小林在五一节前 , 想到有 5 天假期 , 心里开始飘了 。
写个简单的 Bash 脚本都不上心了 , 写完连检查都不检查 , 直接拖到实体服务器跑 。
结果一跑起来 , 发生不对劲 , 怎么一个简单脚本跑了 10 秒还没结束 , 于是立马直接 ctrl + c 一顿操作停掉了运行中脚本 。
接着 , 习惯性的输入了 ls , 结果 what?找不到 ls 命令?
CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?
本文插图

瞬间背后一凉 , 慌慌张张打开了脚本 。
发现问题了 , 小林我写了个巨蠢的 Bug , 间接执行了 rm -fr /*, 这不意味着我删库了?
这台是公司的授权服务器呀 , 被小林这么一整 , 公司历史的授权记录和其他重要信息不就丢了?
心里很慌的小林 , 跟朋友们说了这件事 , 朋友建议我先第一时间上报给 leader , 不要把删库的事情瞒着 。
于是 , 小林就向 leader 说了我删库事情 , 本以为会被痛批一顿 。
结果 leader 笑着说:“没事 , 你先看看重要的文件还在不在 。 不过你这么一整 , 我突然想起编译服务器半年没备份 , 我先备份一下我的编译服务器 , 防止哪天也被你们删库了 。 ”
我:“????”
吃瓜的小伙伴 , 是不是觉得小林要删库跑路了?哈哈哈 , 小林没跑路 , 反而是恢复了回来 , 所以接下来说说小林是如何「从删库到恢复」的 。
初探案发现场
来看看小林写的垃圾代码 , 是如何引发这次的删库 。
既然发生了 rm -fr /* 的现象 , 那必然 new_lic_dir 这个变量是空的 。
所以导致执行 rm -fr $new_lic_dir/* 这条语句的时候 , 变成了 rm -fr /* 删库语句 。 很好 , 凶器找到了 。
那为什么 new_lic_dir 会是空的呢?
细心的小伙伴肯定察觉出来了 , 是因为给 new_lic_dir 变量赋值的时使用了反引号 。
没错 , 就是反引号的原因 。
反引号在 Linux Shell 命令行中有特殊的含义:反引号间的内容 , 会被 Shell 先执行 。 其输出被放入主命令后 , 主命令再被执行 。
也就是说 ,new_lic_dir 的值是 $/new_license 这条命令执行的结果 , 问题这哪是命令啊 , 所以肯定返回空值给 new_lic_dir 变量 。
小林写的那么温柔的代码 , 竟然变成了穷凶极恶的删库代码 。
这下原因是找到了 , 反引号应该改成双引号才对 。
小林你真菜呀 , 那么简单的赋值命令都写错 。
哈哈哈 , 确实菜 , 都说了嘛 , 因为要五一了 , 小林是飘着写这份代码的 。
所以习惯性开启程序员内容的第一大武功:Crtl+C 和 Crtl+V 。
把第一条赋值 lic_path=`pwd` 语句 , 复制粘贴了 , 然后只改了变量名 , 没注意反引号要修改成双引号 , 所以造成了删库的悲剧 。
保留案发现场
既然发生了删库的事情 , 千万不要重启服务器 , 也不要关闭 ssh 连接的会话 , 而是要保留案发现场 , 接着查查还剩什么 。
还好这次是比较幸运 , 因为在执行脚本的时候 , 第一时间发现不对劲 , 立马掐断了还在运行的脚本 , 所以并非 Linux 所有文件都被删除了 。
只要我掐的快 , rm -fr /* 就干不死我 。
虽然 ls 被删了 , 但所幸发现 cd 命令还能用 。
只要 cd 用的好 , 它也能用出的 ls 效果 。 很简单 , 只需 cd + Tab 键就会自动出现指定目录下的所有文件 。
CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?
本文插图

有了 cd + Tab 键 , 我们就可以查看每个目录下的文件 , 于是就可以一步一步来确认哪些系统文件被删了 。


推荐阅读