写了个Bug,误执行rm -fr /*,瞬间背后一凉
前几天 , 临近五一节 , 想到有 5 天假期 , 我就开始飘了 。 于是写个简单的 Bash 脚本都不上心了 , 写完后检都不检查 , 直接拖到到实体服务器跑 。
本文插图
图片来自 Pexels
结果一跑起来 , 发生不对劲 , 怎么一个简单脚本跑了 10 秒还没结束 , 于是立马 Ctrl+C 一顿操作停掉了运行中的脚本 。
本文插图
接着 , 习惯性的输入了 ls , 结果 what?找不到 ls 命令?
本文插图
瞬间背后一凉 , 慌慌张张打开了脚本 。 发现问题了 , 我写了个巨蠢的 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 的值是 ${lic_path}/new_license 这条命令执行的结果 , 问题这哪是命令啊 , 所以肯定返回空值给 new_lic_dir 变量 。
我写的那么温柔的代码 , 竟然变成了穷凶极恶的删库代码 。
本文插图
这下原因是找到了 , 反引号应该改成双引号才对 。 (内心 OS:你真菜呀 , 那么简单的赋值命令都写错!)
哈哈哈 , 确实菜 , 都说了嘛 , 快五一了 , 是飘着写这份代码的 。 所以习惯性开启程序员内容的第一大武功:Crtl+C 和 Crtl+V 。
把第一条赋值 lic_path=`pwd` 语句 , 复制粘贴了 , 然后只改了变量名 , 没注意反引号要修改成双引号 , 所以造成了删库的悲剧 。
保留案发现场
既然发生了删库的事情 , 千万不要重启服务器 , 也不要关闭 SSH 连接的会话 , 而是要保留案发现场 , 接着查查还剩什么 。
PS:这不是吹大炮嘛?ls 都没了 , 还怎么查?
- 【药品】这4种药品被纳入青岛全面补充医保支付范围 15日起执行
- 车辆知多少朱晓静成为首任女性总裁及首席执行官,沃尔玛中国换帅
- DV现场丰巢给“亲爱的用户”写了封信,新一轮的讨论又来了→
- 市界联想又成被执行人,一个半月内两次,执行金额超26万元
- 安源区人民法院驻法院纪检监察组到金融审判庭开展金融审判执行岗位廉洁风险座谈会
- 科技边角料执行标的超21万元,58同城再遭法院列为执行人
- [吉林省人民检察院]吉林女子拍得19年前债权 收执行款后被判返还2000万元
- Wind资讯鲍威尔下周给出信号,美联储执行负利率?华尔街众说纷纭
- 科技亿点通手机中国高度评价:一加8 Pro改写了手机显示领域的竞争规则
- 『新规』6月起四川执行农村宅基地管理新规 农户申请宅基地原则上要在两年内完成建房