UNIX文件系統是UNIX系統的心臟部分,提供了層次結構的目錄和文件。文件系統將磁盤空間划分為每1024個字節一組,稱為塊(block)(也有用512字節為一塊的,如:SCO XENIX)。編號從0到整個磁盤的最大塊數。
一個磁盤分成一個或多個分區,每個分區可以包含一個文件系統
一個分區分為三部分:
+ 超級塊, 文件系統中第一塊被稱為超級塊。這個塊存放文件系統本身的結構信息,比如每個區域的大小,未被使用的磁盤塊的信息。
+ i節點, 超級塊的下一個部分就是i節點表,文件系統中的每個文件在該表中都對應一個i節點。
i節點是固定長度的記錄項,它包含有關文件的大部分信息。Linux文件系統使用 索引節點i 來記錄文件信息,索引節點是一個結構,用固定長度,它包含了一個文件的長度、創建及修改時間、權限、所屬關系、磁盤中的位置等信息。
+ 數據區, 文件的內容保存在這個區域上,磁盤上所有塊的大小都一樣,如果文件包含了超過一個塊的內容,則文件內容會存放在多個磁盤塊中,並把磁盤塊的分配情況記錄在文件的i節點中的磁盤序列表中。
仔細觀察一個柱面組的i節點和數據塊部分,可以看到下圖所示情況
一個文件系統維護了一個索引節點的數組 即為目錄項,目錄項中的每一項包括文件索引節點i的節點號和文件名,所以目錄只是將文件的名稱和它的索引節點號結合在一起的一張表。
對於一個文件來說有唯一的索引節點與之對應,而一個索引節點卻可以有多個文件名與之對應,因此磁盤上的同一個文件可以通過不同的路徑去訪問它。
在上圖中有兩個目錄項指向同一i節點。每個i節點有一個鏈接計數器,其值是指向該i節點的目錄項數。只有當鏈接計數器減少為0時,才可刪除該文件。這也就是為什么解除對一個文件的鏈接操作並不總是意味着,釋放該文件占用的磁盤塊的原因。而且刪除一個目錄項的函數被稱為unlink而不是delete的原因。
每個文件系統都對它們的i節點進行編號,因此目錄項中的i節點指向同一文件系統的i節點,不能使一個目錄項指向另一個文件系統的i節點,因此硬連接不能跨越文件系統。
當在不更換文件系統情況下為一個文件更名時,該文件的實際內容並未移動,只需構造一個指向現有i節點的新目錄項,並解除與舊目錄項的鏈接。這就是mv命令的通常操作方式。
介紹完文件系統之后,下邊了解一下符號鏈接(軟鏈接)和硬鏈接的區別
可以用ln命令對一個已經存在的文件建立一個新的連接,而不復制文件的內容。連接有軟連接和硬連接之分,軟連接又叫符號連接。
符號鏈接是指向一個文件的間接指針,硬鏈接直接指向文件的i節點。
硬連接 軟連接
硬鏈接指向文件的i節點 它的數據是它所連接的文件的路徑名,是指向一個文件的間接指針
目錄不能有硬連接,但超級用戶可以 目錄也適用
不能跨越文件系統 可以跨越文件系統
文件在磁盤中只有一個拷貝 也是只有一份拷貝
索引節點的引用為0時才可以刪除文件 可以刪除原有文件保留連接文件,沒有防誤刪功能
可以防止誤刪除
