# 评论《Unix 痛恨者手册》（Andrew Kuchling 于 1997）

《Unix 痛恨者手册》（1994）

作者：Simson Garfinkel、Daniel Weise、Steven Strassman

序言：Donald Norman

“反序”：Dennis Ritchie

摘要：这本书对 Linux 爱好者来说可能令人气愤，但其中确实隐藏着一些有价值的见解。

Dennis Ritchie 在本书的“反序言”中写道：“你们声称在追求进步，但你们的主要成果是发牢骚。”这其实是对本书的相当准确的评价；整本书是一连串的抱怨，抱怨因系统崩溃而丢失的工作、为绕过 bug 而浪费的时间、不清晰的文档、以及晦涩的命令行参数。类似的书其实可以写关于任何操作系统。显然，我并不完全赞同这本书；否则我也不会在用 Linux。但对于 Linux 开发者来说，其中的确有些值得关注的材料。

这本书描述了 Unix 中的问题和烦恼；由于其灵感来自一个著名的邮件列表 UNIX-HATERS，其中收录了很多现实生活中的恐怖故事，有的令人发笑，有的令人揪心。书中提到的一些问题确实存在，但有不少后来已被修复，或通过进一步开发而变得无关紧要。两个例子：

* 关于 Unix 文件系统：“……由于大多数磁盘驱动器可以一次传输高达 64K 字节，先进的文件系统以连续块的形式存储文件，以便可以在一个操作中读取或写入……这些特性都已经在商用操作系统中构建并投入使用了。Unix 一个都没有。”但事实是，大多数 Linux 系统使用的 ext2 文件系统确实做到了这一点；没有什么妨碍更好文件系统的实现。
* “Unix 没有内建系统来自动加密硬盘上存储的文件。”（你知道有什么操作系统一出厂就具备这个功能吗？你能想象那些忘记密码的用户会发出多大的抱怨吗？）无论如何，相关的软件已经被编写出来了，或者是作为加密的 NFS 服务器（CFS），或者是作为内核模块（loopback 设备）。

我从阅读这本书中得到的一些结论如下：

首先，这本书写于 1994 年，当时自由 Unix 系统还不太知名，因此书中所述的系统主要是商业系统。自由软件的支持者应该注意到，书中许多问题都源于当时大多数 Unix 变种的专有性质。作者指出 shell 和工具中的各种 bug 和功能缺失，如果能获得源代码，这些问题是可以修复的。

更好的解决方案有时没有流行开来，是因为它们被一些无意共享代码的公司所拥有。例如，书中称赞了 Veritas 文件系统这样的日志型文件系统，认为它们操作更快，系统崩溃时数据丢失风险更小。作者写道：“日志型文件系统会在整个 Unix 世界流行开来吗？大概不会，毕竟它不标准。”我认为更重要的原因是，这个文件系统是专有软件，公司要么把代码藏起来（以维持竞争优势），要么收取高额授权费（以改善财务报表）。

书中关于 X Window 系统的章节极度一针见血；X 的确是款异常复杂的系统，它在客户端和服务器之间的划分也并不总是最优的。书中提出了一个有趣的解决方案：让程序通过发送代码扩展图形服务器。这种做法曾在 Sun 的 NeWS 系统中使用过，NeWS 以 PostScript 作为语言。不幸的是，NeWS 现在早已死亡——它毕竟是个专有系统，最终被 MIT 自由发布的 X 所取代。（冷知识：NeWS 是由 James Gosling 设计的，他后来因设计 Java 而出名。Sun 看来决心不再让 Java 重蹈 NeWS 的覆辙……我们拭目以待。）

其次，许多问题可以通过整合更好的工具进系统来解决。书第 8 章中准确地指出了 Unix “find” 命令的各种问题，但这些问题在 GNU find 中似乎已经修复了。有人还写了 GNU locate，它是一种更简单的查找文件方式。它每晚运行脚本构建文件名数据库，然后“locate”命令在该数据库中搜索匹配项。这个数据库其实可以不止包含文件名；加上文件大小、创建时间后，就可以对这些字段进行搜索。完全可以设想一个守护进程，在内核支持下实时保持数据库更新。源代码是可得的，所以只需要有作者来实现这个想法……

第 8 章还指出 shell 编程复杂且受限；shell 脚本依赖如 “ls” 这样的子程序，而这些子程序在不同系统之间可能行为不同，使得可移植性成问题。引用规则也复杂，递归应用时尤为困难。这是真的，也正是为什么如今很少有人写体量大的 shell 脚本；人们转而使用 Perl 或 Python 这样的脚本语言——更强大，也更易用。

对 Linux 支持者来说，最重要的一点是：本书所述的缺陷中，并非所有在 Linux 中都已被修复！例如，大多数 Linux 发行版仍然无法真正让你“撤销删除”文件，尽管 Midnight Commander 程序似乎支持恢复删除。正如作者所说，“sendmail” 确实非常多 bug，Unix 的安全模型也不算强大。但人们已经在开发替代 sendmail 的新程序，同时也在编码诸如“不可变属性”这样的安全特性，甚至还在辩论全新的安全机制。

因此，这本书对于 Linux 开发者来说，是指出“尚待修复之处”的宝贵指南。我鼓励 Linux 开发者，或那些在寻找 Linux 项目的人，去读一读这本书。读的过程中你也许会血压飙升，但请仔细审视每一个抱怨，问问自己：“这个抱怨确实是个问题吗？如果是，怎么修？我能做出这个改进吗？”


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.bsdcn.org/unix-tong-hen-zhe-shou-ce/fu-lu/pinglun.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
