程序员亲手把一家公司弄垮
是一种怎样的体验
而真有个程序员
还真就这么做了
它弄错了一行小小的代码
却毁了整个公司
这行小小的代码静悄悄的
把他整个公司
删个精光
个精光
精光
光
……
事情是这样的Marco Marsala 是一家小型主机托管公司的老板,他的业务就是给客户提供主机托管。但他最近遇到了一个天大的麻烦:由于脚本错误,他不慎删光了所有客户的数据。更糟糕的是,由于 Bash 脚本代码中包含了一行变量未定义的“rm -rf /”,连备份也没有了!
在谈这个问题前
我们先来科普一下
rm -rf 命令
到底是什么鬼
???
rm 是 linux系统下删除文件的命令
-r 代表删除这个下面的一切
一切的一切,all的all
f 表示不需要用户确认,是直接执行的那种
通常这个命令都是指定文件夹用的
举个例子来说明
rm -rf /home/test/
就是指删除
/home/test/这个文件夹下面的所有东西
但是如果后面的文件夹路径
没有加对......... rm -rf /的后缀
那么就意味着
整个服务器会
对
没错
BOOM的一声
灰飞烟灭,全部消失
这个小哥当然不会傻到
直接去执行这个变态的命令
小哥表示
当时他正在运行一个BASH脚本
但是脚本里似乎有一个问题
导致执行这个删除命令的时候
删除指定文件夹的那个参数
没有传递过去
结果就
……
不明白呀
???
那我给你举个简单的例子
我现在让张三在电脑上删除
一个名叫“game”的文件夹中的内容
我=那个倒霉的程序小哥
张三=一个程序脚本
我原本给张三下的指令是
把电脑上名叫game的文件夹中的内容删除
结果张三可能是没明白我的意思
或者
漏掉我所下的指令
给我吧整个电脑上所有的文件夹都删除了
很遗憾
小哥再次表示
当时为了执行维护
他把远程的备份的驱动器也挂在了这个服务器上
于是所有的东西也就顺带这么一起删掉了
你以为事情就这样完了
还没有
还有后续
这一错误源自 Ansible 上糟糕的代码设计
这款 Linux 实用工具被用于
在多台不同服务器上自动执行脚本
开发者又进一步解释道
实际参数应该是“rm -rf /”
foo 和 bar 是脚本中动态传递的两个变量
然而由于变量处理出错
通用语法未能成功在 bash 命令中插值
所以最终指令就变成了可怕的
“rm -rf /”。 “rm -rf/”
意味着擦除根路径“/”下挂载的所有内容
且而无需询问
原本这些数据是可以恢复的
(只是时间长短的问题)
但由于
未能妥善实现生产环境和备份环境的隔离
备份文档也就上了天堂或者下了地狱
全没了
不得已之下,他只能上网发帖求救
然而没人能救得了他了
另外俗话说得好
手下一行码,余生两行泪
程序员们一定要谨慎呀
!!!
领取专属 10元无门槛券
私享最新 技术干货