索引節點 硬連線和連線計數

2022-05-05 10:30:10 字數 3017 閱讀 4799

索引節點inode:

linux為每個檔案分配乙個稱為索引節點的號碼inode,可以將inode簡單理解成乙個指標,它永遠指向本檔案的具體儲存位置。系統是通過索引節點(而不是檔名)來定位每乙個檔案。
this is my file.

複製**

1、當然這行文字一定是儲存在磁碟資料區某個具體位置裡(物理上要通過磁頭號、柱面號和扇區號來描述,在本例中假設分別是1、20、30)。

2、假設其inode是262457,那麼系統通過一段標準程式,就能將這個inode轉換成存放此檔案的具體實體地址(1磁頭、20柱面、30扇區),最終讀出檔案的內容:「this is my file.」

3、所以inode是指向乙個檔案資料區的指標號碼,乙個inode對應著系統中唯一的一片物理資料區,而位於兩個不同物理資料區的檔案必定分別對應著兩個不同的inode號碼。

複製**

# cp /home/zyd/mytext newfile

複製**

在當前工作目錄建立了乙個新檔案newfile,其實際操作主要包括如下三步:

1、在當前目錄中增加乙個目錄項,其檔名域填入newfile,並分配了乙個新的inode,假設是262456。

2、將原檔案(在1磁頭、20柱面、30扇區)的內容複製了乙份到新的空閒物理塊(假設是1磁頭、20柱面、31扇區)。

3、填寫一些其他關鍵資訊,使系統通過這些資訊及inode號碼可以完成實體地址的轉換。

所以檔案複製要分配新的inode和新的資料區,雖然兩個檔案的內容是一樣的。

硬連線hardlink:

我們實際使用檔案時一般是通過檔名來引用的。通過上面的討論,我們知道:

1個inode號碼肯定和一片完全屬於乙個檔案的資料區一一對應。那麼乙個檔案系統中兩個或更多個不同的檔名能否對應同乙個檔案呢?答案是肯定的。

我們知道inode號碼是記錄在檔名對應的目錄項中的,我們可以使兩個或多個檔案的目錄項具有相同的inode值,實際上就使它們對應著同乙個檔案。

有幾個目錄項具有相同的inode號,我們就說這個檔案有幾個硬連線(hardlink),

對於普通檔案,ls -l命令的連線計數count域的數值就是本檔案擁有的硬連線數。硬連線可以通過ln命令建立,

例如:

# ln /home/zyd/mytext hardlink_mytext

複製**

就建立了乙個新的檔案hardlink_mytext,這個檔案的inode同樣是262457。建立硬連線實際上只是增加了乙個目錄項,但並複製檔案資料區,原檔案的資料區由兩個檔案共享。這一方面能夠節約大量磁碟空間,同時可以保證兩個檔案能同步更新。

'ls -il'可以顯示檔案的inode(在下面最左邊):

262456 -rw-rw-r-- 1 zyd zyd 17 nov 3 14:52 newfile

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:

前面我們介紹了,檔案的連線計數域表明本系統中共有幾個檔案目錄項的inode和本檔案相同,也就是本檔案共有幾個硬連線。如上面的例子中hardlink_mytext和mytext檔案的count值都是2。

那麼對於目錄,其count域的含義是什麼呢?目錄的count同樣表示共有多少個目錄項指向此目錄,不過要詳細說明必須進一步解釋vfs檔案系統的結構,為簡單起見,只要這樣理解就行了:(count-2)等於本目錄包含的直接子目錄數(就是只包括兒子,不包括孫子啦!)。

例如:如果乙個目錄/abc的count域為5,那麼/abc目錄一定包含3個子目錄。

複製**

進一步說明:

硬連線檔案實際上並不是一種新的檔案型別,兩個檔案互為對方的硬連線。它們應該都是普通檔案(誰能告訴我:其它型別的檔案可以硬連線嗎?)。兩個檔案除了名稱或/和檔案目錄不同外,其它部分完全相同,更改了乙個檔案,另乙個的檔案長度、內容、更改時間等都將相應發生變化,更改了乙個檔案的許可權位mode,另乙個也會發生同樣的變化。

注意連線計數字段count,互為硬連線的兩個檔案的count值都是2,表明有兩個inode指向同一檔案的inode。

當我們刪除其中乙個檔案時,系統首先將(count-1)->;count,如果結果是零,就將其目錄項和資料區都刪除,否則只將本目錄項刪除,資料區仍然保留,仍然可以通過另外的檔名訪問。根據這個特性,可以通過為重要的檔案建立硬連線的方法來防止其被誤刪除。

乙個檔案系統允許的inode節點數是有限的,如果檔案數量太多,即使每個檔案都是0位元組的空檔案,系統最終也會因為節點空間耗盡而不能再建立檔案。所以當發現不能建立檔案時首先要考慮硬碟資料區是否還有空間(可通過du命令),其次還得檢查節點空間。

互為硬連線的多個檔案必須位於同乙個檔案系統上。根裝置及任何乙個需要mount才能掛接進來的分割槽、軟盤、nfs、光碟機等都是乙個獨立的檔案系統,每個檔案系統有乙個相應的裝置號,不同檔案系統中具有相同inode節 點的檔案間沒有任何聯絡。系統則通過裝置號和inode號的組合唯一確定乙個檔案。
linux之所以能支援多種檔案系統,其實是由於linux提供了乙個虛擬檔案系統vfs,vfs作為實際檔案系統的上層軟體,掩蓋了實際檔案系統底層的具體結構差異,為系統訪問位於不同檔案系統的檔案提供了乙個統一的接 口。

實際上許多檔案系統並不具備inode結構,其目錄結構也和以上的討論不同,但通過vfs,系統均為其提供了虛擬一致的inode和目錄項結構。

所以,'ls -il'命令實際顯示的inode應該是vfs inode,也就是說,inode是存在於記憶體中的資料結構,而不一定是實際的硬碟結構。

但為linux量身定做的ext2檔案系統具備實際的inode和連線型目錄項結構,所以,對於ext2檔案系統,可以認為我們上面討論的關於硬連線的概念是完全正確的。

軟連線和硬連線

軟連線和硬鏈結的理解 linux檔案管理使用的是inode,任何乙個檔案或者是乙個資料夾,都是使用inode來管理檔案的。在檔案系統中,乙個檔案的基本資訊中就記錄了該檔案的inode資訊,在訪問乙個檔案的時候,系統找到這個檔名對應的inode號碼 其次,通過inode號碼,獲取inode資訊 最後,...

軟連線和硬連線

ln命令 該命令在檔案之間建立鏈結。這種操作實際上是給系統中已有的某個檔案指定另外乙個可用於訪問它的名稱。對於這個新的檔名,我們可以為之指定不同的訪問許可權,以控制對資訊的共享和安全性的問題。如果鏈結指向目錄,使用者就可以利用該鏈結直接進入被鏈結的目錄而不用打一大堆的路徑名。而且,即使我們刪除這個鏈...

linux軟連線和硬連線

1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...