真實系統、效能與前沿

Unix 哲學

/ YOO-nix /

想像一間擺滿單一用途工具的廚房——只會切的刀、只會削皮的削皮器、只會過濾的篩子——而不是一個想包辦一切卻樣樣做不好的巨大裝置。Unix 哲學就是以同樣的精神來建構軟體:讓每個程式把一件小事做好,並讓程式之間容易串接,使一連串小工具能合力完成一件大事。Unix 約於 1969 至 1971 年誕生於貝爾實驗室(Ken Thompson 與 Dennis Ritchie),它所養成的思考習慣至今仍形塑著 Linux、macOS、Android 與大多數伺服器。

三個觀念撐起了大半。第一,寫只做好一件事的程式,而不是龐雜的全能應用程式。第二,讓程式從輸入讀取純文字、向輸出寫出純文字以彼此協作,這樣一個程式的輸出就能成為下一個的輸入。管線(pipe)就是黏合劑:像 cat log.txt | grep error | sort | uniq -c | sort -rn 這樣的指令會讀檔、只留下含 error 的行,再排序並數出最常見的——四個小工具合作,毫無特殊整合。第三,把幾乎一切都當成檔案:一個普通檔案、一個裝置、甚至一條網路連線,都能用同一小組呼叫去開啟、讀取與寫入,於是一個簡單介面適用於許多事物。

誠實的提醒是:這套哲學是準則而非法律,真實系統不斷在彎折它。純文字對人友善,但相較於結構化的二進位格式既慢又含糊;許多大量使用的 Unix 程式(例如外殼或網頁伺服器)一點也不小;而現代工具有時偏好豐富的結構化資料勝於鬆散的文字。儘管如此,其核心直覺——小巧、可組合、統一、介面乾淨的零件——仍是整個運算領域中最具影響力的設計理念之一,遠遠超出作業系統的範圍。

想從伺服器日誌找出最忙碌的十個網頁,你不必另寫程式。你把現成工具串起來:awk '{print $7}' access.log | sort | uniq -c | sort -rn | head——取出網址欄、排序、數重複、依次數排序、取前十。每個工具都已存在數十年、對這項任務一無所知,合在一起卻一行就解出答案。

小工具加上管線:組合讓簡單的零件變成強大的整體。

常見的誤讀是把 Unix 哲學當成「一切都必須小巧」。其實不然——它指的是乾淨、可組合的介面。龐大的 Unix 程式確實存在;重點在於它們仍能透過簡單、共享的慣例良好協作。

又稱
the Unix wayUnix 設計哲學