跳轉到

1971 - 第一版手冊與檔案系統(文件即證據)#

案件摘要#

1971 年 11 月 3 日,Unix 第一版手冊(First Edition Unix Programmer's Manual)正式出版。 Thompson 與 Ritchie 在 PDP-11 上整理出約 60 個系統呼叫與指令——這是 Unix 第一次以「文件」的形式留下完整卷宗。 手冊即規格:Unix 從誕生起就靠「man page」定義自己,這個傳統延續至今 50 年。

前因 -- 為什麼會有這個案子#

  • PDP-11 的到來:1970 年 Bell 實驗室買進 PDP-11(24K 記憶體),Unix 移植到這台更強的機器——Unix 第一次「搬家」,也第一次證明自己不只是 PDP-7 的玩具。
  • 專利部門的需求:Bell 的專利局要一台文字處理機——Unix 團隊以「文字處理系統」的名義申請到機器,於是 roff/troff 排版工具成為 Unix 最早的重點軟體。文件處理逼出了第一筆經費。
  • 口說無憑:Unix 要在實驗室內擴散,必須有完整、可查的文件——手冊成為「可執行的規格」。

線索與推理 -- 數學式、程式、理論#

第一條線索:檔案系統的設計(inode)#

第一版確立了 Unix 檔案系統的核心數據結構——inode(索引節點):

\[ \text{路徑名(人類可讀)} \;\xrightarrow{\text{查目錄}}\; \text{inode 號} \;\xrightarrow{\text{查 inode 表}}\; \text{磁碟區塊}. \]
  • 檔名與檔案內容分離:改名、移動不動到資料本身;多個名字(硬連結)可指向同一 inode。
  • 彌補的缺陷:當時系統把檔案資訊存在檔案本身(如 FAT 式設計),改名/連結都需複製資料。inode 把「中繼資料」獨立出來——理論上是把資料與索引分離的經典手法。

第二條線索:目錄也是檔案#

目錄在第一版 Unix 中就是一個普通檔案(含檔名→inode 的對照表)——一切皆檔案的第一次徹底實踐。

第三條線索:man page 傳統#

\[ \text{man 1}=\text{指令},\; \text{man 2}=\text{系統呼叫},\; \text{man 3}=\text{函式庫},\; \ldots \]

文件與系統同步演化:軟體不寫文件就等於不存在。

Shell 範例:inode 的實證#

# 檔名與 inode 分離:兩個名字指向同一份資料
$ echo "unix history" > a.txt
$ ln a.txt b.txt          # 硬連結:同一 inode
$ ls -i a.txt b.txt
123456 a.txt
123456 b.txt              # inode 號相同——資料只有一份

$ mv a.txt c.txt          # 改名:只改目錄項,不動資料
$ cat b.txt
unix history              # 資料完好無損

Python 範例:用 stat 讀取 inode 資訊#

import os

st = os.stat("c.txt")
print("inode 號碼:", st.st_ino)
print("硬連結數:", st.st_nlink)
print("大小:", st.st_size, "bytes")
print("修改時間:", st.st_mtime)

結案 -- 後果與影響#

  • inode 成為所有 Unix 後裔(BSD/Linux/ext4/APFS 概念)的檔案系統基礎。
  • man page 傳統:後來 GNU/Linux、BSD、macOS 全部沿用;今天的 man ls、man 2 open 就是 1971 年的手冊分類法。
  • 文字處理(roff→troff→nroff)成為 Unix 生態最早商業應用,也讓 Unix 團隊習慣「用文字流處理一切」。
  • 歷史教訓:文件即證據——先把手冊寫好,系統才真正存在。

關鍵人物與文獻#

  • K. Thompson, D. M. Ritchie:《First Edition Unix Programmer's Manual》(1971)。
  • J. F. Ossanna:troff 排版系統 (1971 年代)。
  • 相關案件:1969-Unix誕生.md、1973-Unix以C重寫與管道.md。