applelinux 发表于 2006-4-19 22:49:58

man UNIX痛恨者手册

UNIX痛恨者手册
第一章 UNIX——世界上第一个电脑病毒

“伯克利的两项最著名的产品是UNIX和LSD (一种毒品),我想这不是巧合”

病毒依赖于微小的个体和强大的适应性得以生存。它们并不复杂:它们没有为呼吸,新
陈代谢,肌体活动等功能提供什么,只有足够的DNA或RNA以供繁衍。比如,肺炎病毒比
起它们入侵的细胞要小得多,但它们在每个肺炎流行季节都能够产生新的变种,造成无
数人死亡。

一个好病毒的特点是:

* 个头小
病毒做的事情不多,所以不需要很大。有人认为病毒不是生物,只是一些有破坏性的酸
和蛋白质。

* 可移植性
病毒经常变异,以便以不同的方式攻击不同的细胞。据说AIDS就是由猴子身上的病毒变
异而成的。

* 耗尽寄主的资源

* 快速变异

UNIX具有以上所有优点。在它刚诞生时,很小,功能不多,缺乏真正操作系统所需要的
功能(如文件映射,告诉IO,健壮的文件系统,设备锁,合理的进程间通讯),它的移
植性很好。UNIX耗尽主机的资源,没有系统管理员的时时呵护,UNIX会不断恐慌,core
dump,挂起。UNIX不断变异:同一个补丁在一个版本上工作,在另一个版本上就不行。


UNIX是有用户界面的计算机病毒。


标准化那些不一致的
================

“标准的伟大之处在于它可以有很多” --- Grace Murray Hopper

自从UNIX 80年代开始流行以来,UNIX厂商一直在努力进行UNIX标准化工作。SUN, IBM,
HP和DEC在这个他们自己制造的难题上倾注了数百万美元。

为什么UNIX厂商不喜欢UNIX标准化?

许多用户受够了复杂繁多的UNIX,最终只好使用Windows,因为他们的这个UNIX无法支持
那个UNIX上的应用程序。

如果UNIX标准化了,谁还会买SUN的机器呢
第二章 欢迎新用户

欢迎新用户如同用一把上了六颗子弹的左轮枪玩俄罗斯轮盘赌

Ken Thompson 自己设计过一辆汽车。和其他车不同,它没有速度计、汽油计,也没有那
些愚蠢的指示灯讨司机的厌。如果司机犯了什么错误,仪表盘上就会出现一个大大的“
?”。“有经验的司机,”Thompson说,“应该知道哪儿搞错了。”

计算机系统的新手需要一个友好的系统。至少,一个得体的系统会这样招待自己的客人



与功能有逻辑关系的命令名
对危险命令的小心处理
一致的命令行为和命令行参数解析
易得和易读的在线文档
当命令失败时,给出可理解和有用的错误反馈


在建造UNIX的过程中,从没邀请过住户。来访的都是些戴着安全帽的建筑工人,被安插
在这个破木板房子的各个角落。不幸的是,不仅没有人性因素(human factors)工程师
的参与,而且住户的需要就从来没有被考虑过。所以抽水马桶、中央供暖、窗户等这些
方便设施在后期就很难再添加了。但是建筑师们仍然为UNIX的设计而骄傲,似乎他们并
不介意在一个没有烟火探测器的屋子里睡觉。

在其发展的大部分历史中,UNIX只是大学和工业研究人员的研究工具。随着大批便宜工
作站的出现,UNIX作为平台软件进入了新时代。这一变化大约发生在1990年,其标志就
是工作站厂商把C编译器从UNIX发布中剔除出去,以降低成本满足非开发用户的需求。可
见,只是最近几年中UNIX厂商才开始考虑非程序员用户的需要,开始为他们提供shell以
外的图形界面。

含糊的命令名

UNIX新手总是对UNIX对命令的命名表示惊讶。在DOS和Mac上受的教育不足以让他们体会
到cp、rm、ls这类两字母命令的简洁和优美。

像我们这样用过70年代早期的IO设备的人都能理解,ASR-33 Teletype这类设备的速度、
可靠性,以及它的键盘是万恶之源。和今天这种基于反馈原理、只需要关闭一个微开关
的键盘不同,你必须用足力气揿下Teletype的键至少半英寸,以发动一个类似自行车上
用的小型发电机,在上面操作要冒指骨骨折的危险。

如果当时Dennis和Ken用的是Selectric而不是Teletype,可能今天我们敲的将不是”cp
”和”rm”而是”copy”和”remove”了。(Ken Thompson曾被问道如果他能重新设计U
NIX他将做什么修改,他回答说:“我会在creat命令后加上个e。”),科技在拓宽我们
的选择的同时,也能限制我们的选择,此一例也。

20多年过去了,还有什么理由延续这一传统呢?理由就是“历史的无可替代的力量”,
历史就是那些存在的代码和教科书。如果一个厂商用remove替代了rm,那么所有UNIX教
科书就不适用于这一系统了,每个使用rm的shell脚本都需要被修改。而且这也不合POSI
X标准。

一个世纪前,打字高手由于击键过快,经常把打字键柄搅在一起,工程师设计了QWERTY
键盘,于是问题得到了解决,因为没人能在这样的键盘上打得快。计算机的键盘不再有
机械键柄,但QWERTY的键盘布局仍然在使用。同理,在未来的一个世纪中,我们仍然会
继续使用rm。

事故会发生

用户十分关心自己的数据和文件。他们使用计算机来产生、分析和存储重要信息。他们
相信计算机能够保护他们的重要财产。如果没有了这种信任,他们和计算机的关系就会
蒙上阴影。UNIX辜负了我们的信任,它拒绝对使用危险命令的用户提供保护。比如rm就
是以删除文件为目的的危险命令。

所有UNIX新手都有不小心无可挽回地删除重要文件的经历,即使是专家和系统管理员也
遇到过。因此而每年损失的时间、精力可能价值几百万美元。这是个值得解决的问题;
我们不理解为何UNIX一直拒绝解决这一问题。难道结果还不够悲惨么?

UNIX比其他操作系统更需要提供恢复删除功能,原因是:

UNIX文件系统没有版本功能
自动的版本维护能保留文件的历史版本,防止新版本冲掉老版本。
UNIX程序员在错误处理方面臭名昭著
许多程序不检查是否所有内容都被写入了磁盘,或被写入的文件是否存在。有些程序总
是删除输入文件。
UNIX shell扩展“*”,而不是其子命令
于是rm这样的命令就无法检查“*”这些危险的参数。即使是DOS也对”del *.*”有些提
示。但在UNIX下,rm * 和 rm file1 file2…是没有区别的。
删除是永久的
UNIX没有undelete命令。许多其他更安全的系统则只是标记被删除文件所用的块为“可
被使用”,然后把它移到一个特殊目录下。如果磁盘满了,这些文件块才会被重新使用
。这一技术不是什么火箭科学,Macintosh在1984年就提出了“回收站”的想法,而Tene
x早在1974年就采用了这一技术。连DOS也提供了简单的undelete功能,虽然并不总有效



这四个问题互相合作,制造了无数无法恢复的重要文件。解决的方法早就存在,但UNIX
“标准”版中却从来没有提供。

欢迎来到未来世界。

“rm”就是终结

许多实际的恐怖故事说明了以上的这些原则。以下是alt.folklore.computers新闻组上
流传的一系列故事中的一个:


Date: Wed, 10 Jan 90
X-Virus: 6
From: [email protected] (Dave Jones)
Subject: rm *
Newsgroups: alt.folklore.computers

是否有人曾想执行以下命令:
% rm *.o
结果却打成了:
% rm *>o
现在你得到了一个空文件o,以及大量的空间来存放它!


事实上,你可能连o也得不到,因为shell的文档并没有说o是在*被扩展前还是被扩展后
被建立的。

上回书说到如何用rm获得一个空文件和很大的磁盘空间,下面是另一种用法:


Date: Wed, 10 Jan 90
X-Virus: 6
From: [email protected]
Subject: Re: rm *
Newsgroups: alt.folklore.computers

我也被rm搞过。有一次我想删除一些/usr/foo/下的东西,我在/usr/foo下敲了以下命令

% rm –r ./etc
% rm –r ./adm
当我要删除./bin目录时,我忘敲了那个点。我的系统似乎不太喜欢这个。


当受了这一致命一击后,UNIX就彻底完蛋了。聪明的系统会给用户一个恢复的机会(或
至少提醒用户这一操作会导致系统崩溃)。

UNIX迷认为偶尔的文件误删除是正常的。比如,可以参考以下下面这个comp.unix.quest
ions上的FAQ:


6) 如何反删除一个文件?

也许有一天,你不小心执行了一下这个命令:
% rm * .foo
然后发现你把“*”删掉了。你应该把这当作人生的一课。
当然称职的系统管理员应该定时备份系统。所以你最好问问他们手中是不是有你的文件
备份。


“人生的一课”?没有任何一个其他厂商用这样的态度对待一个有缺陷的产品。“大人
,我知道您的油箱炸了,但这是人生的一课。”“陪审团的先生女士们,我们将证明电
锯保险开关的失效不过是给用户上的人生的一课。”不错。

改变rm的行为也不是个办法

被rm咬了几次后,往往会想到用”rm -i”替换rm,或整个替换掉rm,把所有被删除的文
件放到~/.deleted目录中。这些小技巧让用户有了错误的安全感。


Date: Mon,16 Apr 90 18:46:33 199
X-Virus: 6
From: Phil Agre <[email protected]>
To: UNIX-HATERS
Subject: deletion

在我们的系统上,”rm”并不真正删除文件,而是给文件换了名,这样”undelete”(不
是unrm)这样的工具就能恢复被删的文件。

这个功能让我不再对删除文件多加小心,反正删掉了也能找回来。可是,我错了。Emacs
中的删除并不支持这个功能,Dired命令也是如此。这当然是因为文件恢复并不是操作系
统的一个功能。

所以,现在我脑子里有两个概念,一个是”deleting”一个文件,一个是”rm’ing”一
个文件。当我的手要我的脑子删除一个文件时,我总要把这两个概念区分一遍。


一些UNIX专家由此得出了荒谬的结论,他们认为最好别把rm搞得更友好。他们争辩说,
让UNIX更友好的努力往往适得其反。不幸的是,他们是对的。


Date: Thu, 11 Jan 90 17:17 CST
X-Virus: 6
From: [email protected] (Randal L. Schwartz)
Subject: Don’t Overload commands! (was Re: rm *)
Newsgroups: alt.folklore.computers

请千万别让人用“安全”命令去替换标准命令。
(1) 许多shell程序会对多嘴的rm感到惊讶,而且也不会想到删除了的文件仍然占有磁
盘空间。
(2) 并不是所有删除操作都是安全的,有户会因此产生一切都能恢复的错觉。
(3) 那些不标准的命令对系统管理员来说尤其可恨。
如果你想有个有确认功能的”rm”,用下面的命令:
% alias del rm -i
千万别替换rm!


最近,comp.unix.questions上有过一次对系统管理员的调查,让他们说出最恐怖的系统
管理故事。72小时内,就有了300多条回应。许多和我们上面描述的文件删除有关。可笑
的是,这些可是UNIX高手。然而正是他们在对“UNIX对用户不友好”这类指责进行着辩
护。

对用户不友好?UNIX对系统管理员又友好过么?请看


Date: Wed, 14 Sep 88 01:39 EDT
X-Virus: 6
From: Matthew P Wiener <[email protected]>
To: [email protected]
Subject: “Single Keystroke”

在UNIX上,即使是有经验的用户也会误用rm。我从来没有误删除过文件,可是有一天,
我用!r重复执行一个历史命令,我惊讶地发现被运行的是”rm –r *”。

为什么不能有个没有history功能的shell?

我还听到过一个用户试图删除一个名叫”*”的文件,好在他没有权限。


这个用户还想修改shell来避免对*进行展开。不幸的是,这个补救如同是在渗水的墙上
再刷一层漆,治标不治本。

在线帮助

用户读打印文档的次数比他们参加选举投票的次数还要少。只有触手可及的在线文档才
是有用的。下面我们看看UNIX的man是如何让最需要它的新用户失望的。

不是每个命令都是平等的,有些是外部命令,有些是内部命令。有些有man page,有些
没有。UNIX要求你能区分这些命令。比如,wc, cp和ls是外部命令,它们都有man page
,而fg, jobs, set和alias(这些长文件名是从哪里来的?)是内部命令,它们没有man
page。

UNIX告诉新手用”man command”命令获得帮助,他们可不知道并不是所有命令都是如此
。另外,如果他们的shell设置得有些不标准,他们就只能请教高手来获得帮助了。

错误信息和错误检查?没门!

新手很容易犯错误,比如用错命令,或用错选项。系统应该能识别这些错误,并且反馈
给用户。不幸的是,UNIX程序从来不麻烦自己。相反,UNIX往往把各种错误混在一起,
直到产生致�
页: [1]
查看完整版本: man UNIX痛恨者手册