索引節點inode:Linux為每個檔案分配一個稱為索引節點的編號,可以將inode簡單理解成一個指標,它永遠指向本檔案在物理磁碟上的具體儲存位置。系統是通過索引節點(而不是檔案名稱)來定位每一個檔案的。
硬串連:1個inode編號肯定和一個檔案的資料存放區區一一對應。那麼一個檔案系統中兩個或更多個不同的檔案名稱能否對應同一個檔案呢?答案是肯定的。我們知道inode編號是記錄在檔案名稱對應的目錄項中的,我們可以使兩個或多個檔案的目錄項具有相同的inode值,實際上就是使它們對應著同一個資料存放區區。有幾個目錄項具有相同的inode號,我們就說這個檔案有幾個硬串連(hardlink),對於普通檔案,ls -l命令的串連計數count域的數值就是本檔案擁有的硬串連數。硬串連可以通過ln命令建立。建立硬串連實際上只是增加了一個目錄項,但並未複製檔案資料區,原檔案的資料區由兩個檔案分享權限設定。這樣一方面能夠節約大量磁碟空間,同時可以保證兩個檔案能同步更新。
# ln /home/zyd/mytext hardlink_mytext
ls -il’可以顯示檔案的inode(在下面最左邊):
262457 -rw-rw-r– 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext
262457 -rw-rw-r– 2 zyd zyd 17 Nov 3 14:50 mytext
串連計數count:串連串連計數域表示有幾個檔案分享權限設定同一資料存放區區,即幾個硬串連(hardlink_mytext和mytext互為硬串連)。如上面的例子中hardlink_mytext和mytext檔案的count值都是2。當刪除硬串連檔案是系統先計算count-1的值,如果大於1則僅刪除目錄項並修改硬串連數;如果為1則刪除目錄項,另一檔案變為普通檔案,修改硬串連數;如果為0則直接刪除檔案。我們可以通過建立硬串連來保護重要的檔案,避免被誤刪除。
符號串連: 也稱 軟串連(soft link),指檔案的路徑指向,非常像windows下的捷徑。
符號串連和硬串連的區別:
符號串連是檔案的路徑指向,它甚至不需要原檔案的存在(這稱之為斷鏈);硬串連指向同一資料區,此資料區必須存在。另外不允許為目錄建立硬串連,硬串連也不能跨檔案系統。
//========================================================================
Linux 正統的檔案系統 ( 如 ext2 、 ext3) 一個檔案由目錄項、 inode 和資料區塊組成。
目錄項 : 包括檔案名稱和 inode 節點號。
Inode :又稱檔案索引節點,是檔案基本資料的存放地和資料區塊指標存放地。
資料區塊 :檔案的具體內容存放地。
Linux 正統的檔案系統 ( 如 ext2 、 3 等 ) 將硬碟分區時會劃分出目錄塊、 inode Table 區塊和 data block 資料區域。 一個檔案由一個目錄項、 inode 和資料區域塊組成。 Inode 包含檔案的屬性 ( 如讀寫屬性、 owner 等,以及指向資料區塊的指標 ) ,資料區域塊則是檔案內容。 當查看某個檔案時,會先從 inode table 中查出檔案屬性及資料存放點,再從資料區塊中讀取資料。
站在 2w 英尺視圖,檔案儲存體結構大概如下:
其中目錄項的結構如下 ( 每個檔案的目錄項儲存在改檔案所屬目錄的檔案內容裡 ) :
圖4:目錄項結構
其中檔案的 inode 結構如下( inode 裡所包含的檔案資訊可以通過 stat filename 查看得到):
圖5:inode結構
以上只反映大體的結構, linux 檔案系統本身在不斷髮展。但是以上概念基本是不變的。且如 ext2 、 ext3 、 ext4 檔案系統也存在很大差別,如果要瞭解可以查看專門的檔案系統介紹。
5. 軟串連、永久連結
軟連結和永久連結是我們常見的兩種概念:
硬串連 :是給檔案一個副本,同時建立兩者之間的串連關係。修改其中一個,與其串連的檔案同時被修改。如果刪除其中 [color=red] 任意一個 [/color] 其餘的檔案將不受影響。
軟串連 : 也叫符號串連 , 他只是對源檔案在新的位置建立一個“快捷(借用一下 wondows 常用詞)”,所以,當源檔案刪除時,符號串連的檔案將成為無源之水 -> 僅僅剩下個檔案名稱了,當然刪除這個串連,也不會影響到源檔案,但對串連檔案的使用、引用都是直接調用源檔案的。
具體關係可以看:
圖5:軟連結和永久連結
從圖上可以看出永久連結和軟連結的區別:
1 :永久連結原檔案和新檔案的 inode 編號一致。而軟連結不一樣。
2 :對原檔案刪除,會導致軟連結不可用,而永久連結不受影響。
3 :對原檔案的檔案內容修改,軟、永久連結檔案內容也一樣的修改,因為都是指向同一個檔案內容的。