軟連線、硬連結 和 i節點(inode)

SJLin96發表於2018-08-20

一. inode

  • inode(索引節點):用來存放檔案及目錄的基本資訊,包含時間、檔名、使用者及群組等。

  • inode 是 UNIX 作業系統中的一種資料結構,其本質是結構體,它包含了與檔案系統中各個檔案相關的一些重要資訊。在 UNIX 中建立檔案系統時,同時將會建立大量的 inode 。通常,檔案系統磁碟空間中大約百分之一空間分配給了 inode 表。

  • Linux的檔案系統三個部分:
    ①超級塊(super block):記錄此檔案系統的整體資訊。包括inode/block的總量、使用量、剩餘量,以及檔案系統的格式等。
    ②inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案資料所在的block號碼。
    ③資料區(block):實際的檔案內容。如果檔案小於block,只能獨佔這個block,空閒部分不能再被其他檔案使用。如果檔案太大時,會佔用多個block。

  • i節點(inode的表格中內容、inodetable):
    ①每個inode大小固定為128位元組,含有有關一個檔案的資訊。
    ②主要內容:檔案訪問模式(rwx)、檔案的所有者和組、檔案大小、ctime、atime、mtime、檔案特性標誌、檔案真正內容指向(磁碟地址表)。
    ③在i節點中最重要的一項是磁碟地址表。

  • ls -i命令可顯示出inode:

 

  • 建立一個檔案的過程,這個過程需要4個步驟:
    ①檔案屬性的儲存:核心先在i節點表中找到一個空的節點(假設是47,表示的是i節點表中第9個位置的i節點),將檔案的屬性激勵進去。
    ②檔案內容的儲存:一個檔案的內容往往需要許多的儲存塊(假設是3個塊)才能容納,而這些儲存塊是不連續的。核心會從自由塊的列表中找出3個自由的儲存塊,分別是塊300,100,200(核心找塊的順序不一定是從小到大排的)。核心就會把資料一次複製到塊300,100,200中。
    ③將檔案儲存檔案內容的資訊記錄到i節點中:上面已經將檔案依次放到塊300,200,100中了,所以在i節點的磁碟分佈區中依次記錄這3個標號,代表檔案存放的地方以及組合順序。
    ④新增檔名到目錄中:這個檔名就是使用者取的名字(假設是name)。核心將(8,name)新增到目錄檔案中,這樣檔名和i節點就對應起來了,就可以通過檔名來知道檔案的屬性和訪問檔案的內容。

 

二. 軟連線和硬連結

  • Linux連結分兩種:①硬連結(Hard Link)②符號連結(Symbolic Link)。

  • 預設情況下,ln命令產生硬連結。

1. 硬連結

  • 硬連線指通過索引節點來進行連線。在Linux中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。
  • 硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。
  • 只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。
  • 硬連結的兩個限制:
    ①不允許給目錄建立硬連結。
    ②只有在同一檔案系統中的檔案之間才能建立連結。 即不同硬碟分割槽上的兩個檔案之間不能夠建立硬連結。這是因為硬連結是通過結點指向原始檔案的,而檔案的i-結點在不同的檔案系統中可能會不同。

 

  • Linux中建立硬連線測試:

 

2.軟連線

  • 軟連線檔案有類似於Windows的快捷方式。它實際上是一個特殊的檔案。
  • 在軟連線中:檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。

 

  • Linux中建立軟連線測試:

 

參考文章:

i節點的問題? - 路人甲的回答 - 知乎

Linux中的檔案i節點

相關文章