shell學習筆記_1_UNIX簡史
时间:2010-08-16 来源:chenliangmoran
UNIX最初是由貝爾電話實驗室(Bell Telephone Laboratories)的計算機科學研
究中心(Computing Sciences Research Center)開發的。第一版誕生于1970年--也
就是在貝爾實驗室(Bell Labs)推出Multics項目不久。在UNIX廣受歡迎的功能中,有
許多便是來自Multics操作系統。其中最著名的有:將設備視為文件,以及特意不將命
令解釋器(command interpreter)或Shell整合到操作系統中。更完整的歷史信息可在
http://www.bell-labs.com/history/unix找到。
由于UNIX是在面向研究的環境下開發的,因而沒有必須生產或者銷售成本的盈利壓力。 這使其具有下列優勢:
× 系統由用戶自行開發。他們使用這套系統來解決每天所遇到的計算問題。
× 研究人員可以不受拘束地進行試驗,必要時也可任意變換程序。由于用戶群不大, 若程序有必要整個重寫,多半也不會太難。由于用戶即為開發人員,發現問題時便 能隨即修正,有地方需要加強時,也可以馬上就做。 UNIX已歷經數個版本,各個版本以字母V加上數字作為簡稱,如V6、V7,等等。 (正式名稱則是遵循發行的使用手冊的修訂次數編號來命名,例如Frist Edition、 Second Edition,等等。這兩種名稱的對應其實很直接:V6=Sixth Edition、V7= Seventh Edition。和大多數有經驗的UNIX程序員一樣,這兩種命名方式我們都會 用到)。影響最深遠的UNIX系統是1979年發行的第7版(Seventh Edition),但 是在最初的幾年,它僅用于學術教育機構領域。值得一提的是:第7版的系統同 時提出了 awk 與 Bourne Shell,這兩者是POSIX Shell的基礎,同時,第一本討 論UNIX的書也在此誕生。
× 貝爾實驗室的研究人員都是計算機科學家。他們所設計的系統不單單是自己使用, 還要分享給同事--這些人一樣也是計算機科學家。因此,衍生出“務實(no nonsense)”的設計模式:程序會執行你所賦予的任務,但不會跟你說話,也不會問 一堆“你確定嗎?”之類的問題。
× 除了精益求精,在設計與問題解決上,他們也不斷地追求“優雅“(elegance)。關 于“優雅”有一個切貼的定義:簡單就是力量(power cloaked in simplicity)。 貝爾實驗室自由的環境,所早就的不僅是一個可用的系統,也是一個優雅的系統。
當然,自由同樣也帶來了一些缺點。當UNIX流傳至開發環境以外的地方,這些問題也 逐一浮現:
× 工具程序之間存在許多不一致的地方。例如,同樣的選項字母,在不同的程序之間有 完全不一樣的定義;或是相同的工作卻需要指定不同的選項字母。此外,正則表達 式的語法在不同程序之間用法類似,卻又不完全一樣,易產生混淆--這種情況 其實可以避免。(直至正則表達式的重要性受到認可,其模式匹配機制才得以收錄 在標准程序庫中。)
× 諸多工具程序具有缺陷,例如輸入行(input lines)的長度,或是可打開的文件個 數,等等。(現行的系統多半已經修正這些缺陷。)
× 有時程序并未經過徹底測試,這使得它們在執行的時候一不小心就會遭到破壞,這 可能會導致核心轉儲(core dumps),令用戶不知所措。幸好,現行的UNIX 系統極少會面臨這樣的問題。
× 系統的文檔盡管大致上內容完備,但通常極為簡單。使得用戶在學習時很難找到所 需要的信息。
最初的UNIX機器(Digital Equipment Corporation PDP-11s)不能運行大型程序。要 完成復雜的工作,得先將它分割成更小的工作,再用程序來完成這些更小的工作。某些 常見的工作(從數據行中提取某些字段、替換文本,等等)也常見與許多大型項目,最 後就成了標准工具。人們認為這種自然而然的結果是件好事:由于缺乏大型的解決空間, 因而產生了更小、更簡單、更專用的程序。
許多人在UNIX的使用上采用半獨立的工作方式,重復套用彼此間的程序。由于版本之 間的差异,而且不需要標准化,導致許多日常工具程序的發展日漸分歧。舉例來說,grep 在某系統裏使用-i來表示“查找時乎略大小寫”,但在另一個系統中,卻使用-y來代 表同樣的事!無獨有偶,這種怪事也發生在許多工具程序上。還有,一些常用的小程序 可能會取相同的名字,針對某個UNIX版本所編寫的Shell程序,不經修改可能無法在 另一個版本上執行。
最後,對日常標准工具組與選項的需求終于明朗化,POSIX標准即為最後的結果。現行 標准IEEE Std. 1003.1-2004包含了C的庫層級的主題,還有Shell語言與系統工具機槍 選項。
好消息是,在這些標准上所做的努力有了回報。現在的商用UNIX系統,以及可免費使 用的同類型產品,例如GNU/Linux 與BSD衍生系統,都兼容POSIX。這樣一來,學習 UNIX變得更容易,編寫可移植的Shell腳本也成為可能。
值得注意的是:POSIX并非UNIX標准化的唯一成果,POSIX之外仍有其他標准。例 如,歐洲計算機制造商協會自行發起了一套名為X/Open的標准。其中最受歡迎的是1988 年首度出現的XPG4(X/Open Portability Guide, Fourth Edition).另外還有XPG5,其 更廣為人知的名稱為UNIX98標准,或Single UNIX Specification.XPG5很大程度上 把POSIX納入為一個子集,同樣深具影響力。
XPG標准在措詞上可能不後嚴謹,但其內容卻較為廣泛。其目標是將現存于UNIX系統 上實際用到的各種功能正式生成文檔。(POSIX的目的在于建立一套正式的標准,讓從 頭開始的實踐者有指導方針可以套用--即便是在非UNIX的平台上。因此,許多 UNIX系統上常見的功能,一開始就排除在POSIX標准之外)。2001 POSIX標准由于納 入了X/Open System Interface Extension(XSI)而有了雙重身份,也叫做XPG6,這 是它首度正式擴張POSIX版圖。此文檔的特色在于:讓系統不只兼容POSIX,也兼容 于XSI。所以,當你在編寫工具或應用程序時,必須參考的正式文件只有一份(就叫做 Single UNIX Standard)。
由于UNIX是在面向研究的環境下開發的,因而沒有必須生產或者銷售成本的盈利壓力。 這使其具有下列優勢:
× 系統由用戶自行開發。他們使用這套系統來解決每天所遇到的計算問題。
× 研究人員可以不受拘束地進行試驗,必要時也可任意變換程序。由于用戶群不大, 若程序有必要整個重寫,多半也不會太難。由于用戶即為開發人員,發現問題時便 能隨即修正,有地方需要加強時,也可以馬上就做。 UNIX已歷經數個版本,各個版本以字母V加上數字作為簡稱,如V6、V7,等等。 (正式名稱則是遵循發行的使用手冊的修訂次數編號來命名,例如Frist Edition、 Second Edition,等等。這兩種名稱的對應其實很直接:V6=Sixth Edition、V7= Seventh Edition。和大多數有經驗的UNIX程序員一樣,這兩種命名方式我們都會 用到)。影響最深遠的UNIX系統是1979年發行的第7版(Seventh Edition),但 是在最初的幾年,它僅用于學術教育機構領域。值得一提的是:第7版的系統同 時提出了 awk 與 Bourne Shell,這兩者是POSIX Shell的基礎,同時,第一本討 論UNIX的書也在此誕生。
× 貝爾實驗室的研究人員都是計算機科學家。他們所設計的系統不單單是自己使用, 還要分享給同事--這些人一樣也是計算機科學家。因此,衍生出“務實(no nonsense)”的設計模式:程序會執行你所賦予的任務,但不會跟你說話,也不會問 一堆“你確定嗎?”之類的問題。
× 除了精益求精,在設計與問題解決上,他們也不斷地追求“優雅“(elegance)。關 于“優雅”有一個切貼的定義:簡單就是力量(power cloaked in simplicity)。 貝爾實驗室自由的環境,所早就的不僅是一個可用的系統,也是一個優雅的系統。
當然,自由同樣也帶來了一些缺點。當UNIX流傳至開發環境以外的地方,這些問題也 逐一浮現:
× 工具程序之間存在許多不一致的地方。例如,同樣的選項字母,在不同的程序之間有 完全不一樣的定義;或是相同的工作卻需要指定不同的選項字母。此外,正則表達 式的語法在不同程序之間用法類似,卻又不完全一樣,易產生混淆--這種情況 其實可以避免。(直至正則表達式的重要性受到認可,其模式匹配機制才得以收錄 在標准程序庫中。)
× 諸多工具程序具有缺陷,例如輸入行(input lines)的長度,或是可打開的文件個 數,等等。(現行的系統多半已經修正這些缺陷。)
× 有時程序并未經過徹底測試,這使得它們在執行的時候一不小心就會遭到破壞,這 可能會導致核心轉儲(core dumps),令用戶不知所措。幸好,現行的UNIX 系統極少會面臨這樣的問題。
× 系統的文檔盡管大致上內容完備,但通常極為簡單。使得用戶在學習時很難找到所 需要的信息。
最初的UNIX機器(Digital Equipment Corporation PDP-11s)不能運行大型程序。要 完成復雜的工作,得先將它分割成更小的工作,再用程序來完成這些更小的工作。某些 常見的工作(從數據行中提取某些字段、替換文本,等等)也常見與許多大型項目,最 後就成了標准工具。人們認為這種自然而然的結果是件好事:由于缺乏大型的解決空間, 因而產生了更小、更簡單、更專用的程序。
許多人在UNIX的使用上采用半獨立的工作方式,重復套用彼此間的程序。由于版本之 間的差异,而且不需要標准化,導致許多日常工具程序的發展日漸分歧。舉例來說,grep 在某系統裏使用-i來表示“查找時乎略大小寫”,但在另一個系統中,卻使用-y來代 表同樣的事!無獨有偶,這種怪事也發生在許多工具程序上。還有,一些常用的小程序 可能會取相同的名字,針對某個UNIX版本所編寫的Shell程序,不經修改可能無法在 另一個版本上執行。
最後,對日常標准工具組與選項的需求終于明朗化,POSIX標准即為最後的結果。現行 標准IEEE Std. 1003.1-2004包含了C的庫層級的主題,還有Shell語言與系統工具機槍 選項。
好消息是,在這些標准上所做的努力有了回報。現在的商用UNIX系統,以及可免費使 用的同類型產品,例如GNU/Linux 與BSD衍生系統,都兼容POSIX。這樣一來,學習 UNIX變得更容易,編寫可移植的Shell腳本也成為可能。
值得注意的是:POSIX并非UNIX標准化的唯一成果,POSIX之外仍有其他標准。例 如,歐洲計算機制造商協會自行發起了一套名為X/Open的標准。其中最受歡迎的是1988 年首度出現的XPG4(X/Open Portability Guide, Fourth Edition).另外還有XPG5,其 更廣為人知的名稱為UNIX98標准,或Single UNIX Specification.XPG5很大程度上 把POSIX納入為一個子集,同樣深具影響力。
XPG標准在措詞上可能不後嚴謹,但其內容卻較為廣泛。其目標是將現存于UNIX系統 上實際用到的各種功能正式生成文檔。(POSIX的目的在于建立一套正式的標准,讓從 頭開始的實踐者有指導方針可以套用--即便是在非UNIX的平台上。因此,許多 UNIX系統上常見的功能,一開始就排除在POSIX標准之外)。2001 POSIX標准由于納 入了X/Open System Interface Extension(XSI)而有了雙重身份,也叫做XPG6,這 是它首度正式擴張POSIX版圖。此文檔的特色在于:讓系統不只兼容POSIX,也兼容 于XSI。所以,當你在編寫工具或應用程序時,必須參考的正式文件只有一份(就叫做 Single UNIX Standard)。
相关阅读 更多 +