一个空格引发的惨剧
你是否相信如果你的程序里没有检查一个变量会导致怎么系统瘫痪?无论你相不相信,这是我一个亲身经历过的案例,你可以在本站的程序员那些悲催的事儿中找到很多这样的事。这样的事昨天在发生,今天同样在发生。Unix40多年了,在这40年里,程序员发生过各种各样的的惨剧,但是大多数的事情一而再再而三的重演。
今天的你,可能在开发者各种各样NB的系统,你会相信你的一个空格也能导致系统瘫痪吗?也许你可能很难相信这个事。不过,再下面这个事将告诉你这个血淋淋的事实 —— 一个空格产生的bug可以让你的系统瘫痪。
bumblebee是一个开源项目,这个名字也就是变形金刚里的大黄蜂,这个项目是这样介绍自己的——
bumblebee is Optimus support for Linux, with real offloading, and not switchable graphics.. More important.. it works on Optimus Laptops without a graphical multiplexer..
Optimus 是NVIDIA的“优驰”技术,其可以将您的笔记本电脑PC提升到绝佳状态,提供出色的图形性能,并在需要时延长电池续航时间。这个项目是把这个技术移到Linux上来。
这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目,这个bug的fix如下:
@@ -348,7 +348,7 @@ case "$DISTRO" in - rm -rf /usr /lib/nvidia-current/xorg/xorg + rm -rf /usr/lib/nvidia-current/xorg/xorg
看明白了吗?空格。这个空格会导致什么样的问题呢?呵呵。你有没有感到菊花一紧?这个bug绝对的霸气外露!真是验证了“如何写出无法维护代码”的那句话——“测试你的程序是一种懦夫的行为”。
不过,最精彩还不是这个bug,而是全世界程序员的对这个bug 的 code review comments,真的相当的欢乐。请强势围望!
https://github.com/MrMEEE/bumblebee/commit/a047be85247755cdbe0acce6#diff-1
重点是其中的很多图片——下面的图片众多。
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《一个空格引发的惨剧》的相关评论
ubuntu
chmod 777 -R /usr
运行之后发现sudo不能用了,给sudo +s之后可以用了,但认证权限对话框不能用,怎么修复?现在只能在命令行安装程序,ubuntu软件中心不能用
哥们太搞了。
@Justvistor
比较经典的其实是rm -rf *>old
好吧,我后面的同事把cp /mnt/*.rpm /home/ 打成rm /mnt/*.rpm /home/,结果你懂的。。。关键是每到一个月他又运行了一次,逗死我了。
我在LFS时在编译最后一个包时,跳到了/usr目录,大家做个LFS应该都知道习惯性的把刚编译过的东西都删掉。所以我rm * -rf 了。结果我编了两天的linux哭了。
好吧,我干过这事…
楼主,原文的github链接已失效,新链接是这个:https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6#diff-1
前两天弄了个Cygwin玩玩,想想这货运行的环境是C:\cygwin,于是手贱地敲了个 rm -rf /,好吧,重装Windows
我觉得这个帖子吧,不能说是程序员的错
shell本身就没有语法检测,又不能做单元测试。
只能靠集成测试
一个再牛X的程序员,一辈子,怎么也会犯这样的过错
关键问题是,为什么测试没有发现
为什么这大bug的程序,直接就release了?
新url: https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6#diff-1
呵呵,我有一次在虚拟机里尝试rm -rf /,结果centos 6和新的ubuntu都不让我执行,在centos 5上,我倒是忘了虚拟机中有挂载windows的共享分区,结果。。。
噗……没想到居然发生过如此惨绝人寰的事情
GitHub Commits 上所有来自二次元的吐槽都 404 了 QAQ
我越看越想执行下 rm -rf /
@duyt1001
我的习惯是yes | rm -rf ….
更恐怖
與其說這是這個項目的問題,不如說是 bash 語法本身的問題。記得誰舉過這樣一個例子,在bash中執行 ls -l f.txt,輸出f.txt的詳細信息,但是現在有一個文件名為 -l,你執行 ls -l -l 會得到什麼呢?
@NER0
好好复习下bash吧, ls -l — -l
不行了,我笑爬下了。
我们为人和善,所以,大家喜欢和我们做生意。