Linux 基礎學習篇 - 其他老舊文件

Linux 基礎

雖然這裡不需要妳學習 Linux 指令,不過一些基礎的概念還是要懂得

最近更新時間: 2007/07/03

雖然鳥哥希望您可以不必學習 Linux 指令就能夠使用 Linux 桌面,但是一些基本的 Linux 架構我們還是得知道, 否則很難開始!尤其是安裝 Linux 時,會出人命!其實安裝 Windows 也是一樣的, 妳必須要知道什麼是分割、格式化等等。這一章的內容很少,算是一個基礎知識的介紹, 即使妳再怎麼不高興,還是希望您可以靜下心來瞧一瞧這一章的內容!拜託拜託! 另外,這一章的內容您也可以在未來隨時回來查閱喔!尤其是後面章節部分若有不懂的, 回來這裡查一查,應該可以獲得一些新的想法呢! ^_^

電腦概論

在目前的社會中,沒有電腦真的是很奇怪的一件事情!因為我們必須要使用電腦幫我們進行很多工作。 包括在辦公室中使用電腦來進行各項作業、在資訊領域方面利用電腦來進行伺服器的架設、 在休閒時利用電腦來上網瀏覽或聊天、在無聊時利用電腦來進行電腦遊戲軟體的運作等等。

但是妳知道目前電腦規格有哪些?為什麼我們使用的電腦通常被稱為『個人電腦』而不是啥特別的名詞? 為什麼電腦一定需要軟體才能夠使用?為什麼我的遊戲無法在早期的 Windows 98 上面運作? 這個我們都得要瞭解一下比較好。

電腦的功能

什麼是電腦呢?基本上,一部機器只要能夠『接受指令的輸入,經過邏輯判斷或者是算數運算後, 能夠將產生的資訊輸出到螢幕或印表機等介面上的機器』我們就可以稱他為電腦了。 所以個人電腦、小型計算器、大型伺服器等等,都可以稱為電腦的。 那麼換句話說,我們透過鍵盤或滑鼠輸入指令,讓電腦主機進行運算後,將我們所需要的資料輸出到螢幕上! 這就是電腦的運作過程。

電腦組成示意圖
圖一、電腦組成示意圖

為了要將上圖中的『邏輯判斷、算數運算』所在處的主機設計出來,這部主機還得要負責連結輸入設備以及輸出設備, 並且還要能夠執行算數處理以及邏輯方面的判斷,因此主機就得要有幾個組成的部分了,這包括: 中央處理器、主記憶體、系統匯流排(可以想成主機板上面的晶片組),以及各種輸入輸出元件 (I/O 裝置)。不過,關鍵元素在於中央處理器,也就是俗稱的 CPU 啦!

為什麼說 CPU 最重要呢?就跟我們生活的時候任何事情都要透過腦袋來思考後才能產生行動一樣, 事實上 CPU 裡面也是含有多個指令集,這些指令集可以想成腦袋的思考方式。 而為了配合這個 CPU ,所有在主機上所設計出來的硬體當然也要符合相關的規範才可以!

就如古話說的:『戲法人人會變,巧妙各有不同』一樣,既然電腦主要的功能就是在接受訊號的輸入, 經過一些程序後將他轉變為適當的資訊並且輸出而已,那麼當不同的硬體開發商在進行研究時,當然可能產生不同的硬體規格啦! 但由於市場機制以及相關產品開發商的支援,現今電腦硬體的架構依 CPU 的類別主要區分為兩大類,分別如下所述:
  • Complex Instruction Set Computer (CISC):複雜指令系統計算器
    CPU 內的指令集較為複雜,所以需要透過一個額外的解譯器來進行指令的解析。 目前最常見的就是個人電腦的 x86 與 x86-64 (64位元) 架構啦! 這種架構是目前最常見的電腦架構啦!

  • Reduced Instruction Set Computer (RISC):精簡指令系統計算器
    由於 CISC 指令架構較為複雜,為了簡化指令集以加速程式的運作,所以就有 RISC 架構的產生。 這種架構較為先進,常用於大型伺服器等級的硬體規格中。 目前使用這種架構 CPU 產品包括有:Sony 的 Play Station (PS)、IBM Power 架構的 Xbox 360, 早期蘋果公司的 Macintosh、 昇陽(Sun)電腦的 SPARC 架構等等。(註:Sony, IBM, 蘋果公司以及昇陽都是企業的公司名稱)
Tips 鳥哥 Sony 的遊戲機 (Play Station) 使用的 CPU 名稱為 Cell;XBox 是微軟的遊戲機,這個遊戲機裡面使用的 CPU 則是 IBM 發展的名為 Power 的 CPU,這款 CPU 也用在早期的蘋果公司的電腦中;SPARC 則是昇陽公司自產的 CPU 型號。 這幾款 CPU 使用的架構都是屬於 RISC 的架構喔!
如果對於 CPU 架構有興趣的話,文末的參考資料可以閱讀一番。

雖然 RISC 的架構較為先進,不過由於個人電腦的普及性,以及拜 Intel 與 AMD 這兩家主要 x86 CPU 製造公司開發出更精良且高速的 x86 CPU 之賜,目前您可以使用相對便宜很多的金額就買到效能很棒的 x86 個人電腦了。不但個人電腦是 x86 架構,現在就連很多伺服器以及企業關鍵應用的主機也都使用 x86 的架構。 因此底下我們將以 x86 架構來說明電腦硬體喔!(註:Intel 及 AMD 是兩家製造個人電腦 CPU 的公司名稱)

Tips 鳥哥 寫這一段話的意義是,希望讀者能知道 CPU 的架構是很多樣的! 製作 CPU 的公司並不是只有 Intel 或 AMD 而已。此外,很多的電腦、遊戲機都是使用 CPU 的架構, 所以,瞭解到個人電腦的基本架構,有助於您瞭解其他設備的主要組成呢! ^_^

個人電腦所需硬體

如同上一小節所說的,電腦主機主要包括了 CPU、記憶體、系統匯流排以及各項 I/O 裝置。 那麼這些硬體主要的功能是什麼呢?我們就以人體來說明好了。
  • CPU:
    就像是腦袋瓜子,主要負責邏輯思考與算數運算。不過要注意的是,腦袋瓜子總得要接受外來的刺激才會思考! 所以囉,我們也要給予 CPU 適當的指令後,他才會開始動作。這也是我們需要撰寫程式的原因。

  • 主記憶體:
    就像我們的記憶力一樣!當記憶能力越高,可以容納的外界刺激與儲存過去記憶的能力就越好! 所以當有人問到我們過去的記憶時,不需要拿照片而在腦海裡面就立刻有影像出來啦!所以說, 電腦主機的主記憶體通常是越大越好! ^_^

  • 輸入/輸出 (I/O) 裝置:
    電腦主機的輸入/輸出裝置有非常的多,常見的例如硬碟、光碟、印表機、網路設備、視訊設備等等都算。 以人體來說,妳可以將硬碟想像成為一本筆記,妳可以在裡面寫感想(寫入硬碟)或者是讀讀裡面文字(讀取硬碟), 如果覺得某些文字不滿意,還可以使用修正液將他塗掉(刪除資料)。

  • 系統匯流排:
    系統匯流排是連接各項裝置的介面,妳可以將主機板看成是系統匯流排啦! 主機板是很重要的,因為他將上述的各項元件給他整合在一起,所以沒有主機板, 其他的元件就沒有作用了。妳可以將系統匯流排想成是人體的神經系統, 神經系統可以連線身體的各個部位以達到讓人體活動的實際目標!
各項裝置的結合可以下圖來示意一下:

各元件的組成情況
圖二、各元件的組成情況
(上述圖示主要取自 tom's 硬體指南,各元件圖片分屬個別公司所有)

就像雖然每個人都有腦袋、神經系統、記憶力與各項外在書籍,但是每個人的腦袋、神經系統傳導的能力以及記憶力都不同一樣, 由於製造商發展的能力不一樣,所造出來的各項電腦元件能力也不相同。 所以您在選購 CPU、主機板、記憶體以及各項 I/O 裝置時,務必詢問專業人士, 否則有可能買到無法使用在您主機上面的硬體喔!

舉例來說,鳥哥之前的工作主機使用 AMD 公司出產的 Atlhon XP 1800+ CPU,搭配華碩公司的主機板。 為了比較快速的儲存系統,所以鳥哥跑去買了一顆 SATA 介面的硬碟, 但是,買回來後才發現俺的主機板上面只有較早期的 IDE 硬碟介面,啊! 還要去買一塊 SATA 擴充卡來安裝~唉~失敗!
Tips 鳥哥 什麼?看不懂啥是 IDE, SATA 以及 Athlon XP 嗎?沒關係!這些是電腦硬體相關的術語, 妳只要知道 AMD 是一家製造 CPU 的公司,他們公司有出產一款 CPU ,而 AthlonXP 就是該款 CPU 的代號即可。 關於硬碟還有更多要介紹的,底下會說明!

程式運作流程

鳥哥常常在開玩笑的問朋友說:『沒有插電的電腦是一堆廢鐵, 那麼插了電的電腦是什麼?』您猜是什麼呢?答案是...『一堆會電人的廢鐵!!』^_^!為什麼呢? 因為上頭沒有程式嘛!所以說,電腦硬體上面必須要配合程式軟體才能夠順利的完成各項動作。 那麼電腦是如何執行各項軟體功能的呢?

假設有個人體身份是學生,他最近的工作是要去考試,為了應付考試他應該要如何動作?
  1. 透過神經傳導,拿起課本,並從書本上面讀取會考的資訊,且記憶下來;
  2. 進入考場準備考試,看到試卷後根據記憶將答案寫下;
  3. 考完後交卷並離開考場。
那麼如果是電腦程式呢?整個電腦主機各項元件是如何運作?
  1. CPU 接受指令後,準備讀取資料,主要藉由匯流排將硬碟的資料讀入主記憶體當中;
  2. CPU 開始處理程式碼,CPU 讀取的程式碼與資料都是由主記憶體當中取得;
  3. 持續進行該項任務,直到任務完成為止。
上述的第一、二步驟如下圖三的示意:

程式的運作流程
圖三、程式的運作流程
(上述圖示主要取自 tom's 硬體指南,各元件圖片分屬個別公司所有)

圖三給我們幾個很重要的概念,那就是:
  • CPU 必須要接受程式碼之後才會開始進行運作;
  • 一般來說,目前的程式碼與資料都是放置在硬碟、光碟等儲存媒體當中的;
  • 不管是程式碼還是資料,最終都必須要被讀到主記憶體當中後,CPU 才能使用;
  • 任何資料的傳送幾乎都是透過主機板上的匯流排。
這是簡單的程式運作概念,對於妳未來要升級硬體,或者是檢查有無軟體錯誤時, 這個概念挺重要喔! ^_^。舉例來說,考慮到上述的第四點,匯流排是很重要的! 而匯流排可以容納的資料傳輸速度(頻寬)是有限的,所以當妳在進行燒錄 DVD 的時候, 系統的整體效能會變慢,現在知道為什麼了吧?因為燒錄時匯流排被硬碟與 DVD 燒錄機之間傳輸的資料量給佔滿了! 所以其他程式要執行時,圖三的 (1) 速度就慢了! ^_^

Tips 鳥哥 為什麼很多硬體迷在購買整部主機的時候,首先考慮的是主機板晶片組與CPU及主記憶體的頻寬? 因為在資料傳輸量很大的時候,這玩意兒影響可是很大的!

程式怎麼來?

現在我們知道了,CPU 內其實含有很多的指令集,而 CPU 需要由主記憶體中讀取所需要的程式碼與資料才能處理工作, 當然啦,這些程式碼必須要能夠使用 CPU 內的指令集來執行算數、邏輯等動作才行。那麼程式碼怎麼來? 其實程式的撰寫最直接的就是參考 CPU 的指令集,然後利用 CPU 認識的機器碼直接撰寫程式, 這樣程式就可以直接運作了。

但是這樣的動作很麻煩,因為機器碼是機器認識的語言,人類不容易瞭解!加上參考 CPU 指令集也是個苦差事, 因此這種撰寫程式碼的行為除非是用在一些很小的嵌入式設備中,一般個人電腦很少使用這種模式來開發應用程式的。 取而代之的是一個作業程式來處理硬體問題。

直接針對硬體來撰寫應用程式是沒有效率的,因為每支程式都必須從頭撰寫,機器碼也不容易瞭解。 所以就有些公司或社群發展出所謂的『作業系統』。作業系統是利用一組特殊的程式管理整個硬體資源, 同時作業系統還會提供一整組的標準開發介面,讓程式設計師在撰寫應用程式時,不需要考慮硬體, 僅需參考作業系統所提供的開發介面來撰寫程式即可。此時程式可使用作業系統推出的高階程式語言, 包括 C, .NET, Fortran, Java 等等。

我們可以將硬體、作業系統、開發介面與工具、應用程式、使用者作一個簡單的相依圖示如下:

作業系統的示意圖
圖四、作業系統的示意圖

上面的圖示提供我們幾個簡單的小概念:
  • 作業系統直接參考硬體規格寫成,所以同一個作業系統程式不能夠在不一樣的硬體架構下運作。 舉例來說,個人電腦版的 Windows XP 不能直接在 RISC 架構的電腦下運作。 所以您知道為何 Windows XP 又分為 32 位元及 64 位元的版本了吧? 因為 32/64 位元的 CPU 指令集不太相同,所以當然要設計不同的作業系統版本了。

  • 作業系統只是在管理整個硬體資源,包括 CPU、記憶體、輸入輸出裝置及檔案系統檔。 如果沒有其他的應用程式輔助,作業系統只能讓電腦主機準備妥當(Ready)而已!並無法運作其他功能。 所以妳現在知道為何 Windows XP 上面要達成網頁影像的運作還需要類似 PhotoImpact 或 Photoshop 之類的軟體安裝了吧?

  • 應用程式的開發都是參考作業系統提供的開發介面, 所以該應用程式只能在該作業系統上面運作而已,不可以在其他作業系統上面運作的。 現在您知道為何去購買線上遊戲的光碟時,光碟上面會明明白白的寫著該軟體適合用於哪一種作業系統上了吧? 也該知道某些遊戲為何不能夠在 Linux 上面安裝了吧?
目前最常見的作業系統主要有 Windows, Linux, Mac X, Unix 等, 在這些作業系統上面所開發出來的程式基本上是不能夠互通的!因為他的開發介面並不相同之故。 這也是為什麼當妳去網路嘗試下載某些程式的時候,這個程式會有好多版本! 因為程式必須要針對不同的作業系統去撰寫才行喔!

我們拿常見的微軟公司的產品來說明。妳知道 Windows XP, Office 2007 之間的關係了嗎?
  • Windows XP 是一套作業系統,他必須先安裝到個人電腦上面,否則電腦無法開機運作;
  • Windows 98 與 Windows XP 是兩套不同的作業系統,所以能在 Win 98 上安裝的軟體不見得可在 WinXP 上安裝;
  • Windows XP 安裝好後,就只能擁有很少的功能,並沒有辦公室軟體;
  • Office 2007 是一套應用程式,要安裝前必須要瞭解他能在哪些作業系統上面運作。

硬體與驅動程式

瞭解了硬體與作業系統的相關概念後,現在我們知道作業系統主要在管理整個電腦主機的硬體資源, 為了要管理這些硬體支援,我們的作業系統當然就得要『驅動整部主機上面的所有硬體』了! 一開始時,作業系統的設計者會將當時主流的電腦硬體作個整理,取得硬體開發商所提供的驅動程式, 並主動加入到作業系統當中,以讓這個系統可以開機並順利的認識硬體。

不過硬體可是持續在進步當中的!包括主機板、顯示卡、硬碟等等。那麼比較晚推出的較新的硬體, 例如顯示卡,我們的作業系統當然就不認識囉!那作業系統該如何驅動這塊新的顯示卡? 為了克服這個問題,作業系統通常會提供一個開發介面給硬體開發商, 讓他們可以根據這個介面設計可以驅動他們硬體的『驅動程式』,如此一來,只要使用者安裝驅動程式後, 自然就可以在他們的作業系統上面驅動這塊顯示卡了。

驅動程式與作業系統
圖五、驅動程式與作業系統
(上述圖示主要取自 tom's 硬體指南,各元件圖片分屬個別公司所有)

由上圖五我們可以得到幾個小重點:
  • 作業系統必須要能夠驅動硬體,如此應用程式才能夠使用該硬體功能;
  • 一般來說,作業系統會提供開發介面,讓開發商製作他們的驅動程式;
  • 要使用新硬體功能,必須要安裝廠商提供的驅動程式才行;
  • 驅動程式是由廠商提供的,與作業系統開發者無關。
所以,如果妳想要在某個作業系統上面安裝一張新的顯示卡,那麼請要求該硬體廠商提供適當的驅動程式吧! ^_^! 為什麼要強調『適當的驅動程式』呢?因為驅動程式仍然是依據作業系統而開發的, 所以,給 Windows 用的驅動程式當然不能使用於 Linux 的環境下了。

重要工具:硬碟

前一小節我們談到硬體與程式運作的關係,也談到程式主要是放置到一些儲存媒體上的, 現在的主機設備當中,儲存媒體最重要的一項就是『硬碟』這個玩意兒啦! 當妳的主機想要有作業系統時,首先就得要將作業系統『安裝』到妳的硬碟當中! 所以您說,硬碟是否很重要啊!

硬碟的連接介面:IDE, SATA

硬碟的介面規格近年來有重大突破,那就是由傳統的 IDE 介面轉換到新的 SATA 介面。 (我們這裡主要針對個人電腦,所以較高階的 SCSI 介面不在討論之列。) 那麼什麼是 IDE 什麼是 SATA 介面呢?簡單的說,就是硬碟與主機板連結在一起的那個插槽不一樣啦! 我們以實際的硬碟來作說明,請看下圖的兩款硬碟連接腳位:

兩款硬碟介面
圖六、兩款硬碟介面(左邊為 IDE 介面,右邊為 SATA 介面)

早期 IDE 硬碟的排線 (連接硬碟與主機板) 較寬,容易影響到機殼內的熱對流,所以散熱不易。 如下圖所示,這一條排線上面有三個插槽,一邊接主機板,另外兩個則接在硬碟 (或稱為 IDE 裝置) 上。

IDE 介面的排線
圖七、IDE 介面的排線 (圖示取自 Seagate 網站)

一般來說,早期主機板上面的 IDE 插槽有兩個,而每條排線上又可以有兩個 IDE 裝置,所以最多可以接到四個 IDE 裝置。 如果妳需要一個光碟機,那麼最多妳的主機就可以接三顆硬碟的意思。不過妳應該要想到的是:『既然排線可以接兩個硬碟, 那麼哪一顆硬碟會先被主機捉到?』這個時候得要進行跳針 (Jump) 的設定才行喔!如圖六所示, IDE 排線右邊的那個插槽就是在設定跳針的地方!妳可以設定成主要(master)或次要(slave)的形式。 要注意,一條排線上面不可以同時為 master 或 slave ,否則主機會捉不到兩顆硬碟!在同一條排線上, 一定要一顆為 master 一顆為 slave 才行

由於 IDE 介面的發展已經到了極限,而且排線又容易造成通風不良,所以後來出現了一種新的介面,那就是 SATA 介面啦! 從圖六妳已經可以發現到 SATA 的排線接口非常的小,而且 SATA 的速度要比 IDE 快的多! 所以 SATA 已經成為目前硬碟機介面的主流囉! SATA 的排線示意圖如下圖所示:

SATA 介面的排線
圖八、SATA 介面的排線 (圖示取自 Seagate 網站)

SATA 的排線直接連結硬碟與主機板,一條排線僅接一顆硬碟,所以妳不需要調整跳針。 不過一張主機板上面 SATA 插槽的數量並不是固定的,且每個插槽都有編號,在連接 SATA 硬碟與主機板的時候, 還是需要留意一下。

硬碟的組成

在開始談實際使用硬碟之前,我們還得要知道一下硬碟的組成比較好。實際上,硬碟就是由硬碟盤與讀取頭所組成的。 硬碟盤是圓形的,資料就是透過磁頭寫入到硬碟盤上面。資料能夠被寫入到硬碟盤的最小單位是磁區 (sector), 目前 x86 硬碟的磁區一個為 512 bytes 這麼大。而磁區聚合成為一個同心圓時,那就是磁柱 (cylinder)。 如果以圖示來看,他有點像這樣:

硬碟盤組成示意圖
圖九、硬碟盤組成示意圖

我這裡假設硬碟裡面僅有一個硬碟盤的狀況。所以硬碟最重要的組成就是:磁區、磁柱、磁頭 (sector, cylinder, head),其中磁區一個有 512bytes 大,而磁柱為分割時的最小單位。

那麼是否每個磁區都一樣重要呢?其實整顆硬碟的第一個磁區特別的重要,因為他記錄了整顆硬碟的重要資訊! 第一個磁區主要記錄了兩個重要的資訊,分別是:
  • 主要開機記錄區(Master Boot Record, MBR):可以安裝開機管理程式的地方,有 446 bytes
  • 分割表 (partition table):記錄整顆硬碟分割的狀態,有 64bytes
MBR 是很重要的,因為當系統在開機的時候,會主動去讀取這個區塊的內容, 這樣系統才會知道你的程式放在哪裡且該如何進行開機。如果妳要安裝多重開機的系統, MBR 這個區塊的管理就非常非常的重要了! ^_^

那麼分割表又是啥?其實妳剛剛拿到的整顆硬碟就像一根原木,妳必須要在這根原木上面切割出妳想要的區段, 這個區段才能夠再製作成為你想要的家具!如果沒有進行切割,那麼原木就不能被有效的使用。 同樣的道理,妳必須要針對妳的硬碟進行分割,這樣硬碟才可以被妳使用的!

磁碟分割表

但是硬碟總不能真的拿鋸子來切切割割吧?那硬碟還真的是會壞掉去!那怎辦? 就利用參考對照磁柱號碼的方式來處理啦!在分割表所在的 64bytes 容量中,總共分為四組記錄區, 每組記錄區記錄了該區段的啟始與結束的磁柱號碼。若將硬碟以長條形來看,然後將磁柱以直條圖來看, 那麼那 64 bytes 的記錄區段有點像底下的圖示:

硬碟分割表的作用示意圖
圖十、硬碟分割表的作用示意圖

由上圖來看,我們可以知道幾個小重點:
  • 其實所謂的『分割』只是針對那個 64bytes 的分割表進行設定而已!
  • 硬碟預設的分割表僅能寫入四組分割資訊
  • 這四組分割資訊我們稱為主要(primary)分割區
  • 分割區的最小單位為磁柱(cylinder)
  • 當系統要寫入磁碟時,一定會參考磁碟分割表,才能針對某個分割區進行資料的處理
那麼為何需要進行分割呢?因為每個分割區的資料是分開的 !所以,當妳需要將某個分割區的資料重整時, 例如妳要將妳電腦中 Windows 的 C 槽重新安裝一次 Windows 時,妳可以將其他重要資料移動到其他分割區, 例如將郵件、桌面資料移動到 D 槽去,那麼 C 槽重灌系統並不會影響到 D 槽! 所以善用分割區,可以讓妳的資料更安全。

另外,由於分割區將資料集中在某個磁柱的區段,例如圖十當中第一個分割槽位於磁柱號碼 1~100 號, 如此一來當有資料要讀取自該分割槽時,磁碟只會搜尋前面 1~100 的磁柱範圍, 由於資料集中了,將有助於資料讀取的速度與效能!所以說,分割是很重要的!

既然分割表只有記錄四組資料的空間,那麼是否代表我一顆硬碟最多只能分割出四個分割槽? 當然不是啦!有經驗的朋友都知道,妳可以將一顆硬碟分割成十個以上的分割槽的! 那又是如何達到的呢?在 Windows/Linux 系統中,我們是透過一個稱為延伸分割 (Extended partition) 的方式來處理的。 既然第一個磁區所在的分割表只能記錄四筆資料,那我可否利用額外的磁區來記錄更多的分割資訊? 那就是延伸分割的想法。實際上圖示有點像底下這樣:

硬碟分割表的作用示意圖
圖十一、硬碟分割表的作用示意圖

在圖十一當中,我們知道硬碟的四個分割記錄區僅使用到兩個,P1 為主要分割,而 P2 則為延伸分割。 請注意,延伸分割不能夠被用來作為資料存取的! 然後我們可以透過延伸分割所指向的那個區塊繼續作分割的記錄,如圖十一右下方那個區塊, 繼續分割出五個分割槽,這五個由延伸分割繼續切出來的分割槽,就被稱為邏輯分割區 (logical partition)。同時注意一下,由於邏輯分割區是由延伸分割繼續分割出來的, 所以他可以使用的磁柱範圍就是延伸分割所設定的範圍喔!也就是圖中的 101~400 啦!

主要分割、延伸分割與邏輯分割的特性我們作個簡單的定義囉:
  • 主要分割與延伸分割最多可以有四筆 (硬碟的限制)
  • 延伸分割最多只能有一個 (作業系統的限制)
  • 邏輯分割是由延伸分割持續切割出來的分割槽;
  • 能夠被格式化後,作為資料存取的分割槽為主要分割與邏輯分割。延伸分割無法格式化;
  • 邏輯分割的數量依作業系統而不同,在 Linux 系統中, IDE 的硬碟最多有 59 個邏輯分割, SATA 硬碟則有 11 個邏輯分割。
事實上,分割是個很麻煩的東西,因為他是以磁柱為單位的『連續』磁碟空間, 而且延伸分割又是個類似獨立的空間,所以在分割的時候得要特別注意。舉個例子來說,在 Windows 的分割當中, 通常他們喜歡自訂成一個主要分割作為系統槽,其他的容量全部作為延伸分割, 然後再讓延伸分割繼續分成邏輯分割。好,那假設妳的 D 與 E 槽各有 30GB ,妳想將這兩槽整合成一槽, 底下這兩種情況到底可否整合?

磁碟空間整合示意圖
圖十二、磁碟空間整合示意圖

在圖十二當中,上圖的 D, E 因為同屬於延伸分割內的邏輯分割槽,因此妳只要: (1)將這兩個分割槽刪除,然後 (2)再重新建立一個新的分割槽,就能在不影響其他分割槽的情況下, 將兩個分割槽的空間組合成為一個。但如果是圖十二的下圖,由於 D, E 槽分屬主分割與邏輯分割, 所以兩者不能夠整合在一起,除非妳將延伸分割破壞後再重新分割。不過,這樣會影響到所有的邏輯分割! 要注意,如果延伸分割被破壞,所有邏輯分割將會被刪除!

在硬碟分割完畢後,這顆硬碟就可以準備被格式化使用了!不管你想要玩的是 Windows 還是 Linux , 硬碟的分割概念是相當重要的!別忽略這部份的知識呢!

主要開機記錄區(MBR)

不知道你會不會覺得很奇怪,為啥電腦可以開機?為啥電腦知道我的開機軟體放在 C 槽? 這是因為有硬碟的 MBR 的關係!每次電腦打開電源後,電腦根據 BIOS 的設定決定哪一個裝置為主要的開機裝置。 假如你以硬碟作為開機裝置時,那麼電腦就會主動的去讀取該顆硬碟的 MBR , 並根據 MBR 裡面的設定知道開機程式在哪裡,所以說, MBR 是很重要的呢!

如前面說的,MBR 是硬碟第一個磁區內佔有 446 bytes 容量的區塊,這個區塊可以安裝開機管理程式, 在一些作業系統上面我們稱這種程式為開機載入器 (boot loader),底下我們直接稱呼為 loader 好了。 loader 主要的任務有三個,分別是:
  • 提供選單給使用者選擇開機程式,這也是多重開機的重要功能!
  • 直接指向可開機的程式區段
  • 將選單功能轉交給其他 loader 負責。
其實可以安裝 loader 的地方有兩個,一個是 MBR ,另一個是每個分割槽的超級區塊(super block)。 每個分割槽都會留一個區塊來記錄該分割槽的相關資訊,如果我們依舊以長條圖來看,超級區塊, MBR 與實際的開機程式他們的相對位置是這樣的:

開機載入器
圖十三、開機載入器示意圖

圖十三可以這樣看:
  • 每個分割槽都擁有超級區塊 (super block)
  • 圖中的系統槽為第一及第二分割槽,
  • 實際可開機的程式是放置到分割槽內的!
  • loader 只會認識自己的系統槽內的開機程式,以及其他 loader 而已;
  • loader 可直接指向或者是間接將管理權轉交給另一個管理程式。
所以在圖十三中,鳥哥假設 MBR 的 loader 認識 Windows 的開機程式, 因此他可以直接指向開機程式 (M1的那個選單),但他不認識 Linux 的開機程式, 因此我們使用 M2 選單,將控制權移交給 Linux 所在的系統槽的超級區塊, 該超級區塊內也有 loader ,那個 loader 會認識 Linux 開機程式, 因此就能夠順利的以 Linux 開機了!

那現在請您想一想,為什麼人家常常說:『如果要安裝多重開機,最好先安裝 Windows 再安裝 Linux 』呢? 這是因為 Linux 在安裝的時候,妳可以選擇將開機管理程式安裝在 MBR 或超級區塊, 而且 Linux 的 loader 可以手動設定選單 (就是圖十三的 M1, M2...);至於 Windows 在安裝的時候, 則會自己覆蓋掉 MBR 以及超級區塊,而且他沒有讓我們自己選擇選單的機會,因此, 如果先安裝 Linux 再安裝 Windows 的話,那妳就得要自行以類似 spfdisk 之類的軟體重新處理 MBR , 否則就進不了 Linux 系統了 (雖然可以透過其他方法來處理 MBR )。

Windows 的 loader 不認識 Linux 的系統槽,而 Linux 的 loader 對於一般使用者來說, 似乎不是那麼具有親和力,那是否有其他的 loader 可以安裝在 MBR 裡面管理多重開機啊? 沒錯!是有的!那就是台灣之光馮緒平先生撰寫的 SPecialFDisk (簡稱 spfdisk) 這套軟體! 這套軟體詳細資訊請參考底下的連結,這軟體不但可以進行磁碟分割的動作以及安裝 loader , 更厲害的是,他是全中文介面!高興了吧! ^_^
我們會在後面的章節以一個實際案例來介紹 spfdisk 的使用喔!

Linux 作業系統概念

啥是 Linux ?這東西有啥好玩的?這個咚咚的製作概念如何?這個咚咚有沒有版權? 這東西的應用度廣嗎?這都是我們要來留意的啊!不然為何妳想要玩 Linux 呢? ^_^

Linux 是啥東西?

既然要玩 Linux 就得先知道 Linux 是啥才對。其實 Linux 就是一個『作業系統』! 我們前面談到作業系統主要的功能就是驅動與管理所有的硬體資源,並提供相關的開發介面給程式設計師參考與開發應用程式。 所以 Linux 是一組程式,這一組程式可以管理與驅動電腦,同時還可以提供很多好用的開發介面就是了。

如果要更詳細的定義,那我們可以說,整個作業系統最重要的核心 (kernel) 就是 Linux , 這個 Linux 的核心原始碼可以在 http://www.kernel.org 這個網站找到,而且當妳將他安裝在妳的電腦上時,整個程式碼甚至可以小到數百 Kbytes , 這麼小的程式就能夠驅動與管理所有的硬體,所以很多家電、手機等嵌入式設備很喜歡使用 Linux 哩!

最早 Linux 是在 1991 年由芬蘭人托瓦茲 (Linus Torvalds) 所開發出來的,他本著『人人為我、我為人人』的態度將 Linux 釋出到網際網路社會中,由於他所撰寫的程式碼相當的優秀,所以很多駭客級工程師都很喜歡使用。 而且由於他將程式碼直接釋出到網際網路中,因此很多人都可以修改他的程式碼, 另外有更多人則是貢獻他們自己的程式碼給托瓦茲,以進一步加強 Linux 本身的能力!

妳或許會問:『為什麼大家可以修改托瓦茲的程式碼?他沒有著作權的保護嗎?』 當然不是啦!Linux 是有授權的,妳必須要同意他的授權才能夠使用喔!那 Linux 的授權是啥呢?

Linux 的授權 (自由軟體)

很多人都以為 Linux 是『免費』的,其實不然!應該說 Linux 是『自由的』才對!免費與自由在英文都是 Free , 所以很容易造成大家的誤解。Linux 是有版權的,他的版權使用的是 GNU 計畫的一般通用授權 (General Public License, GPL)。 GNU 是由史托曼 (Richard Stallman) 在 1984 年所發起的一項計畫,目的就是在創作一個完全自由的作業系統。 GNU (http://www.gnu.org) 本身有相當多的軟體提供, 包括 Linux 開發的環境、編譯器等都是使用 GNU 的軟體呢!這也是後來托瓦茲將 Linux 使用 GPL 授權的原因之一。

那麼什麼是 GPL 授權呢?詳細的條文中文版可以參考這裡:
說穿了, GPL 的目的在確保程式著作者的版權權利以及使用者的相關使用規定。當一個軟體掛上了 GPL 的授權後, 針對使用者來說,他具有底下的權利:
  • 軟體本身會釋出原始碼;
  • 使用者可以根據原作者的程式碼學習程式撰寫邏輯;
  • 當使用者同意 GPL 授權後,即可自由的取得、複製、修改與再發行該軟體。
針對程式設計師則有底下的保護:
  • 使用者不可單純的販賣該軟體 (但可販賣服務,如安裝、教使用方式等);
  • 使用者不能隨意修改授權,即該軟體為 GPL 時,使用者不可將該軟體修改成專利軟體授權;
  • 使用者重新修改或者貢獻程式碼後,應該將程式碼再以 GPL 的方式回饋給程式設計者。
也就是說,當妳使用 GPL 授權發佈軟體後,妳必須要同時提供程式原始碼才行。 不過,妳對於該軟體的貢獻將永遠存在,因為其他使用者不可將授權修改,所以妳的貢獻永遠都在! 而且如果該程式的使用者眾多,則妳的程式碼會有無數多人幫妳校閱,所以 GPL 授權的軟體通常在效能、安全性方面都比較好! 漏洞修補速度也快上非常的多!

由於 GPL 授權的軟體在使用上的自由度 (Free) 相當高,所以我們也稱這種授權的軟體為自由軟體 (Free software), 他並不是免費軟體 (freeware) 喔!不要搞混了~ ^_^

Linux 完整安裝套件 (distribution)

Linux 既然這麼好用,當然大家都想要搶著用,尤其是他又是自由的!不過, Linux 早期真的很難入門~ 因為 Linux 原本只有核心程式,也就是 http://www.kernel.org 提供的原始碼而已,想要使用他還得要自己動手編譯,這對於一般使用者來說,實在是莫大的壓力! 很多人為了要推廣這麼好用的東西,於是就將 Linux 核心先進行編譯,並且加入很多軟體 (不一定是自由軟體), 最重要的是將這一整組東西處理成為一份可完整安裝的光碟 (或 DVD)釋出,這就稱為完整安裝套件 (distribution) 了! 所以說, Linux distribution 指的就是:
    Linux distribution = Linux kernel + Free Software + Software + Tools + 可完整安裝流程
我們再來看一張簡圖,如下所示:

作業系統與 distribution 之間的相關性
圖十四、作業系統與 distribution 之間的相關性

如上所示,Linux 核心提供的是中間兩層,這也是 http://www.kernel.org 提供的咚咚。 同時,很多商業公司自行推出他們的 distribution 配合販賣他們的支援服務來進行商業行為, 這對於企業用戶來說,實在是一整套不錯的作業系統哩!而如果妳只是想要試用,那麼很多社群版的 distribution 也可以滿足你喔!目前常見的 Linux distributions 有底下這幾種:
當然還有很多版本啦,上面只是列出一些常見的 distribution 而已。此外還有一些版本則是主打不需要硬碟的環境, 那就是完全由光碟開機的版本,這些版本我們稱為 Live CD (直接以 CD 開機,就能夠進入 Linux 的環境)。 台灣也有 Live CD ,例如底下的連結:
妳可以自由下載該軟體,然後燒錄成為可開機光碟或 DVD 後,即可使用 Linux 的環境哩! 當成搶先試用版的功能也是不錯啦! ^_^!

Linux 核心版本之謎

Linux 的發展者非常的多,且為因應新硬體與軟體的升級,所以造成核心常常增加新功能,也就是說, Linux 核心常常有變動就是了。 為了分辨各個不同版本之間的差異,所以托瓦茲將針對 Linux 核心的釋出給予版本的訂定。一般來說, 核心釋出時的版本定義為:
   2  .  6   .   20
主版本.次版本.釋出次數
就如同前面提到的,因為核心的變動性太大,如果用在一般家用電腦或者是企業關鍵應用的話, 常變動的核心並不適合的,因此托瓦茲將核心發展的趨勢分為兩股,並根據這兩股核心的發展分別給予不同的核心編號, 那就是:
  • 主、次版本為奇數
    如 2.5.xx ,這種核心版本主要用在測試與發展新功能,所以通常這種版本僅有核心開發工程師會使用。 如果有新增的核心程式碼,會加到這種版本當中,等到眾多工程師測試沒問題後,才加入下一版的穩定核心中;

  • 主、次版本為偶數
    如 2.6.xx ,等到核心功能發展成熟後會加到這類的版本中,主要用在一般家用電腦以及企業版本中。 重點在於提供使用者一個相對穩定的 Linux 作業環境平台。
Linux 核心版本與 distribution 的版本並不相同,很多朋友常常上網問到:『我的 Linux 是 9.x 版,請問....』之類的留言, 這是不對的提問方式,因為所謂的 Linux 版本指的應該是核心版本, 而目前最新的核心版本應該是 2.6.21 (2007/06) 才對,並不會有 9.x 的版本出現的。

妳常用的 Linux 系統則應該說明為 distribution 才對!因此,如果以本站所介紹的 CentOS 來說,妳應該說:『我用的 Linux 是 CentOS 這個 distribution, 版本為 5.x 版,請問....』才對喔!

Tips 鳥哥 當妳有任何問題想要在 Linux 論壇發言時,請務必仔細的說明妳的 distribution 版本, 因為雖然各家 distributions 使用的都是 Linux 核心,不過每家 distributions 所選用的軟體以及他們自己發展的工具並不相同, 多少還是有點差異,所以留言時得要先聲明 distribution 的版本才行喔! ^_^

裝置代號

如果妳曾經使用過 Windows 系統的話,會發現妳的檔案總管內有好多的裝置,包括 C 槽、 D 槽、光碟機、 可攜式硬碟機、USB 裝置....一大堆東西。那麼 Linux 有沒有這些東西呢?答案是....沒有這些『代號』了~ Linux 系統內有的只是以『檔名取代裝置名稱』! 舉例來說,第一個 IDE 插槽的 master 硬碟代號為 /dev/hda , 那個 /dev 是個目錄,是裝置 (device) 的縮寫,而 hda 則是 Hard Disk A (hda) 的縮寫囉!若以此類推的話, slave 硬碟就稱為 /dev/hdb 囉~而如果光碟機是放在第二個 IDE 插槽的 master 時,光碟機的代號就是 /dev/hdc 啦!

那麼最近主流的 SATA 硬碟代號是啥?由於 SATA 使用的是 SCSI 模組 (早期的硬碟只有 IDE, SCSI 兩種介面), 所以 SATA 硬碟代號與 SCSI 相同,都稱為 /dev/sda !其實就是 SCSI hard Disk A (sda) 的意思。 而 SATA 硬碟由於不需要調整跳針,他是根據 SATA 插槽的順序來給予代號的。所以第一顆 SATA 硬碟為 /dev/sda, 第二顆為 /dev/sdb 以此類推。

接下來那個 usb 硬碟的代號又是啥?由於 usb 也是使用 SCSI 模組,所以 usb 硬碟也是使用 /dev/sd? 代號。 這樣會不會造成困擾呢?其實不會啦!因為硬碟代號還是會以偵測順序為主,所以通常 SATA 硬碟代號會較前面 (/dev/sda...) 而 usb 硬碟代號則較後面 (/dev/sdc...)

不過,我們在前一小節談過,硬碟總是得經過分割後才能夠被格式化使用,那假設以第一顆 SATA 硬碟來說, 他的分割槽代號為何?很簡單啊,直接在硬碟代號後面加上數字即可。只是要注意的是,由於硬碟的分割表已經保留四個位置, 所以邏輯分割的代號都是由 5 號開始的。我們以底下的兩個案例來說明代號:

磁碟代號的說明
圖十五、磁碟代號的說明

要記得,延伸分割也是一種分割 (雖然他只是在規劃出邏輯分割的磁柱位置而已),所以那個代號不要忘記了。 圖十五上圖很容易瞭解,就是照順序下來即是。但圖十五下圖則可發現代號 /dev/sda3, /dev/sda4 不見了! 因為 partition table 內有四筆記錄啊,這四筆記錄的代號是保留的。因此 parmary 與 extended 代號一定是前面四號, 邏輯分割一定是由五號開始的!這個概念很重要的,因為與 Windows 的 C, D, E... 不一樣! ^_^

反正您要記得的是,Linux 已經沒有所謂的裝置名稱,他有的是檔名而已。而跟系統裝置有關的咚咚, 幾乎都是放在 /dev 那個目錄底下,這點要特別注意喔!

X Window System

一些老玩家都知道,早期的 Win 3.1 是在 DOS 系統上面的一套軟體而已。相同的, X Window System 也不過是 Linux 上面的一套軟體而已,X Window System 並不是作業系統喔!^_^

什麼是 X Window System 呢?早期的作業系統都是文字介面的,就是需要工程師下達指令後系統才會運作, 而沒有圖形介面的功能。但是一些工程界人士,例如地質學家要繪製地表面與高度的相關性, 又例如海洋學家要繪製海溝的分佈情況等等,這些都需要圖形介面的。後來麻省理工學院 (MIT) 開發出圖形使用者介面 (Graphical User Interface, GUI) ,他們認為這是下一代視窗 (window) 介面, 因此就稱為 X (想一想, 26 個英文字母按照順序,W 後面出現的字母是啥? ^_^)。 這就是 X Window System 命名的由來。

那 X Window System 有啥特異功能,為何 Linux 要使用這個咚咚呢?其實 X 系統主要是架構於可利用網路的環境, 利用一個 X server 管理硬體架構,利用 X client 計算繪圖數據,然後再交由 X server 來列印到螢幕上。 X client 可以是一部主機,而 X server 則可以在任何一部主機上,那就構成了網路的 X 連線了。 妳可以參考底下的圖示來看:

X server 與 X client 的溝通示意圖
圖十六、X server 與 X client 的溝通示意圖

上圖有趣的地方在於, X client 可能是多個可以在 X 系統上面運作的程式,而 X server 則是可以在多種不同作業系統上面運作的程式。也就是說,妳可以在不同的作業系統上面安裝 X server , 然後透過網路的功能連結到 X client 去取得繪圖數據,最後在妳的 X server 上面將桌面圖示繪製出來。 這對於『遠端桌面』是很有幫助的!而且一部 X client 可以讓多部 X server 連接,實在是很有趣!

在預設的 Linux distribution 上面,X server/X client 剛好在同一部機器上,所以我們可以讓這個 X window system 順利的在一部 Linux 系統上面運作的!此外,妳會看到圖十六的中間圖示,妳會發現怎麼有個 Window Manager (WM)? 其實 Window Mananger 是個特殊的 X client ,他的功能主要是管理整個 X window system 的。 因為每個 X client 其實彼此之間並不認識對方,所以可能會造成每個 X client 的繪圖圖層彼此重疊, 且無法分辨每個 X client,與無法在不同 X client 之間切換。

為了解決這方面的困擾,並且增加整個 X window system 的資源管理,因此就有這個 WM 的產生了。 目前的 WM 主要有 KDE 以及 GNOME ,當然不止這些東西而且,不過目前是以這兩個計畫為最大, 管理介面以及畫面風格也比較美觀漂亮!以後您要知道的是,不同的 WM 具有不同的操作介面, 而且那也只是在 X server 上面架構出來的一個視窗管理員而已,這個視窗管理員是可變更的!

若硬要在 X window system 的各項元件上分析他的相關性,那妳可以知道的是:
  • Linux 作業系統要先啟動,並且驅動所有的硬體元件;
  • X server 在作業系統上面啟動,並可等待使用者輸入;
  • 載入 Window Manager ,準備好視窗管理機制介面;
  • 可在 WM 上面執行各種 X 的應用軟體。
無論如何,妳只要知道 Linux 上面的桌面其實是由 X window system 的系統來提供的, 而 X 僅只是 Linux 上面的一組程式而已,並非作業系統,所以即使 X 死掉了,沒關係, 只要 Linux 核心活著,應該就有辦法重新啟動 X 的!並不會造成類似『藍色死亡畫面』般的可怕現象...

檔案系統

來到重要的地方啦!對於作業系統來說,檔案系統是非常重要的喔!因為電腦作業系統本來就是要處理一些資料, 讓這些資料變成有意義的東西,那這些資料其實是放置到儲存媒體上面的,那妳要由儲存媒體上面存、取該資料, 就與檔案系統 (file system) 有關啦!底下我們就來談一談這個恐怖的東西。

啥是檔案系統

我們知道一顆硬碟要被使用,第一個重點是需要進行分割 (partition),分割完畢後還需要進行格式化, 那分割槽才能夠被作業系統使用。關於分割我們知道他是硬碟本身所需要的動作,前面談過很多了,所以這裡略過。 妳應該會問的是,那為何需要格式化?格式化的意義是什麼?

讓我們先舉個例子來說,白蟻要如何創造蟻窩?或許是這樣的:
  1. 首先,當然是要有白蟻,包括蟻后以及白蟻工兵 (想成作業系統);
  2. 他們必須要選擇環境,假設就是一塊大木板 (想成整顆硬碟);
  3. 然後選擇這塊木板的某一個區段出來,準備要在這個區段創造蟻窩 (想成磁碟分割);
  4. 根據白蟻的社會,將這一區段的木板挖出適當的房間,當然是有分門別類的啦 (想成就是格式化);
  5. 最後白蟻們就能夠利用這個蟻窩來生活啦!(作業系統運作)。
與格式化有關的重點在第四步驟,白蟻會依據他們所需要的環境來規劃他們的空間,包括育嬰室啦、食物儲藏區啦、 一般白蟻休息區啦等等的,所以妳會發現到整個木板被『格式化』成一格一格的小房間了。 同樣的,磁碟分割槽的格式化也差不多是這個情況,我們會根據作業系統所需要的資料, 將硬碟依據這些準備要存放的資料來創造出儲存的空間,感覺上就好像是一格一格的小房間

此外您也必須要知道,不同的作業系統之間基本上可能不會認識彼此的檔案系統的。舉例來說,蜜蜂應該不知道白蟻的蟻窩結構, 白蟻應該也不知道蜜蜂的蜂窩結構,您說是吧!所以囉,您或許常常會聽到,Windows 的檔案系統可能無法被 Linux 抓到,同樣的, Linux 的檔案系統對於 Windows 來說,他可能也不會知道如何讀取的!^_^

那 Linux 的檔案有哪些重要資料需要儲存呢?大概有兩種:
  • 檔案屬性:Linux 的檔案有很多的屬性,包括是否可讀、可寫、可執行,以及檔案所屬人、所屬群組, 每個檔案所建立、修改過的時間等等,都算是檔案的屬性。

  • 檔案內容:例如文字檔內的文字,資料庫檔案內的資料,這些就是所謂的檔案內容。
為了要存放檔案的這兩種資料,因此 Linux 的檔案系統在格式化的時候,通常得要針對這兩種資料來規範出區塊才行。 Linux 的檔案系統通常需要這幾個東西:
  • inode:inode 的區塊主要在儲存檔案的屬性,每個 inode 有 128bytes 這麼大, 而且其中除了屬性之外,還會記錄該檔案的內容所在的 block 區塊位置。請注意,每個 inode 都是有號碼的;

  • block:就是檔案內容放置的地方,標準的 block 一個約 4Kbytes 這麼大, 同樣的,每個 block 都有號碼喔!這個號碼可以被記錄到 inode 裡頭去, 這樣檔案才會知道他的內容被放置到那個 block 區塊;

  • Super block:超級區塊,這個區塊可以記錄整個檔案系統的重要資料與中介資料。 重要資料包括總共有多少 inode/block,被使用掉的與剩餘的 inode/block 等等。
整個分割槽的格式化結果,造成的檔案系統有如底下所示:

檔案系統示意圖
圖十七、檔案系統示意圖

如圖十七所示,在 inode table 及 block area 當中,其實是被切成好像許多小隔間的樣子,在 inode 裡面記錄檔案的屬性, 在 block 內則是記錄檔案的實際內容。但能不能讀取這個檔案系統,則與驅動程式 (模組) 有關。

常見的 Windows 檔案系統主要有:
  • NTFS
  • FAT
  • MS DOS
常見的 Linux 檔案系統主要有:
  • ext2/ext3
  • reiserfs
  • vfat
基本上, FAT 與 vfat 是一樣的東西,所以在預設的狀態下,同樣的 FAT partition 可以同時被 Windows/Linux 所支援, 這也是為何國家考試中的丙級電腦裝修會考一題實作,是要將某個 partition 做成 FAT 好讓多重開機作業系統可以同時支援之故。 那妳會問, Linux 真的不能讀 NTFS ?而 Windows 真的不能讀 Ext2/ext3 檔案系統嗎?其實是可以啦! 某些團體有推出一些驅動程式 (模組),透過這些模組的幫忙,Linux 可以讀到 NTFS 的檔案系統內容, 而 Windows 可以讀到 Ext2/ext3 的檔案系統說。

啥是 Linux 目錄樹資料架構?

在前一小節我們談到了 inode 與 block 這兩個東西,也知道了檔案的資料其實是(1)屬性與(2)內容兩者, 而我們可以透過 inode 記錄的 block 號碼來取得檔案的屬性與內容資料。所以,其實我們只要知道 inode 號碼就能夠知道一個檔案的完整資料了。可是你有沒有想到一件事, 那就是『我怎麼知道某一個檔案的屬性是記錄在那個 inode 號碼上?』 此時就得要透過目錄樹了 (directory tree)。

如同前面提到的,Linux 已經沒有所謂的裝置名稱了,所以當然也沒有 C, D... 槽。那麼我們的檔案要如何放置? 其實 Linux (或 Unix-Like, 類 Unix 系統) 使用的是目錄樹。最頂層的目錄為根目錄 (/) ,所有的目錄都在這個根目錄之後。 這個目錄樹也是整個檔案的基礎!如果你以檔案總管的想法來思考的話,如同下圖所示:

Windows 檔案總管的目錄示意圖
圖十八、檔案總管的目錄示意圖

在圖十八中方框圈選起來的部分,那就是目錄!而檔案總管中最頂層的目錄稱為『桌面』,那在 Linux 底下則是根目錄。 妳可以使用下圖來稍微瞭解一下目錄樹的概念:

Linux 系統的目錄樹示意圖
圖十九、Linux 系統的目錄樹示意圖

仔細看一下圖十九的內容,第一行有個 bin ,倒數第二行也有個 bin ,那麼相同檔名可以同時存在嗎? 其實這兩個檔案是不同檔名的喔!因為兩者分別是:
  • /bin
  • /usr/bin
看出不同了吧?因為他們如果從根目錄寫起的話,該檔名就會變成獨一無二的了!所以說,最頂層這個根目錄是真的很重要啊! 然後要知道的是,那這個目錄樹是怎麼跟分割槽連結在一起啊?

檔案系統與目錄樹的關係(掛載)

我們知道 Windows 的分割槽是以 C, D... 等的方式來處理的,而這個 C, D... 則是掛在『我的電腦』底下,那 Linux 的目錄樹與分割槽的關係又如何?

目錄樹與分割槽之間的相關性
圖二十、目錄樹與分割槽之間的相關性

如上圖,假設我的硬碟分為兩槽,由於根目錄一定要存在,所以我們可以將根目錄想成是一個『進入點』, 也就是說,所有的根目錄底下的檔案都是來自於 partition 1 的意思。因此,我們只要知道根目錄與 partition 1 之間的 inode 對應,那麼就能夠依序推出所有檔案的 inode 號碼了!因為每個目錄與檔案之間都有相關性嘛! 那如果你想要有第二個 partition 呢?如上圖所示,我將 /home 獨立出來另一個 partition 2 的分割槽, 那 /home 這個目錄又成為一個進入點了,所有在 /home 底下的資料都是放到 partition 2 當中的。

其實判斷某個檔案在那個 partition 底下是很簡單的,透過反向追蹤即可。以上圖二十來說, 當我想要知道 /home/vbird/test 這個檔案在那個 partition 時,由 test --> vbird --> home --> / , 看那個『進入點』先被查到,那就是使用的進入點了。所以 test 使用的是 /home 這個進入點而不是 / 喔!

在 Linux 的專業術語方面,我們將 / 與 partition 1 的關係稱為『掛載 (mount)』, 而根目錄就被稱為『掛載點』了。掛載點一定是目錄,這個不要忘記了。

現在讓我們來想一想,那我的電腦如何讀取光碟呢?這個很重要吧! 在 Windows 裡面使用的是『光碟機』的代號方式處理(假設為 E 槽時),但在 Linux 底下我們依舊使用目錄樹喔! 在預設的情況下, Linux 是將光碟機的資料放置到 /media/cdrom 裡頭去的,照這樣來說, 如果光碟片裡面有個檔案檔名為『我的檔案』時,那麼這個檔案是在哪裡?
  • Windows:桌面\我的電腦\E:\我的檔案
  • Linux: /medai/cdrom/我的檔案
不過以『掛載』來說,如果我將這個光碟片掛載到 /mnt 這個掛載點呢? (假設有 /mnt 這個目錄存在時), 那個檔案最終會在哪裡?如果你能夠說出『在 /mnt/我的檔案』,這表示您已經知道掛載的意義了! 這裡最容易搞混,因為他與 Windows 的分割槽代號完全不一樣!

參考資料

修改歷史:
2007/07/02:真要命!一不小心又寫太多~這樣怎麼符合『家長級』使用模式呢?真糟糕...
2007/07/03:不過,總算是寫完了!大家參考看看吧!

2007/07/xx 以來統計人數

其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計