免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5849 | 回复: 7
打印 上一主题 下一主题

[转贴] 爆笑 UNIX痛恨者手册(一章) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-20 17:24 |只看该作者 |倒序浏览
UNIX痛恨者手册 \r\n第一章 UNIX——世界上第一个电脑病毒 \r\n“伯克利的两项最著名的产品是UNIX和LSD (一种毒品),我想这不是巧合” \r\n\r\n病毒依赖于微小的个体和强大的适应性得以生存。它们并不复杂:它们没有为呼吸,新\r\n陈代谢,肌体活动等功能提供什么,只有足够的DNA或RNA以供繁衍。比如,肺炎病毒比\r\n起它们入侵的细胞要小得多,但它们在每个肺炎流行季节都能够产生新的变种,造成无\r\n数人死亡。 \r\n\r\n一个好病毒的特点是: \r\n\r\n* 个头小 \r\n病毒做的事情不多,所以不需要很大。有人认为病毒不是生物,只是一些有破坏性的酸\r\n和蛋白质。 \r\n\r\n* 可移植性 \r\n病毒经常变异,以便以不同的方式攻击不同的细胞。据说AIDS就是由猴子身上的病毒变\r\n异而成的。 \r\n\r\n* 耗尽寄主的资源 \r\n\r\n* 快速变异 \r\n\r\nUNIX具有以上所有优点。在它刚诞生时,很小,功能不多,缺乏真正操作系统所需要的\r\n功能(如文件映射,告诉IO,健壮的文件系统,设备锁,合理的进程间通讯),它的移\r\n植性很好。UNIX耗尽主机的资源,没有系统管理员的时时呵护,UNIX会不断恐慌,core \r\ndump,挂起。UNIX不断变异:同一个补丁在一个版本上工作,在另一个版本上就不行。 \r\n\r\n\r\nUNIX是有用户界面的计算机病毒。 \r\n\r\n\r\n标准化那些不一致的 \r\n================ \r\n\r\n“标准的伟大之处在于它可以有很多” --- Grace Murray Hopper \r\n\r\n自从UNIX 80年代开始流行以来,UNIX厂商一直在努力进行UNIX标准化工作。SUN, IBM,\r\nHP和DEC在这个他们自己制造的难题上倾注了数百万美元。 \r\n\r\n为什么UNIX厂商不喜欢UNIX标准化? \r\n\r\n许多用户受够了复杂繁多的UNIX,最终只好使用Windows,因为他们的这个UNIX无法支持\r\n那个UNIX上的应用程序。 \r\n\r\n如果UNIX标准化了,谁还会买SUN的机器呢\r\n\r\n第二章 欢迎新用户\r\n欢迎新用户如同用一把上了六颗子弹的左轮枪玩俄罗斯轮盘赌\r\n\r\nKen Thompson 自己设计过一辆汽车。和其他车不同,它没有速度计、汽油计,也没有那\r\n些愚蠢的指示灯讨司机的厌。如果司机犯了什么错误,仪表盘上就会出现一个大大的“\r\n?”。“有经验的司机,”Thompson说,“应该知道哪儿搞错了。” \r\n\r\n计算机系统的新手需要一个友好的系统。至少,一个得体的系统会这样招待自己的客人\r\n: \r\n\r\n\r\n与功能有逻辑关系的命令名 \r\n对危险命令的小心处理 \r\n一致的命令行为和命令行参数解析 \r\n易得和易读的在线文档 \r\n当命令失败时,给出可理解和有用的错误反馈 \r\n\r\n\r\n在建造UNIX的过程中,从没邀请过住户。来访的都是些戴着安全帽的建筑工人,被安插\r\n在这个破木板房子的各个角落。不幸的是,不仅没有人性因素(human factors)工程师\r\n的参与,而且住户的需要就从来没有被考虑过。所以抽水马桶、中央供暖、窗户等这些\r\n方便设施在后期就很难再添加了。但是建筑师们仍然为UNIX的设计而骄傲,似乎他们并\r\n不介意在一个没有烟火探测器的屋子里睡觉。 \r\n\r\n在其发展的大部分历史中,UNIX只是大学和工业研究人员的研究工具。随着大批便宜工\r\n作站的出现,UNIX作为平台软件进入了新时代。这一变化大约发生在1990年,其标志就\r\n是工作站厂商把C编译器从UNIX发布中剔除出去,以降低成本满足非开发用户的需求。可\r\n见,只是最近几年中UNIX厂商才开始考虑非程序员用户的需要,开始为他们提供shell以\r\n外的图形界面。 \r\n\r\n含糊的命令名 \r\n\r\nUNIX新手总是对UNIX对命令的命名表示惊讶。在DOS和Mac上受的教育不足以让他们体会\r\n到cp、rm、ls这类两字母命令的简洁和优美。 \r\n\r\n像我们这样用过70年代早期的IO设备的人都能理解,ASR-33 Teletype这类设备的速度、\r\n可靠性,以及它的键盘是万恶之源。和今天这种基于反馈原理、只需要关闭一个微开关\r\n的键盘不同,你必须用足力气揿下Teletype的键至少半英寸,以发动一个类似自行车上\r\n用的小型发电机,在上面操作要冒指骨骨折的危险。 \r\n\r\n如果当时Dennis和Ken用的是Selectric而不是Teletype,可能今天我们敲的将不是”cp\r\n”和”rm”而是”copy”和”remove”了。(Ken Thompson曾被问道如果他能重新设计U\r\nNIX他将做什么修改,他回答说:“我会在creat命令后加上个e。”),科技在拓宽我们\r\n的选择的同时,也能限制我们的选择,此一例也。 \r\n\r\n20多年过去了,还有什么理由延续这一传统呢?理由就是“历史的无可替代的力量”,\r\n历史就是那些存在的代码和教科书。如果一个厂商用remove替代了rm,那么所有UNIX教\r\n科书就不适用于这一系统了,每个使用rm的shell脚本都需要被修改。而且这也不合POSI\r\nX标准。 \r\n\r\n一个世纪前,打字高手由于击键过快,经常把打字键柄搅在一起,工程师设计了QWERTY\r\n键盘,于是问题得到了解决,因为没人能在这样的键盘上打得快。计算机的键盘不再有\r\n机械键柄,但QWERTY的键盘布局仍然在使用。同理,在未来的一个世纪中,我们仍然会\r\n继续使用rm。 \r\n\r\n事故会发生 \r\n\r\n用户十分关心自己的数据和文件。他们使用计算机来产生、分析和存储重要信息。他们\r\n相信计算机能够保护他们的重要财产。如果没有了这种信任,他们和计算机的关系就会\r\n蒙上阴影。UNIX辜负了我们的信任,它拒绝对使用危险命令的用户提供保护。比如rm就\r\n是以删除文件为目的的危险命令。 \r\n\r\n所有UNIX新手都有不小心无可挽回地删除重要文件的经历,即使是专家和系统管理员也\r\n遇到过。因此而每年损失的时间、精力可能价值几百万美元。这是个值得解决的问题;\r\n我们不理解为何UNIX一直拒绝解决这一问题。难道结果还不够悲惨么? \r\n\r\nUNIX比其他操作系统更需要提供恢复删除功能,原因是: \r\n\r\nUNIX文件系统没有版本功能 \r\n自动的版本维护能保留文件的历史版本,防止新版本冲掉老版本。 \r\nUNIX程序员在错误处理方面臭名昭著 \r\n许多程序不检查是否所有内容都被写入了磁盘,或被写入的文件是否存在。有些程序总\r\n是删除输入文件。 \r\nUNIX shell扩展“*”,而不是其子命令 \r\n于是rm这样的命令就无法检查“*”这些危险的参数。即使是DOS也对”del *.*”有些提\r\n示。但在UNIX下,rm * 和 rm file1 file2…是没有区别的。 \r\n删除是永久的 \r\nUNIX没有undelete命令。许多其他更安全的系统则只是标记被删除文件所用的块为“可\r\n被使用”,然后把它移到一个特殊目录下。如果磁盘满了,这些文件块才会被重新使用\r\n。这一技术不是什么火箭科学,Macintosh在1984年就提出了“回收站”的想法,而Tene\r\nx早在1974年就采用了这一技术。连DOS也提供了简单的undelete功能,虽然并不总有效\r\n。 \r\n\r\n\r\n这四个问题互相合作,制造了无数无法恢复的重要文件。解决的方法早就存在,但UNIX\r\n“标准”版中却从来没有提供。 \r\n\r\n欢迎来到未来世界。

论坛徽章:
0
2 [报告]
发表于 2006-03-20 17:25 |只看该作者
呵呵,大家觉得好我就继续贴

论坛徽章:
0
3 [报告]
发表于 2006-03-21 02:40 |只看该作者
Date: Wed, 10 Jan 90 \r\nX-Virus: 6\r\nFrom: djones@megatest.uucp (Dave Jones) \r\nSubject: rm * \r\nNewsgroups: alt.folklore.computers \r\n\r\n是否有人曾想执行以下命令: \r\n% rm *.o \r\n结果却打成了: \r\n% rm *>o \r\n现在你得到了一个空文件o,以及大量的空间来存放它! \r\n\r\n\r\n事实上,你可能连o也得不到,因为shell的文档并没有说o是在*被扩展前还是被扩展后\r\n被建立的。\r\n\r\n上回书说到如何用rm获得一个空文件和很大的磁盘空间,下面是另一种用法: \r\n\r\n\r\nDate: Wed, 10 Jan 90 \r\nX-Virus: 6\r\nFrom: ram@attcan.uucp \r\nSubject: Re: rm * \r\nNewsgroups: alt.folklore.computers \r\n\r\n我也被rm搞过。有一次我想删除一些/usr/foo/下的东西,我在/usr/foo下敲了以下命令\r\n: \r\n% rm –r ./etc \r\n% rm –r ./adm \r\n当我要删除./bin目录时,我忘敲了那个点。我的系统似乎不太喜欢这个。 \r\n\r\n\r\n当受了这一致命一击后,UNIX就彻底完蛋了。聪明的系统会给用户一个恢复的机会(或\r\n至少提醒用户这一操作会导致系统崩溃)。 \r\n\r\nUNIX迷认为偶尔的文件误删除是正常的。比如,可以参考以下下面这个comp.unix.quest\r\nions上的FAQ: \r\n\r\n\r\n6) 如何反删除一个文件? \r\n\r\n也许有一天,你不小心执行了一下这个命令: \r\n% rm * .foo \r\n然后发现你把“*”删掉了。你应该把这当作人生的一课。 \r\n当然称职的系统管理员应该定时备份系统。所以你最好问问他们手中是不是有你的文件\r\n备份。 \r\n\r\n\r\n“人生的一课”?没有任何一个其他厂商用这样的态度对待一个有缺陷的产品。“大人\r\n,我知道您的油箱炸了,但这是人生的一课。”“陪审团的先生女士们,我们将证明电\r\n锯保险开关的失效不过是给用户上的人生的一课。”不错。 \r\n\r\n改变rm的行为也不是个办法 \r\n\r\n被rm咬了几次后,往往会想到用”rm -i”替换rm,或整个替换掉rm,把所有被删除的文\r\n件放到~/.deleted目录中。这些小技巧让用户有了错误的安全感。 \r\n\r\n\r\nDate: Mon,16 Apr 90 18:46:33 199 \r\nX-Virus: 6\r\nFrom: Phil Agre <agre@gargoyle.uchicago.edu> \r\nTo: UNIX-HATERS \r\nSubject: deletion \r\n\r\n在我们的系统上,”rm”并不真正删除文件,而是给文件换了名,这样”undelete”(不\r\n是unrm)这样的工具就能恢复被删的文件。 \r\n\r\n这个功能让我不再对删除文件多加小心,反正删掉了也能找回来。可是,我错了。Emacs\r\n中的删除并不支持这个功能,Dired命令也是如此。这当然是因为文件恢复并不是操作系\r\n统的一个功能。 \r\n\r\n所以,现在我脑子里有两个概念,一个是”deleting”一个文件,一个是”rm’ing”一\r\n个文件。当我的手要我的脑子删除一个文件时,我总要把这两个概念区分一遍。 \r\n\r\n\r\n一些UNIX专家由此得出了荒谬的结论,他们认为最好别把rm搞得更友好。他们争辩说,\r\n让UNIX更友好的努力往往适得其反。不幸的是,他们是对的。 \r\n\r\n\r\nDate: Thu, 11 Jan 90 17:17 CST \r\nX-Virus: 6\r\nFrom: merlyn@iwarp.intel.com (Randal L. Schwartz) \r\nSubject: Don’t Overload commands! (was Re: rm *) \r\nNewsgroups: alt.folklore.computers \r\n\r\n请千万别让人用“安全”命令去替换标准命令。 \r\n(1) 许多shell程序会对多嘴的rm感到惊讶,而且也不会想到删除了的文件仍然占有磁\r\n盘空间。 \r\n(2) 并不是所有删除操作都是安全的,有户会因此产生一切都能恢复的错觉。 \r\n(3) 那些不标准的命令对系统管理员来说尤其可恨。 \r\n如果你想有个有确认功能的”rm”,用下面的命令: \r\n% alias del rm -i \r\n千万别替换rm! \r\n\r\n\r\n最近,comp.unix.questions上有过一次对系统管理员的调查,让他们说出最恐怖的系统\r\n管理故事。72小时内,就有了300多条回应。许多和我们上面描述的文件删除有关。可笑\r\n的是,这些可是UNIX高手。然而正是他们在对“UNIX对用户不友好”这类指责进行着辩\r\n护。 \r\n\r\n对用户不友好?UNIX对系统管理员又友好过么?请看 \r\n\r\n\r\nDate: Wed, 14 Sep 88 01:39 EDT \r\nX-Virus: 6\r\nFrom: Matthew P Wiener <weemba@garnet.berkeley.edu> \r\nTo: RISKS-LIST@kl.sri.com \r\nSubject: “Single Keystroke” \r\n\r\n在UNIX上,即使是有经验的用户也会误用rm。我从来没有误删除过文件,可是有一天,\r\n我用!r重复执行一个历史命令,我惊讶地发现被运行的是”rm –r *”。 \r\n\r\n为什么不能有个没有history功能的shell? \r\n\r\n我还听到过一个用户试图删除一个名叫”*”的文件,好在他没有权限。 \r\n\r\n\r\n这个用户还想修改shell来避免对*进行展开。不幸的是,这个补救如同是在渗水的墙上\r\n再刷一层漆,治标不治本。 \r\n\r\n在线帮助 \r\n\r\n用户读打印文档的次数比他们参加选举投票的次数还要少。只有触手可及的在线文档才\r\n是有用的。下面我们看看UNIX的man是如何让最需要它的新用户失望的。 \r\n\r\n不是每个命令都是平等的,有些是外部命令,有些是内部命令。有些有man page,有些\r\n没有。UNIX要求你能区分这些命令。比如,wc, cp和ls是外部命令,它们都有man page\r\n,而fg, jobs, set和alias(这些长文件名是从哪里来的?)是内部命令,它们没有man\r\npage。 \r\n\r\nUNIX告诉新手用”man command”命令获得帮助,他们可不知道并不是所有命令都是如此\r\n。另外,如果他们的shell设置得有些不标准,他们就只能请教高手来获得帮助了。 \r\n\r\n错误信息和错误检查?没门! \r\n\r\n新手很容易犯错误,比如用错命令,或用错选项。系统应该能识别这些错误,并且反馈\r\n给用户。不幸的是,UNIX程序从来不麻烦自己。相反,UNIX往往把各种错误混在一起,\r\n直到产生致命的结果。 \r\n\r\n上面一节我们说明了rm如何容易造成误删除。但你可能不知道不用rm也能很容易地误删\r\n除文件。 \r\n\r\n想删除你的文件么?试试编译器 \r\n\r\n一些cc版本经常根本不考虑用户的可能输入错误,而删除一些源代码文件。一些本科生\r\n常常着了道。 \r\n\r\n\r\nDate: Thu, 26 Nov 1992 16:01:55 GMT \r\nX-Virus: 6\r\nFrom: tk@dcs.ed.ac.uk (Tommy Kelly) \r\nSubject: HELP! \r\nNewsgroups: cs.questions \r\nOrganization: Lab for the Foundations of Computer Science, Edinburgh UK \r\n\r\n我刚才想这么编译程序: \r\n% cc –o doit doit.c \r\n不小心敲成了: \r\n% cc –o doit.c doit \r\n不用说我的doit.c被冲掉了。有没有办法能恢复我的程序?(我干了整整一个上午) \r\n\r\n\r\n\r\n其他一些程序也有同样的行为: \r\n\r\n\r\nDate: Thu, 1 July 1993 09:10:50 - 0700 \r\nX-Virus: 6\r\nFrom: Daniel Weise <Daniel@dolores.stanford.edu> \r\nTo: UNIX-HATERS \r\nSubject: tarred and feathered \r\n\r\n经过几次努力,我总算从欧洲的一个脆弱ftp站点上下载了了一个3.2M的文件。该untar\r\n它了。我敲了一下命令: \r\n% tar –cf thesis.tar \r\n…没有回应。 \r\n\r\n老天! \r\n\r\n是不是该用x选项而不是c? \r\n是的。 \r\n\r\ntar是不是给出了错误信息说没有指定输入文件? \r\n没有。 \r\n\r\ntar是否感觉到有什么不对劲? \r\n没有。 \r\n\r\ntar是不是真的什么也没有tar? \r\n是的。 \r\n\r\ntar是否把thesis.tar用垃圾覆盖了? \r\n当然,这就是UNIX。 \r\n\r\n我是不是需要再花 30分钟从欧洲下载这个文件? \r\n当然,这就是UNIX。 \r\n\r\n我敢肯定有不少人遇到过这一不幸,有那么多的解决办法,比如:错误信息,文件版本\r\n化,确认用户是否想覆盖一个已有文件,等等等等。tar似乎在有意给用户找麻烦。 \r\n\r\n\r\n对于经常用tar备份的系统管理员来说,这个bug更是危险。不少系统管理员都曾经在备\r\n份脚本中错误地使用过“tar xf…”。在需要恢复备份的时候,才发现原来什么也没做\r\n。 \r\n\r\n欲知是否还有其他这样的恐怖命令,请听下回分解。 \r\n\r\n\r\n上回书说到cc、tar等命令是如何帮助你删除重要文件的。UNIX的强大当然不局限于此。\r\n\r\n\r\n因为没有错误检查,在众多“UNIX 强大编程工具”的支持下,用户有各种选择来删除他\r\n们的重要文件。 \r\n\r\n\r\nDate: Sun, 4 Oct 1992 0:21:49 PDT \r\nX-Virus: 6\r\nFrom: Pavel Curtis <pavel@parc.xerox.com> \r\nTo: UNIX-HATERS \r\nSubject: So many bastards to choose from… \r\n\r\n我有一个总在运行的程序foo,用来提供网络服务,并且每隔24小时检查系统内部状态。\r\n\r\n\r\n一天,我cd到foo所在的目录,因为这不是开发目录,我想看看foo的版本是多少。代码\r\n是由RCS来维护的,所以我自然而然地使用了以下命令: \r\n\r\n% ident foo \r\n\r\n先别管RCS的种种劣迹,也别管ident如何原始疯狂。我这次的麻烦是,我的手指自行其\r\n是地选择了更像一个词的indent而不是ident: \r\n\r\n% indent foo \r\n\r\nindent是UNIX的一个愚蠢的C代码风格转换工具。那个写indent的混蛋是否判断了一下输\r\n入文件真的为C程序么 (天哪,至少可以看看文件的后缀是否为.c吧)?我想你知道答案\r\n。而且,这个SB(Said Bastard)认为如果你只给了一个参数,那么你就是想要进行在线\r\n风格转换。不过别着急,这个SB 考虑到了可能带来的麻烦,他保存了一个备份foo.BAK\r\n。然而他是否只是简单地把foo换了个名字呢?没有,他选择了拷贝(毫无疑问,那个写i\r\nndent的程序员在准备备份的时候已经打开了foo,而且rename系统调用是后来才有的)。\r\n现在,你可能知道发生了些什么了… \r\n\r\n我那正在运行中的foo在准备页面扇出的时候,发现原来的可执行文件已经不在了,这可\r\n不是什么好事,于是我的foo崩溃了,我丢掉了20小时的系统状态信息。 \r\n\r\n自然那些设计(咳嗽)UNIX的混蛋们对复杂的文件版本化功能不感兴趣,而这一功能就\r\n能救我的命。当然,那些混蛋也从未想到过对准备进行页面扇出的文件加锁,是不是? \r\n\r\n有那么多混蛋可供选择,为什么不把他们都宰了? \r\n\r\nPavel \r\n\r\n想象一种散发氯气的油漆,按照说明,用在户外是不成问题的,但如果用它刷你卧室的\r\n墙壁,你的脑袋就要大了。这样的油漆能在市场上存活多久呢?当然不会超过20年。 \r\n\r\n错误信息笑话 \r\n\r\n当你看到饭馆跑堂的把一盘菜撒在顾客脑袋上时,你会笑么?UNIX迷会的。但那些无助\r\n的用户对着错误信息百思不得其解的时候,他们是最先发出笑声的。 \r\n\r\n有人整理了一些UNIX最为可笑的错误信息,把他发布在Usenet上。他们使用的是C \r\nshell. \r\n\r\n\r\n% rm meese-ethics \r\nrm: messe-ethics nonexistent \r\n\r\n% ar m God \r\nar: God does not exist \r\n\r\n% “How would you rate Dan Quayle’s incompetence? \r\nUnmatched “. \r\n\r\n% ^How did the sex change^ operation go? \r\nModifier failed. \r\n\r\n% If I had a ( for every $ the Congress spent, what would I have? \r\nToo many (‘s \r\n\r\n% make love \r\nMake: Don’t know how to make love. Stop. \r\n\r\n% sleep with me \r\nbad character \r\n\r\n% got a light? \r\nNo match \r\n\r\n% man: why did you get a divorce? \r\nman: Too many arguments. \r\n\r\n% ^What is saccharine? \r\nBad substitute. \r\n\r\n% %blow \r\n%blow: No such job. \r\n\r\n\r\n下面的这些幽默作品来自Bourne Shell: \r\n\r\n\r\n$ PATH=pretending! /usr/ucb/which sense \r\nno sense in pretending \r\n\r\n$ drink <bottle; opener \r\nbottle: cannot open \r\nopener: not found \r\n\r\n$ mkdir matter; cat >matter \r\nmatter: cannot create

论坛徽章:
0
4 [报告]
发表于 2006-03-22 10:40 |只看该作者
这些确实是unix的硬伤,不过,对于rm来说,还有什么比这样更能加深理解备份的重要性呢?越用得久就备份得越勤,呵呵,不停地在unix和windows之间ftp吧。

论坛徽章:
0
5 [报告]
发表于 2009-08-10 11:53 |只看该作者
哈哈,是挺让人痛恨的,无奈啊。

论坛徽章:
0
6 [报告]
发表于 2009-10-27 00:10 |只看该作者
不好笑~~~~~~~~~~~~~~~~~~~

论坛徽章:
0
7 [报告]
发表于 2009-10-27 07:41 |只看该作者
现在有ZFS了, 定期给文件系统做快照就可以了!\r\nZFS 在删除文件时只要还有快照在,就不会真正释放被删除文件所占用的空间,相反删除文件可能会占用更多的空间,取决与快照的覆盖频率!

论坛徽章:
0
8 [报告]
发表于 2011-01-10 17:23 |只看该作者
精彩的帖子!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP