首頁 > 軟體

比起Windows,怎樣解讀Linux的檔案系統與目錄結構?

2020-06-16 17:18:08

Linux 和Windows的檔案系統有些不同,在學習使用 Linux 之前,若能夠了解這些不同,會有助於後續學習。

本文先對Windows和 Linux 上面檔案系統原理、組織概念進行區分,並給出例子、列舉兩者的優缺點以具體說明,最後較為詳細地介紹了 Linux 系統的目錄結構。

Windows 和 Linux 檔案系統

下面將介紹啟動Windows和 Linux 後,在檔案系統的角度上,它們分別是怎樣看待自己世界的。

存取原理

在Windows系統中, 一切東西都是存放在硬碟上的。啟動系統後,先確定硬碟,再確定硬碟上的分割區以及每個分割區所對應檔案系統,最後是存放在某個分割區特定的檔案系統中的檔案。 也就是說,Windows是通過 “某個硬碟-硬碟上的某個分割區-分割區上的特定檔案系統-特定檔案系統中的檔案” 這樣的順序來存取到一個檔案的。

但是與Windows不同, Linux 系統中的一切都是存放在唯一的 虛擬檔案系統中的,這個 虛擬檔案系統是樹狀的結構以一個根目錄開始。啟動系統後,先有這個 虛擬檔案系統,再識別出各個硬碟, 再把某個硬碟的某個分割區掛載到這個 虛擬檔案系統的某個子樹上(即分割區用某個子目錄來表示),再確定分割區對應的子目錄檔案系統,最後的檔案就存放在這個特定的檔案系統中。 也就是說, Linux 系統是通過 “虛擬檔案系統-硬碟-硬碟上的分割區-分割區上的特定檔案系統-特定檔案系統中的檔案” 這樣的順序來存取一個檔案的。

可能對習慣了使用Windows的使用者來說, Linux 的方式有些不適應,它的 虛擬檔案系統,實質就是一顆目錄樹,最開始的目錄叫做根目錄,根目錄中又有每一級子目錄,或者檔案,子目錄又有子子目錄和檔案,其中每個子目錄都特定的功能這個功能(這些是約定俗成了的,在後面 常用的重要目錄 (See section 1.2.1) 中會詳細說明)。

也許有人會問,沒有這個虛擬檔案系統就無法使用硬碟,可是最開始沒有硬碟,那麼這個 虛擬檔案系統以及相應的組織結構是怎麼存放起來的呢?這個問題,就像先有雞還是先有蛋這個問題一樣看似簡單實則……但是,在 Linux 中,很輕易地跳出了這個思維迴圈,問題的答案並沒在 虛擬檔案系統 和 硬碟 這兩者之間徘徊,而是第三者—— 記憶體 ,Linux系統啟動起來之後,整個 虛擬檔案系統的組織結構,都是隨著每次核心系統的啟動自動在記憶體中建立好了的,根本就不需要硬碟。

另外還要注意,就是在我們使用者的角度上,無論在Windows還是 Linux 上面,都是使用路徑來存取一個檔案的。表示檔案的路徑由 “檔案所在的目錄+各級目錄的分隔符+檔案” 三個部分組成,這個策略在兩者之間是一樣的,所不同的是,Windows下面目錄分隔符是 , Linux 下面是 / ,也許這也是兩者之間為了表示其各自立場不同的一個原因吧?^_^

系統組織

在Windows系統中,我們可以把檔案大體分為兩種: 系統檔案和使用者檔案 。一般來說系統檔案(例如Windows作業系統本身,一些系統程式,程式執行所需的庫檔案,以及一些系統組態檔等)存放的預設位置在 C 盤,當然也可以在安裝時候指定在其他盤;其它使用者檔案,包含使用者後來安裝的程式以及一些資料檔案等,使用者可以把它們隨意存放在任意的分割區。

在 Linux 系統中,主要有兩個概念: 虛擬檔案系統中的檔案和 Linux作業系統核心 本身。邏輯上可以認為前者屬於上層,後者在下層,前者基於後者,後者依賴前者而存在。 Linux 把除了它本身( Linux作業系統核心 )以外的一切事物都看作是在 虛擬檔案系統中的檔案了。無論是鍵盤,滑鼠,資料,程式,CPU,記憶體,網絡卡……無論是硬體、軟體、資料還是記憶體中的東西,我們都可以在 虛擬檔案系統中的相應子目錄對他們進行存取和操作,操作統一。而實現這些管理的幕後就是 Linux作業系統核心 本身:啟動 Linux 系統的時候,首先電腦把 Linux作業系統核心 載入到記憶體中,核心本身提供了檔案管理,裝置管理,記憶體管理,CPU進程排程管理,網路管理等功能,等核心執行起來之後,就在記憶體中建立起相應的 虛擬檔案系統,最後就是核心利用它提供的那些功能,通過管理檔案的方式,來管理 虛擬檔案系統中的硬體軟體等各種資源了。

Linux 把提供作業系統本身功能(管理計算機軟硬體資源)的那些部分劃給了 Linux作業系統核心 ,使得Linux作業系統核心 成為一個獨立的部分,有它自己獨立的開原始碼;而其它的一切(軟體應用,硬體驅動,資料)都根據其特性有自己的開原始碼、或者自由地組織並且存放在那個 虛擬檔案系統中由 Linux作業系統核心 來管理。這樣,將系統本身和系統所管理的資源分開,並開放原始碼,有助於對系統或者系統所管理的資源進行靈活的客製化和擴充套件,還能按需快速建立起只適合自己使用的作業系統,也利於作業系統本身的發展。實際 UbuntuFedoraRedHat 等各種不同的 Linux 作業系統發行版,簡單來說就是不同廠商對其檔案系統和核心進行了不同的設定而產生的 “大眾化” 的作業系統。相比之下,Windows就顯得非常地零亂複雜,將系統、軟體、硬體、資料都混在了一起,其不同版本只能由Microsoft 一家公司發行。

舉例說明

下面用直觀的例子,來說明兩者的不同,以加深理解。假設我們的機器上面有一個硬碟,硬碟分為三個區。

在Windows系統中, 我們啟動系統之後就會看到 C, D, E, 碟符,它們分別對應硬碟上的三個分割區,增加硬碟,或者分割區,會導致碟符的增加(注意由於歷史原因, A, B 用於表示軟碟機,硬碟分割區碟符從 C 開始按字母遞增),這裡的每個分割區都各自可以被格式化為不同的檔案系統(這裡的檔案系統,包括例如 NTFS 格式, FAT32 格式等),檔案系統的基本功能就是為了存放檔案的,不同檔案系統區別一般在於管理其中存放的檔案的功能的強弱,所以分割區被格式化成指定格式的檔案系統之後,就可以存放任何檔案和目錄了,我們看到的 C, D, E 內容也就對應了硬碟中相應分割區的資料內容。

但是,與Windows中把硬碟分割區看成 C, D, E 碟符不同, Linux 中最開始根本就沒有硬碟的概念,就只有一個純粹的 虛擬檔案系統。如果想要使用哪個硬碟的某個分割區,就把那個分割區 “掛載” 到某個子目錄之下,這樣硬碟中的分割區,檔案系統,目錄等內容就呈現到了那個子目錄裡面。也就是說,在 Linux 中,我們使用硬碟中的資料,實際是先把硬碟的某個分割區 “掛載” 到某個子目錄下,然後通過那個子目錄來存取的。這個例子中, 通常硬碟會對應 虛擬檔案系統中的/dev/sda (如有多個硬碟,則為 /dev/sda, /dev/sdb, ……, 按字母遞增), 其三個分割區對應 /dev/sda1, /dev/sda2,/dev/sda3 (多個分割區按數位遞增,不同硬碟的分割區,對應為 /dev/sdb1, /dev/sdb2 等等), 預設硬碟各個分割區會被掛載到 虛擬檔案系統系統中類似 /mnt/sda1/, /mnt/sda2/, /mnt/sda3/ 的目錄(在 Linux 又叫掛載點)中,在/etc/fstab 檔案中,我們可以找到分割區檔案和掛載點的對應關係描述。這樣,硬碟相應的分割區就做為整個 虛擬檔案系統根目錄下的一顆子樹,反映到了子目錄(掛載點)上,子目錄中的內容就對應分割區中的資料。

假設存取上述硬碟第三個分割區 dir1 目錄中的檔案 test.file

Window系統上的路徑:E:dir1test.file
Linux系統上的路徑:/mnt/sda3/dir1/test.file

再有,假設使用者安裝和解除安裝一個程式 firefox :

  • Windows系統中

    指定或不指定安裝路徑類似,程式的安裝目錄會在 C:Program FilesFirefox 類似的目錄中,或指定的安裝路徑中; 可執行檔案一般在程式的安裝路徑;依賴的內部庫、第三方庫、和系統庫可能在安裝路徑中,也可能在C:WindowsSystem32, 或 C:Windowssystem 等類似的路徑;而程式存取期間的系統和使用者組態檔和產生的輸入輸出檔案,可能會在安裝路徑設定中,或者在 C:Windows 下的某些檔案中(比如登錄檔資料庫檔案、使用者目錄等),這就不一定了。而且不同的系統版本,應用程式版本下,這些目錄的具體名稱和路徑可能會有所不同。解除安裝的時候由於不確定哪些地方安裝了什麼內容,很容易造成檔案刪除補全,遺留系統垃圾等現象,造成系統越來越癱腫。

  • Linux 系統中

    如果不指定安裝路徑,所有程式的可執行檔案在 /usr/bin 中, 全域性組態檔在 /etc/firefox 類似的目錄, 使用者組態檔一般在使用者主目錄的 .firefox 的路徑下(使用者主目錄路徑名稱統一格式為 /home/<username>) ,依賴的內部庫和第三方庫在 /usr/lib, 系統庫在 /lib 下, 資料檔案一般就在使用者主目錄下。 如果指定安裝目錄,那麼所有內部庫和可執行程式,全域性組態檔,會在 <安裝路徑> 下的 bin, lib, etc 子目錄下,其它檔案一般和預設情況相同。解除安裝程式之時,只需在對應目錄中,將可執行檔案、內部庫、組態檔、資料檔案刪除即可,基本沒有不確定是否遺留垃圾檔案的問題。這些都是大多數應用程式安裝的和存取的預設策略,就像是不成文的業界標準,不排除有個別程式不安裝這種策略部署應用,但是 Linux 使用者帶來 “麻煩“ 的應用,早晚也會被淘汰,不可能會流行在 Linux 系統中,這樣,自然的,好的應用都儲存在 Linux 系統中並逐漸流行起來,還不會破壞系統結構。

可見, Linux 檔案的存放和組織明顯方式更高效,層次更分明。

優缺點

基於上述內容,Windows和 Linux 檔案系統的各有優缺點分別如下。

  • Windows系統優點

    優點主要是使用者存放東西的位置比較自由,系統結構簡單便於新使用者上手。

  • Windows系統缺點

    缺點較多主要有:

    • 目錄組???缺乏標準

      由於對“系統檔案”和“使用者檔案”存放位置缺乏細緻的規定,資料組織的方式顯得比較凌亂,並且兩種檔案之間很容易相互干擾(例如資料檔案可能存放在系統區域給系統帶來垃圾檔案等)。

    • 使用者的使用經驗對系統的使用效率影響很大

      一般來說,我們使用Windows時候合理使用分割區會提升的系統效率。例如根據需要設定合理的系統分割區(假設為C 分割區),盡量少往 C 盤存放資料檔案,根據具體情況可以將一些 “重要並且常用的” 程式安裝在 C 分割區,隨時保持系統目錄的清潔和大小助於提升系統的執行速度,使用者安裝的一般軟體盡量不要安裝在 C 盤,安裝軟體時候指定的位置最好採用預設標準目錄名稱(例如 X:Program Files 目錄,這裡 X 表示碟符而不要自己定義一些奇怪名字的目錄,這樣便於軟體的維護等等。

    • 共用不便

      Windows上有經驗的使用者們會將自己的目錄結構組織好,但是每個使用者組織自己內容的方式是不一樣的,所以他的機器上哪裡存放了什麼內容,別人很難知道,為共用帶來了麻煩。

  • Linux 系統缺點

    最開始 虛擬檔案系統中的每個子目錄的功能是事先規定好了的,我們需要事先知道那些目錄存放哪些檔案,然後在相應的位置中建立自己的內容,這也是 Linux 系統入門門檻高的一個原因。當然,最開始的新手,也完全可以無視這一點,可以像Windows那樣隨意地建立目錄和檔案(儘管不推薦這麼做)。

    實際上最開始的目錄也不多,主要就那麼幾個,花不了多長時間就會明白它們的作用的,而明白這些作用之後帶來的好處,遠不止付出那麼多(本文後面 常用的重要目錄 (See section 1.2.1) 會著重對此進行介紹)。

  • Linux 系統優點

    這裡只說幾個優點:

    • 目錄結構反映系統執行機理

      當我們了解了這些目錄的功能之後,我們對整個 Linux 作業系統的執行機理也會有一個大致的了解。

    • 結構清晰避免邏輯混亂

      這樣的目錄結構,有助於我們以一種高效的方式組織自己的資料,分類清晰並且不會對系統執行有任何影響,規定了最開始每個目錄的功能,並沒有限制我們的自由,因為我們知道我們可以在哪裡建立自己的子目錄並且在子目錄中任意建立自己的檔案。

    • 組織規範便於共用

      由於目錄具有統一的組織結構,所以 Linux 上面的使用者在共用資料的時候,能夠很容易地猜測出他所需要的資料大致存放在什麼位置,同時也不會影響到私有資料的保密性,畢竟具體來說,怎麼存放自己的私有資料,那是使用者自己決定的。

Linux 上面的虛擬檔案系統目錄組織

實質上,我們啟動系統所看到的 “根目錄” ,邏輯上是 Linux 虛擬檔案系統的根目錄中的一個子目錄,我們看不到除了這個 “根目錄” 以外的其他的目錄,那些目錄和作業系統的具體實現相關是被作業系統核心隱藏起來了的,所以這裡就介紹我們所能看到的檔案系統中的 “根目錄” 的各個子目錄中的作用吧。

在 Linux 檔案系統中的每一個子目錄都有特定的目的和用途。一般都是根據 FHS 標準定義一個正式的檔案系統結構的,這個標準規定了哪些目錄應該哪些作用。這裡我們先介紹一些日常經常用到的目錄,然後給出 FHS 相關的內容。

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2017-03/142311p2.htm


IT145.com E-mail:sddin#qq.com