一个空格引发的惨剧
你是否相信如果你的程序里没有检查一个变量会导致怎么系统瘫痪?无论你相不相信,这是我一个亲身经历过的案例,你可以在本站的程序员那些悲催的事儿中找到很多这样的事。这样的事昨天在发生,今天同样在发生。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 ,请勿用于任何商业用途)
《一个空格引发的惨剧》的相关评论
之前看到了~~笑了我半天~~评论太欢乐了
评论很给力,呵呵
作为程序员, 我很同情这位老兄, 估计自责的死的心都有了。
不过, 发布之前不安装测试一下, 也实在是…
测试你的程序是一种懦夫的行为!
悲剧的rm /usr
哈哈哈
测试测试测试!!!…
呵呵,看来后面的评论的确比那个bug更有意思。看来用linux要小心啊 备份很重要啊
不只空格,一个点也可以引发悲剧(from BDWM)
rm -rf ./etc
评论很欢乐啊
这哥们的太搞了。
So epic!
But this is better than rm -rf / usr/lib/nvidia-current/xorg/xorg :)
QB: 为了拯救宇宙,我需要你的/usr来阻止热寂
http://i.imgur.com/VKNmO.jpg
让我想起前同事(一个QA)的悲剧,他在rm -rf后习惯性地按了“y“确认,等到他意识到发生什么时,手指已经在往回提了。
古人云「君子不立危墙」,又云「瓜田不纳履,李下不整冠」,讲的都是避免使自己处于危险的境地。如果你有一条可以吊死自己的绳子,那么就不要随便打个结挂起来。rm 就是这条绳子,用他妈补全会死么?
@autoxbc
哈哈哈哈
这里果然出现了233话说其实最赞的是评论=v=
话说那张QB的呢……?
= =
http://i.imgur.com/B2ZSr.jpg
原帖子的评论太搞笑了.:D
碉堡了
https://lh5.googleusercontent.com/-n_Q9CWVF2yg/Tf7bE1FDiHI/AAAAAAAAAc4/R8YzTzNmZlg/duke.jpg
呵呵,对于rm我也犯过同样的错误,都是一时手快加了个空格。那时候正在维护公司的svn repository,一个rm -rf /svn/ uselessproject 把公司的所有项目给删除了。从此以后每回打rm -rf心里总要哆嗦一下,确保无误之后才敢摁回车。
杯具的还有,一个公司的网管手欠,做了个 chmod 777 /* -R ,我勒个去,害的我折腾了30分钟给他修复,那可是他们公司的正在运行的服务器啊…
问楼上,chomd 777怎么恢复啊,不是一个一个手动改回来吧
搞笑
这个霸气得不行了,哈哈~
笑死我了,霸气啊
前天晚上到昨天晚上,无限无法进来。被攻击了?
没有,因为升级系统硬件,迁移VPS,所以就宕机了老半天。
我是来发广告的:
BUMBLEBEE, the most famous /usr fucker! Download 4 Free!
陈Sir,扯个题外话。关于写代码速度问题。
我这两天给企业做了个模块,从开始做到按照需求自测通过,花费一天时间。代码行数1K左右的样子。
请问这个速度是否过于慢了?
区区大二,想做点真正的东西
关键不是写多少,关键也不是写多快,重要的是写的代码质量怎么样?不过,如果从最一般的感觉来看,1天写1000行代码算是高产了。
绝对的高产啊
@陈皓
我曾经听说,一个“合格”的程序员,每周产量应当是“5000”行。
而我又听说,一个程序员,每天有效工作时间为4小时(《UML面向对象建模基础》中国水利水电出版社)而实际上我一天写代码或者调试时间大约为16小时
所以感觉压力很大啊
你听说的简直就是胡扯!
@陈皓
真的?代码产量不用那么高是吧?
心理压力一直有点大。。
当然,也可能是我理解老师和书的意思有所偏差。
另外,关于统一问题。
windows环境下,我在使用文件操作的时候,大多数用的是非 windows api里的东西,但个别的东西,比如查看硬盘剩余容量——我实在不知道不用windows api以外还能用什么函数了(只是我不知道,并且没找到,不敢说不存在),所以就使用了GetDiskFreeSpaceEx这个函数。
而其他比如删除文件什么的,我用的却是 remove()而不是DeleteFile()。而查看文件长度用的是struct stat buffer;
在软件行业中,是否存在那么一个“潜规则”之类的东西,要求用某个固定系列的函数什么的?
感觉自己这么做有点乱来啊
@Walkerinwind
我感觉吧:
1) 如果不是自己得心应手的方式方法,即使照做,而且顺利完成了,也不会有自信的;
2) 如果是自己的心应手的方式方法,做完一点就多一点自信,即使做坏了,要找出自己的方式方法错在哪里,也会比照搬别人的方式方法来的容易得多,等自己的方式方法被纠正过来了,就更加有自信了。
@Walkerinwind
我觉得 Walkerinwind 问的这些问题不是技术问题,而是社会经验的问题。Walk君勤学的同时如果能融会贯通,不照本宣科,一定大有作为。
rm -rf /usr 好霸气啊………
http://iregex.org/blog/safer-rm-command.html
#safe remove, mv the files to .Trash with unique name
#and log the acction
function rm()
{
trash=”$HOME/.Trash”
log=”/var/log/trash.log”
stamp=`date “+%Y-%m-%d %H:%M:%S”` #current time
while [ -f “$1” ]; do
#remove the possible ending /
file=`echo $1 |sed ‘s#\/$##’ `
pure_filename=`echo $file |awk -F / ‘{print $NF}’ |sed -e “s#^\.##” `
if [ `echo $pure_filename | grep “\.” ` ]; then
new_file=` echo $pure_filename |sed -e “s/\([^.]*$\)/$RANDOM.\1/” `
else
new_file=”$pure_filename.$RANDOM”
fi
trash_file=”$trash/$new_file”
mv “$file” “$trash_file”
if [ -w $log ]; then
echo -e “[$stamp]\t$file\t=>\t[$trash_file]” |tee -a $log
else
echo -e “[$stamp]\t$file\t=>\t[$trash_file]”
fi
shift #increment the loop
done
}
默哀—–
rm -rf /usr 不知有几人中招
这让我想起当年在VMware中为Red Hat 9.0升级内核到2.6.20.8,第一次失败后重编译,在/boot下产生一些.old文件,看起来很不顺眼,于是想在/boot下敲入rm -rf *.old,一时手快成了rm -rf *
当时傻了
rm命令害人不浅啊。以前辛苦一天的调试,结果 rm -rf 删错了,真的是欢乐开怀啊
@duyt1001
话说 rm -rf以后会有提示输入y么?
幸亏我有一个习惯
cd到父目录
rm -rf 目录
哈哈
幸好不是rm -rf / usr/lib/nvidia-current/xorg/xorg
-_-#!
@duyt1001
rm -rf 还会给你机会按“y”?
@Mike Ma
正在养成……半个月前我刚被坑一次……连上adb然后不小心在/sdcard下rm -rf *然后恢复数据耗了我一下午……
@duyt1001
rf 操作应该提示输入验证码,而不是 Y