星期六, 2月 03, 2007

Linux及Unix歷史及各種功能簡介

作業系統扮演的角色
一部運作正常的電腦,不論是超級電腦還是桌上型 PC ,大致上主要由三個部份所構成的,這三個部份分別是硬體,作業系統和應用程式。硬體,顧名思意,就是像 CPU ,硬碟等這些構成電腦的電子元件,而應用程式則是使用者利用來完成特定目標的程式,例如 ms word 是專門作文書處理的應用程式,netscape 是 brower 。應用程式是一個集合,代表所有執行於作業系統以上的軟體,基本上我們每天開機使用的都是一個又一個的應用程式。那作業系統又是什麼?作業系統位於幕後,是位默默耕耘的功臣,雖然不像硬體看得見,或是像應用程式可以直接使用,它卻影響整部電腦的效率甚巨。它的兩個最重要的任務是提供應用程式介面及資源管理。

控制硬體是件極複雜的事,以讀寫軟碟為例,必須啟動馬達,移動磁頭等等,如果開發應用程式須要包含硬體的控制,那麼難度馬上增加好幾倍,而且不同廠牌的硬體又會有不同的操作方法,等於對每一家硬體廠商須要重寫一次。還好,應用程式控制硬體的方式大同小異,以軟碟為例,不外乎格式化(format),讀出資料,寫入資料等少數幾個動作。把這些硬體的常用動作,寫成類似函式庫的形式,提供給應用程式呼叫,就是作業系統核心的主要任務之一。這些由作業系統核心提供給應用程式用的類函式統稱為系統呼叫(system calls),從此以後,應用程式不必再擔心軟碟的運作,它只須呼叫 system call 的 read 或 write ,它甚至不須要管它要寫入資料的是硬碟還是軟碟,使得應用程式的開發可以專心在它的特色功能上。

作業系統依特性可分為單工與多工,DOS 是一個單工的作業系統,單工作業系統的預設是,一個應用程式執行完畢後才會執行另一個程式,因此它允許應用程式可以無限制地使用系統的資源,例如 CPU 時間,記憶體和 IO 等等,這個應用程式甚至可以佔據系統,不再將主導權交回作業系統。這類單工的作業系統只須提供上述的系統呼叫便已足夠。而多工的作業系統,如 Linux ,它允許多個應用程式同時進行,共用 CPU 時間和記憶體,因此只提供系統呼叫的服務是不夠的,還必須做資源的管理,讓這些同時在執行的應用程式不會互相干擾,例如一個程式不能寫入另一程式的記憶體,才能確保這些應用程式都能順利地完成任務。

提供應用程式介面及資源管理並不是完全獨立的,而是相輔相成,因為當程式透過系統呼叫去存取 IO 或要求記憶體時,系統呼叫會呼叫作業系統,作業系統將所有來自程式的要求整合後,在滿足它們的要求時,也作資源管理。

一般多工作業系統可分為下列次系統:行程管理(為了簡單化,此處將行程和程式視為同義),記憶體管理,檔案系統,IO 及網路系統。這些次系統分別管理整部電腦的一些重要資源,行程管理是管理CPU時間的分配,其它的次系統從名字,即可得知它們所管理的資源。


Unix 歷史簡介
何 謂 Unix ?
這 是 一 個 十 分 有 趣 的 問 題 , 如 果 問 題 何 謂 M$-DOS ? 何 謂 VMS 或 何 謂 NT ? 回 答 它 們 都 是 OS 倒 也 不 會 有 人 有 異 議 。 不 過 對 於 Unix , 問 題 就 變 得 複 雜 了 。 不 是 說 Unix 不 是 OS , 但 這 回 答 對 於 很 Unix 玩 家 來 說 總 顯 得 過 於 片 面 及 少 看 了 Unix 。

Unix 原 本 是 一 個 由 Bell Labs 發 展 出 來 的 多 用 戶 (Multi-User) 多 工 (Multitasking) 的 OS 。 Unix 這 名 字 主 要 是 對 之 前 Bell Labs 曾 參 與 的 Multics 計 劃 的 反 嘲 。 由 於 其 Source Code 簡 單 易 理 解 及 高 移 植 性 ( 首 個 使 用 高 階 程 式 語 言 編 寫 成 的 OS) , 加 上 初 AT&T 對 Unix Source Code 版 權 的 態 度 蠻 開 放 ( 或 者 正 確 來 說 應 是 AT&T 還 未 發 覺 Unix 是 這 麼 值 錢 的 ) 被 不 少 大 學 及 公 司 移 植 到 很 多 不 同 的 平 台 。 現 在 上 至 超 級 電 腦 如 Cray , 下 至 個 人 電 腦 如 Macintosh 及 IBM PC 都 有 Unix 。 所 以 比 較 正 確 來 說 , Unix 是 代 表 了 一 系 列 的 OS , 包 括 一 些 不 含 任 何 原 身 Bell Labs Unix 程 式 碼 但 擬 似 Unix 的 OS ( 就 是 所 謂 的 Unix-clone , Linux 就 是 當 中 的 俵 俵 者 ) 。

現 在 由 最 初 Bell Labs 發 展 出 Unix Source code 版 權 屬 於 SCO 而 其 名 字 UNIX ( 全 大 階 ) 則 屬 於 The Open Group (TOG) 所 有 。 TOG 制 定 了 一 系 列 UNIX 標 準 , 當 任 何 生 產 商 的 OS 要 符 合 其 標 準 才 可 用 UNIX 這 個 名 字 , 如 DEC 的 Digital UNIX 。

然 而 , 這 也 還 不 能 把 Unix 完 整 地 描 述 出 來 。 在 Larry Wall 及 Randal L. Schwartz. 所 著 的 『 Programming Perl 』 的 辭 解 (Glossary) 中 , 就 打 趣 地 說 Unix 是 一 個 大 而 不 斷 演 進 的 語 言 , 當 中 包 含 了 大 量 互 相 不 協 調 的 語 法 。 講 Unix 的 人 總 認 為 它 很 易 學 , 因 為 它 可 以 很 容 易 地 被 改 變 成 自 己 熟 識 的 語 法 。 這 解 析 有 點 反 Unix 味 , 但 也 顯 示 出 對 於 很 多 人 來 說 , Unix 已 超 越 了 一 個 OS , 象 徵 了 一 套 操 作 環 境 、 語 言 甚 至 哲 學 及 文 化 。 或 者 借 一 句 『 君 處 牆 外 , 焉 能 知 宮 庭 之 美 ? 』 , 只 有 真 正 了 解 及 喜 愛 Unix 的 人 才 會 明 白 Unix 的 哲 學 及 文 化 。

怎 了 ? 過 玄 嗎 ? 太 過 含 糊 嗎 ? 其 實 就 以 擬 似 Unix 來 說 , 也 有 程 度 之 分 。 M$-DOS 在 設 計 時 就 借 了 Unix 不 少 靈 感 , 如 樹 狀 結 構 的 檔 案 系 統 (Tree-structured File System) 及 管 道 (pipe) 等 。 Windoze NT 本 身 也 支 援 POSIX.1 ( 一 套 定 義 了 Unix 基 本 的 System Call 的 標 準 ) , 但 總 沒 有 人 會 認 同 它 們 是 Unix 的 一 種 。 個 人 認 為 UNIX FAQ part6 中 對 Unix 的 定 義 不 錯 , 給 我 弄 得 糊 塗 的 朋 友 參 考 。

『 我 們 所 提 的 Unix 指 的 是 一 個 通 常 是 由 C 寫 成 的 作 業 系 統 , 它 有 階 層 式 的 檔 案 系 統 , 統 合 了 檔 案 和 裝 置 (device) I/O , 其 系 統 函 式 呼 叫 ( system call ) 介 面 包 含 了 如 fork() , pipe() 等 服 務 , 而 且 它 的 使 用 者 介 面 包 含 cc , troff , grep , awk 之 類 的 工 具 及 某 一 種 shell 。 』

Multics 的 失 敗
要 談 Unix 的 歷 史 , 一 定 要 回 溯 到 1965-68 年 美 國 電 話 及 電 報 公 司 (American Telephone and Telegraph Inc., AT&T) 、 通 用 電 器 公 司 (General Eletrics, G.E.) 及 麻 省 理 工 學 院 (Massachusetts Institute of Technology, MIT) 的 Multics (MULTiplexed Information and Computing Service) 計 劃 。

在 那 時 期 , 大 部 份 電 腦 都 是 採 用 批 次 處 理 (Batch Processing) 方 式 。 為 了 顯 示 多 用 途 (general-purpose) 及 多 用 戶 (multiuser) 的 分 時 系 統 (timesharing system) 是 可 行 的 , MIT 以 在 試 驗 CTSS(Compatible Time-Sharing System) 當 中 所 得 的 研 究 成 果 取 得 了 G.E 的 同 意 合 作 為 G.E. 的 大 型 電 腦 GE-635 開 發 一 套 全 新 的 分 時 作 業 系 統 ─ ─ Multics 。

由 於 Multics 有 不 少 設 計 在 當 時 是 頗 新 穎 具 富 創 意 的 , 因 此 吸 引 了 不 少 研 究 機 構 的 注 意 。 而 其 中 那 時 仍 和 AT&T 同 一 家 的 貝 爾 實 驗 室 (Bell Labraries, BellLabs) 更 在 六 十 年 代 末 曾 正 式 參 於 過 Multics 計 劃 , 那 時 剛 由 加 州 柏 克 萊 大 學 (University of California at Berkeley, UCB) 去 到 Bell Labs 的 Ken Thompson 就 是 Multics 研 究 小 組 的 一 員 。

不 過 Multics 的 發 展 進 度 很 慢 , 原 本 預 算 兩 年 有 成 果 但 過 了 很 久 仍 沒 有 多 大 進 展 。 到 了 1969 年 , Bell Labs 終 於 決 定 放 棄 , 退 出 了 Multics 計 劃 。 Bell Labs 的 Dennis Ritchie ( K&R 的 R ) 曾 描 述 當 時 Bell Labs 由 管 理 層 到 研 究 員 都 認 為 Multics 的 開 發 是 太 遲 及 太 貴 了 。

Multics 自 Bell Labs 退 出 後 , 仍 有 繼 續 發 展 。 Honeywell 在 1972 年 購 入 了 G.E. 的 電 腦 部 門 後 更 把 Multics 進 出 商 業 市 場 , 但 始 終 不 算 太 成 功 。 在 Multics 比 較 流 行 的 八 十 年 代 , 約 有 75 至 100 台 每 台 價 值 數 百 萬 美 元 的 大 型 電 腦 跑 Multics 。 1977 年 , MIT 也 退 出 Multics 的 發 展 工 作 。 後 來 Honeywell 在 八 十 年 代 中 期 把 其 電 腦 上 的 事 業 賣 給 Bull 後 , Multics 的 發 展 亦 終 於 在 1988 年 打 上 一 個 句 號 。
『 角 落 中 乏 人 問 津 的 PDP-7 』 ( "little-used PDP-7 in a corner" )
然 而 , Thompson 曾 在 Multics 計 劃 當 中 為 GE-635 寫 了 個 叫 做 「 太 空 旅 行 」 (Space Travel) 的 遊 戲 程 式 。 這 個 程 式 模 擬 了 一 個 太 空 船 和 太 陽 系 的 環 鏡 。 Bell Labs 放 棄 Multics 後 , Thompson 打 算 找 一 台 機 器 把 「 太 空 旅 行 」 移 植 (port) 過 去 , 於 是 便 和 Ritchie 向 Bell Labs 提 議 買 一 台 電 腦 以 便 他 們 建 立 一 台 自 己 的 交 談 式 、 多 用 戶 、 分 時 系 統 , 不 過 他 們 的 申 請 並 沒 有 被 接 納 。 最 後 , Thompson 在 一 角 落 裡 發 現 了 一 台 很 少 人 用 的 PDP-7 (Programmed Data Processor) 。


PDP-7 是 迪 吉 多 (Digital Equipment Corporation, DEC) 在 1964 年 進 出 的 迷 你 電 腦 (minicomputer) 。 這 台 約 和 Commodore 64 同 級 的 電 腦 ?作 業 系 統 對 於 Thompson 來 說 十 分 簡 陋 , 於 是 Thompson 就 順 帶 以 他 在 Multics 計 劃 中 學 到 的 技 術 和 經 驗 , 為 這 台 過 時 的 電 腦 上 撰 寫 一 套 新 作 業 系 統 。 這 套 作 業 系 統 有 很 多 構 想 是 來 自 Multics , 包 括 樹 狀 結 構 (tree-structured) 的 檔 案 系 統 、 用 戶 層 面 的 命 令 解 釋 器 (Command Interpreter) , 簡 單 表 現 文 字 檔 及 對 週 邊 設 備 (Device) 的 綜 合 化 存 取 等 。

最 初 , Thompson 並 不 是 在 PDP-7 上 撰 寫 他 的 新 系 統 , 而 是 先 在 一 台 GE-635 上 使 用 GEMAP 組 譯 器 (Assembler) 的 巨 集 (Macros) 編 寫 程 式 , 再 經 由 一 後 置 處 理 器 (postprocesser) 產 生 可 供 PDP-7 讀 取 的 紙 帶 (paper tape) 。 這 樣 一 來 一 回 , 由 GE 到 PDP-7 , 直 到 一 個 雛 型 的 核 心 (Kernel) 、 一 個 編 輯 器 (Editor) 、 一 個 組 譯 器 (Assembler) 、 一 個 簡 單 的 Shell ( 命 令 解 釋 器 , Command Interpreter ) 及 一 些 公 用 程 式 如 rm 、 cat 、 及 cp 等 完 成 了 , 整 個 系 統 可 以 自 給 自 足 後 , 所 有 開 發 工 作 才 在 PDP-7 上 繼 續 。

而 這 套 作 業 系 統 最 初 由 與 Thompson 共 事 的 Brian W. Kernighan ( K&R C 中 的 K ) 命 名 為 Unics (UNiplexed Information and Computing System) , 和 Multics 開 了 個 玩 笑 。 1971 年 間 改 成 Unix , 用 Uni 對 Multi , cs 對 x 。 提 起 Unix 的 名 字 , 很 多 人 都 疑 惑 正 確 的 寫 法 是 全 大 楷 的 'UNIX' , 還 是 只 有 起 首 大 階 的 'Unix' 。 Ritchie 就 解 釋 說 'UNIX' 言 個 寫 法 源 自 1974 年 CACM 的 文 件 "The UNIX Time-Sharing System" , 當 時 這 班 先 鋒 研 究 者 剛 剛 得 了 個 新 的 typesetter 及 開 發 了 troff 。 一 大 班 人 正 對 small caps 字 款 著 了 迷 , 導 致 了 'UNIX' 的 產 生 。 仲 使 Ritchie 在 往 多 次 以 Unix 並 不 是 任 何 句 子 的 縮 寫 為 理 由 想 在 幾 份 Bell Labs 的 文 件 用 回 'Unix' , 最 後 都 失 敗 。 而 後 來 UNIX 的 註 冊 商 標 也 是 以 全 大 寫 為 準 。

First Edition Unix
到 了 1970 年 , 這 班 Unix 的 研 究 者 獲 得 配 合 一 台 新 的 十 六 位 元 電 腦 DEC PDP-11/20 , 條 件 就 是 要 為 Unix 加 入 較 佳 的 文 件 處 理 工 具 。 不 過 台 電 腦 迅 速 地 送 到 研 究 者 的 桌 上 後 , 它 的 磁 碟 足 足 慢 了 三 個 月 才 運 到 。 就 在 這 機 在 碟 未 到 的 等 候 時 間 中 , Thompson 用 PDP-11 的 組 合 語 言 (Assembly Langauge) 重 寫 了 整 個 Unix 核 心 及 基 本 的 命 令 。 當 時 那 台 PDP-11/20 只 有 24KB 記 憶 體 (Memory) , 這 個 最 早 期 的 PDP-11 版 Unix 就 佔 用 了 12KB , 其 餘 的 記 憶 就 被 拿 來 跑 用 戶 的 程 式 和 作 RAM Disk 。 僅 有 500KB 的 磁 碟 空 間 以 及 在 毫 無 記 憶 保 護 (Memory Protection) 的 情 況 下 , 支 持 三 個 用 戶 同 時 作 編 輯 和 格 式 化 文 件 和 那 群 先 鋒 開 發 者 繼 續 Unix 的 發 展 工 作 。

1971 年 11 月 , 這 班 懶 惰 的 開 發 者 終 於 把 第 一 版 Unix 的 說 明 書 (Manual) 定 稿 。 往 後 每 一 由 Bell Labs 發 展 出 來 Unix 的 版 本 都 以 同 時 出 版 的 說 明 文 件 的 版 號 為 準 。 如 所 謂 Unix Version 1 (V1) 其 實 就 是 指 第 一 版 (First Edition) Unix 說 明 書 所 載 的 Unix 。 所 以 在 Bell Labs 內 部 一 直 都 稱 呼 nth Edition Unix , 不 是 外 間 的 Unix Version n 。 V1 已 有 了 基 本 的 檔 案 系 統 、 fork() 、 roff (troff 的 前 身 ) 及 ed 等 , 並 被 用 作 處 理 專 利 文 件 的 工 具 。 而 pipe() 就 在 第 二 版 (Version 2) 中 初 次 出 現 。
C 的 誕 生
在 開 發 V1 時 , 由 於 PDP-7 和 PDP-11 的 組 合 語 言 差 異 很 大 , 令 移 植 的 工 作 非 常 因 難 。 Thompson 這 時 突 發 奇 想 , 覺 得 如 用 高 階 語 言 (High-level Langauge) 來 撰 寫 Unix , 移 植 和 維 護 的 工 作 都 會 變 得 簡 單 得 多 。 對 於 C 語 言 極 度 盛 行 的 今 日 , 這 想 法 可 能 不 怎 麼 。 但 在 當 時 絕 對 是 十 分 瘋 狂 , 執 行 效 率 要 高 且 記 憶 體 使 用 要 省 的 系 統 程 式 (System Software) 必 需 要 用 組 合 語 言 來 撰 寫 的 觀 念 早 已 根 植 在 當 時 每 一 個 電 腦 人 心 中 。

Thompson 首 先 嘗 試 使 用 FORTRAN 來 寫 , 不 過 沒 有 成 功 。 後 來 他 找 來 一 個 叫 BCPL 的 語 言 , 在 使 用 期 間 整 理 了 BCPL 的 若 干 功 能 , 成 了 另 一 個 新 的 程 式 語 言 B 。 V1 中 就 有 少 量 公 用 程 式 是 用 B 來 撰 寫 。 後 來 Ritchie 加 入 了 Unix 的 開 發 行 列 , 很 快 發 現 了 B 語 言 有 若 干 缺 點 , 如 資 料 型 態 (Data Type) 的 缺 乏 等 。 Ritchie 著 手 改 良 B 語 言 , 誕 生 了 著 名 的 C 語 言 。

1973 年 初 , C 語 言 的 重 要 特 性 大 都 完 成 了 。 在 各 方 條 件 都 足 夠 的 情 況 下 , Thompson 、 Ritchie 及 他 們 的 同 伴 在 同 年 的 夏 天 把 Unix 的 核 心 用 C 重 寫 。 這 也 是 所 謂 的 第 四 版 (Version 4, V4) , 有 九 成 多 的 程 式 碼 是 用 C 來 寫 。 在 整 個 作 業 系 統 史 上 , 這 是 一 件 很 重 要 的 事 , 也 是 Unix 的 轉 折 點 。 這 意 味 著 Unix 可 以 很 容 易 被 修 改 , 也 使 其 成 為 第 一 個 在 源 程 式 層 面 上 可 移 值 (source-portable) 的 作 業 系 統 , 可 以 在 很 短 時 間 移 值 (port) 另 一 台 的 電 腦 中 。


Linux 歷史簡介



由於版權問題,Unix 的源碼不再適用於教學,1987 年 Andrew Tanenbaum 遂寫了 MINIX 作為教學的工具,MINIX 的意思為 mini-Unix,它是一個簡化的作業系統,適合入門者學習作業系統,因為簡單,剛開始時獲得眾人的青睞,但好景不長,原因是它過於簡單反而不切實用。

1991 年,Linus Torvalds 開始使用 MINIX,他對 MINIX 提供的功能不滿意,自行發展 Linux,他把 Linux 的原始碼放在 Internet 上,允許人們自由使用 (under GNU Public License)。Linux 是第一個完全免費的 Unix,很快地,許多人開始修改及加強 Linux,如今,Linux 除了可以在原先設計的 Intel x86(x>=3) 上執行外,它也被移植到 Alpha, Sun Sparc, Motorola 68K, MIPS, PowerPC 等等的平台上。

由於 Linux 提供和 Unix 類似的介面,因此,在資源的抽象化上及資源分享的型式上就必須和 Unix 相同,它和其它Unix不同的地方在於實作這些介面時所使用的資料結構及演算法。

Linux 是一個多工的作業系統,許多程式可以一次讀到記憶體內,作業系統執行某個程式一陣時間後,就會切換去執行另一個程式。所以記憶體是被空間分割,分成數個區塊,每個區塊稱為 memory partition,內含一個隨時可以執行的程式。CPU 是被時間分割,每段時間執行一個在記憶區塊內的程式,時間到了便切換到另支一程式。在 Intel x86 平台上,CPU 每秒約切換100次,在 Alpha 平台則切換約 1024 次,這些切換次數可依需要而修改,大致而言,降低切換次數會使諸如鍵盤,mouse 的反應變慢,但應用程式執行的效率會提高,相反地,如果提高切換次數則會使程式的執行變慢,因為更多的 CPU 時間被用來切換程式。

Linux 核心和傳統的 Unix 一樣,是屬於集成式的作業系統核心 (monolithic kernel),和目前流行的微核心 (microkernel) 不同。它們將行程管理,記憶體管理和檔案系統包在一起,成為一個單一的可執行檔,而週邊硬體裝置管理則另外分開,成為一組驅動程式,每一個驅動程式的目的是控制某一類型的硬體裝置,例如控制軟碟機。這種設計是為了降低核心更動的頻率,不必為了新硬體裝置更改核心,而且驅動程式也比較好寫。但是 Linux 核心的進步非常迅速,這種設計反而不利於核心的實驗更新,為了克服這個缺點,Linux 提出模組 (module) 機制,這是種軟體容器,它和核心的介面要比傳統 Unix 的驅動程式來的有彈性,可以用來提供新功能給核心,當然也適用於寫驅動程式。
* Linux 的優點:

那幹嘛要使用 Linux 做為我們的主機系統呢?這是因為 Linux 有底下這些優點:

o 穩定的系統:Linux 本來就是建立在 Unix 上面發展出來的作業系統,因此,Linux 具有與 Unix 系統相似的的程式介面跟操作方式,當然也繼承了 Unix 穩定並且有效率的特點。常聽到安裝 Linux 的主機連續運做一年以上而不曾當機、不必關機是稀鬆平常的事;

o 免費或少許費用:由於 Linux 是基於 GPL 的基礎下的產物,因此任何人皆可以自由取得 Linux ,至於一些『安裝套件』的發行者,他們發行的安裝光碟也僅需要些許費用即可獲得!不同於 Unix 需要負擔龐大的版權費用,當然也不同於微軟需要一而再、再而三的更新你的系統,並且繳納大量費用囉!

o 安全性、漏洞的修補:如果你常玩網路的話,那麼你最常聽到的應該是『沒有絕對安全的主機』!沒錯!不過 Linux 由於支援者日眾,有相當多的熱心團體、個人參與其中的開發,因此可以隨時獲得最新的安全資訊,並給予隨時的更新,亦即是具有相對的較安全!

o 多工、多使用者:與 Windows 系統不同的, Linux 主機上可以同時允許多人上線來工作,並且資源的分配較為公平,比起 Windows 的單人假多工系統要穩定的多囉! 這個多人多工可是 Unix-Like 上面相當好的一個功能,怎麼說呢?你可以在一部 Linux 主機上面規劃出不同等級的使用者,而且每個使用者登入系統時的工作環境都可以不相同,此外,還可以允許不同的使用者在同一個時間登入主機,以同時使用主機的資源。

o 使用者與群組的規劃:在 Linux 的機器中,檔案的屬性可以分為『可讀、可寫、可執行』等參數來定義一個檔案的適用性,此外,這些屬性還可以分為三個種類,分別是『檔案擁有者、檔案所屬群組、其他非擁有者與群組者』。這對於專案計畫或者其他計畫開發者具有相當良好的系統保密性。

o 相對比較不耗資源的系統:Linux 只要一部 p-100 以上等級的電腦就可以安裝並且使用愉快囉!還不需要到 P-III 等級的電腦呢!不過,如果你要架設的是屬於大型的主機(服務上百人以上的主機系統),那麼就需要比較好一點的機器了。不過,目前市面上任何一款個人電腦均可以達到這一個要求囉!

* Linux 的缺點:

反正 Linux 好處說不完啦!不過雖然 Linux 具有這樣多的好處,但是他先天上有一個足以致命的地方,使他的普及率受到很大的限制,就是 Linux 需要使用 『指令列』 的終端機模式進行系統的管理!雖然近年來有很多的圖形介面開發使用在 Linux 上面,但畢竟要熟悉 Linux 還是以指令列來使用是比較好的,因此要接受 Linux的玩家必須比較要能熟悉對電腦下指令的行為,而不是用滑鼠點一點 icon 就行了!不過如果只是要架一些簡單的小站呢?是不是大家都可以做的到?沒錯!其實只要對 Linux 做一些小小的設定就可以架站了!

o 沒有特定的支援廠商:因為所有的套件都是免費的,自然也就沒有專人會到府服務啦!不過,這點倒是不需要擔心,因為拜網路風行之賜,你要問的問題幾乎在網路上都可以找到答案喔!看你有沒有用心去找就是了!

o 圖形介面作的還不夠好:其實是因為 VBird 不玩 X-window 啦,所以也不知道目前發展到怎樣的一個地步了!基本上 VBird 常說的一句話就是:『Windows 上面有的咚咚 Linux 上面也一定可以找的到!,但 Linux 有的服務 Windows 可不見得有喔!』只不過,您可得自己找到自己想要的介面囉!



檔案系統 Linux 支援非常多檔案系統格式,包含 DOS 的 FAT 等數十種不同的檔案系統,但是對應用程式而言,看到卻是統一的介面,不論它讀寫的是 DOS 的 FAT 或是 ext2fs,讀寫都是呼叫相同的函式,它甚至不知道正在讀寫的是那一種檔案系統。

這主要歸功於 Linux 的檔案系統分成上下兩個部份,上面的稱為虛擬檔案系統(virtual file system),它提供給應用程式一個統一的介面,這個介面是個樹狀結構,從根目錄/開始,所有的檔案都包含在它層層的子目錄下,這些檔案不只包含一般存放在硬碟裡的正常檔案,還有一些特別的檔案,例如在 /dev/ 下的檔案不是正常檔案,而是用來和驅動程式溝通的虛擬檔案,你在 /dev/mouse 這個檔案中寫入 1,這個 1 不會進到硬碟裡,而是傳給 mouse 的驅動程式。在目錄 /proc/ 下的也全是虛擬檔案,目的是用來和作業系統核心溝通。把驅動程式模擬成一般的正常檔案是 Unix 的特色,事實上讀寫 modem 和讀寫檔案在較高層次上來說也很類似,而且這種統一的作法使作業系統看起來更一致,容易管理。

如上所述,虛擬檔案系統包含一般放在硬碟或光碟之類儲存媒體裡的正常檔案,網路上別部機器提供的網路檔案系統,如 NFS,代表驅動程式的特殊檔案 /dev/*,及其它一些特殊用途的檔案,如 /proc/*。這些全放在根目錄下的目錄結構裡,由虛擬檔案系統控制,大家可以猜的出來,虛擬檔案系統的核心只是個切換器 (switch),當我們要讀某個檔案時,例如讀 /dev/mouse,虛擬檔案系統會先解析路徑 /dev/mouse,當它找到 mouse 這個項目時,它知道它是周邊裝置的特殊檔案,就把這個讀的命令丟給相對應的驅動程式。

Linux 檔案系統的上層是虛擬檔案系統,下層便是個別檔案系統的實作,每個檔案系統都提供給虛擬檔案系統一個固定的資料結構,資料結構包括這個檔案系統的參數,如一個 sector 有幾個 bytes,另外還包含一組標準呼叫函式,如 read 和 write。當虛擬檔案系統收到一個 read 命令時,它先找出對應的檔案系統,再呼叫這個檔案系統提供的 read 函式,把相關的參數傳過去。

檔案系統可以隨時掛上或卸載,前提是核心支援這個系統,當作業系統啟動時會先掛上根檔案系統 (root),通常的 ext2fs 格式,之後會再掛上 /etc/fstab 中指定的其系統。

推薦此文