檔案系統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 中指定的其系統。 |