一个空格引发的悲剧(详解如何看懂悲催的技术人员冷笑话)

 
向非程序员朋友介绍个最近程序员界好玩的东西(以后我的日志都会尽量照顾非程序员朋友)。

是这样子的——先来一点背景介绍,GitHub.com 这个网站,是目前最火的源代码托管网站及程序员社区,用它来托管和发布共享开源软件是免费的。来自世界各地的程序员(或公司)们喜欢在这个网站上发布自己的项目源代码,也可以在这方便地获取、查看和评论别人的源代码。

在每次代码有更新的时候,用户还可以对这次更新的某个文件中所改动的某一行进行评论,也就是说类似某个同学问“这一行改动到底是什么意思啊”另一个热心的同学会向他解释清楚这样子。

但是说实话,我还一直没用、没注意到有谁会用,或者完全没去试过寻找这样对某行代码的评论,直到……这一个文件的出现,才有了可能是 GitHub 史上最强的一个代码评论贴。

关键在于这一行:
rm -rf /usr /lib/nvidia-current/xorg/xorg

解释一下,rm 表示 remove,在 Linux 下是删除文件或目录的命令,不能直接用在目录上,加 r 参数可以删除整个目录,而 f 参数代表 force,就是少废话能删的给我全删完。rm 接受的参数是*空格*分隔的目录或文件名。

而大家请注意,看仔细。这一行代码,在 /usr 和 /lib 中间,有一个空格!!这意味着,运行了这行代码,就会删除你的 /usr 目录!!

而 /usr 目录是神马东西呢?可以吃吗?这就得先说说 Linux 下目录的表示和组织方式啦。Linux 下没有 C、D 盘这样的盘符,只有一个根目录,用反斜杠“/”表示。目录与硬盘分区的对应方式是挂载,某个硬盘分区可以挂到某一目录——不过首先得有一个分区挂在根目录上,然后根目录下有文件夹,这些文件夹如果不挂载某分区,文件夹内的文件就保存到挂到根目录的这个分区的相应目录下;如果某文件夹挂载了某分区,原来此文件夹下的文件就看不到了,这个文件夹就显示挂载上的分区里的文件了。

举例来说,访问 /a/b/c/d.txt 这个文件,Linux 操作系统会首先看 /a/b/c/ 有没有挂载某分区,如果是,就在此分区查找 /d.txt 文件;如果没有,那就看 /a/b/ 有么有挂载某分区,如果是,就在此分区查找 /c/d.txt;以此类推,直到查找挂载到根目录的分区的 /a/b/c/d.txt 文件,还找不到就是出现“文件未找到”错误。

这是 Linux 文件系统的表现方式,了解了这个,再来说文件的组织方式。Linux 会把程序分散来放到不同目录,比如说二进制可执行文件放到 /usr/bin,可执行文件需要调用的库文件会放到 /usr/lib 目录,一些其他资源(比如图片之类的)会放到 /usr/share 下,而配置文件放到 /etc 或者 /home/username 即用户文件夹。/home 目录类似 Windows 7 下的 C:\Users 目录,储存用户的个性化配置和用户的文档什么的。

说了那么多,总之就是,/usr 这个目录通常是用来存放系统中所有安装的应用程序的,包括一部分系统工具和几乎所有用户自己安装的程序。所以它的地位相当于 Windows 下的 C:\Windows + C:\Program Files,老实说,删了这两个文件夹,不就差不多相当于删除了 Windows 操作系统吗,相当于格式化掉 C: 盘。rm -rf /usr 这个命令对于 Linux 系统也是一样。懂了吧。这不是坑爹是什么。

接下来再说说什么时候会运行到这行代码吧。这行代码是写到 install.sh 文件里面的。故名思议,这是个安装脚本。所谓脚本的意思,就是说运行此文件,文件里的命令都会按顺序跑一遍,就像于演员把剧本念一遍一样。

于是,可以想象,有那么一个倒霉蛋,原本只是想安装这个软件,运行一遍 install.sh 安装脚本,就把自己系统文件夹给删了……而这一切的罪魁祸首,都是 /usr 和 /lib 中间的那一个空格,如果没这个空格,这个安装脚本就会按其原本的意图删除 rm -rf /usr/lib/nvidia-current/xorg/xorg 这个文件,加了空格就变成删除 /usr 和 /lib/nvidia-current/xorg/xorg 了。而且,这明明是用户自己进行的操作啊(自己要运行这个安装脚本嘛)。而且这样的安装脚本通常是配合 sudo 来运行的,因为一般来说安装程序需要系统管理员的权限(删除 /usr 也同样需要这个权限),sudo 就是一个让系统管理员灵魂附体的东西,在命令前加 sudo 就相当于是以系统管理员身份运行此命令。

好啦,现在各路防火墙、反病毒、系统保护软件纷纷露出哀怨的眼神:系统管理员要删,我也拦不住啊。
╮(╯▽╰)╭


 
 
为神马?为神马?为神马?你为神马要这样做啊?
为神马?为神马?为神马?你为神马要这样做啊?
我们需要你的 /usr 目录的增熵来拯救宇宙。
我们需要你的 /usr 目录的增熵来拯救宇宙。
作者最后当然修复了这个错误,上文给出的链接就是这次修复改动到的文件(就是把空格去掉以及加一个版本号)的记录,大家纷纷在此表示了对此行代码的崇敬以及对作者最终删除此空格的惋惜之情。程序员的幽默当然尽情挥洒于此啦。

好多人用了 great, success, epic, fail 之类的词来表示作者的错误太伟大了,惊天地泣鬼神级别的,简直了。还有用户表示,我本来也不喜欢那个文件夹,也有人说,感谢作者让我清出好多原本吃紧的硬盘空间来……

还有后面一些图也挺有意思。反正背景已经介绍了,大家自己看呗

PS 精选几条自己最喜欢的:
对更正前的评论:
I didn't like that folder anyway.
nice! I didn't like the operating system anyways!
This just removed a ton of sh*t from my computer. Thanks! :D

对更正后的评论:
Come on guys, THIS line is the most important!

2PS 上文中说是 Linux 操作系统,其实对于 Unix 系统来说本文知识也同样适用。
3PS 那个评论页涌现了大量瓷器国潜水员兼程序员……
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值