Linux中的硬連接與軟連接

inode

在unix系統中,文件的儲存分爲兩個部分,一個是數據塊(datablock),用來保存文件中儲存的數據。另外一部分稱爲索引節點(inode),用來儲存文件的大小、建立日期、讀寫權限等信息,這一部分信息被稱爲文件的「元數據」(metadata)。html

inode中包含了文件的以下信息:
  • 文件數據block的位置node

  • 文件的字節數linux

  • 文件擁有者的User IDwindows

  • 文件的Group ID操作系統

  • 文件的讀、寫、執行權限unix

  • 文件的時間戳,共有三個:ctime指inode上一次變更的時間,mtime指文件內容上一次變更的時間,atime指文件上一次打開的時間。code

  • 連接數,即有多少文件名指向這個inodehtm

在linux系統中,每一個inode有本身的惟一inode號,能夠經過ls -i命令顯示文件的inode號blog

操做系統經過inode號碼來標識惟一文件而不是文件名,文件名只是便於用戶記憶的inode號的‘綽號’,一個文件能夠有多個文件名,可是一個文件的inode號碼是惟一的。
inode號和塊數據是分開儲存的,因此有的時候一個分區還有空間,可是操做系統卻提示分區已滿沒法寫入,這種狀況下多是當前分區的inode號已經用完了,形成這種狀況發生的緣由多是當前分區有大量的佔空間較小的文件。索引

硬連接和軟連接

硬連接(hard link)

如上所述,文件名對inode號來講只是一個綽號,一個inode號能夠有多個綽號或者說是別名。每個別名就是該inode號對應的文件的一個硬連接,也就是說硬連接至關於一個文件的別名。
可使用link或者ln命令來建立硬連接。

ln FileA FileB

以上命令會建立一個文件A的硬連接文件B,文件B至關因而文件A的別名,指向同一個文件。

硬連接有以下特色:
  • 文件有相同的 inode 及 data block;

  • 不能對目錄進行建立,只可對文件建立;

  • 不能交叉文件系統進行硬連接的建立;

  • 刪除一個硬連接文件並不影響其餘有相同 inode 號的文件。

爲何不能對目錄建立硬連接?咱們知道在linux中目錄也是一種文件,其中包含關聯列表。實際在建立目錄時會自動建立多個硬連接其中"."是自身的硬連接,".."是其父目錄的硬連接。因此一個目錄的硬連接最少爲2(指向自身的一個和父目錄指向它的一個)。也就是說每有一個子目錄其父目錄的硬連接就會+1(子目錄的」..")。因此若對目錄建立一個硬連接操做系統會認爲建立了一個子目錄,因此該硬連接指向的目標目錄的".."會指向該目錄。這樣會致使遍歷的時候邏輯混亂,甚至會出現死循環。

軟連接(soft link)

軟連接又稱符號連接(symbolic link),軟連接和硬連接不一樣,軟連接是一個普通的文件,擁有本身獨立的inode號以及數據塊,只不過軟連接的數據塊中存儲的是源文件的路徑。使用以下命令建立軟連接:

ln -s FileA FileB

上面的命令會建立FileA的一個軟連接FileB,建立軟連接不會致使FileA的inode號的鏈接數增長,由於軟連接指向源文件的文件名而不是源文件的inode號,軟連接的存在形式相似於windows中的快捷方式。

軟連接有以下幾點特性:
  • 軟連接有本身的文件屬性及權限等;

  • 可對不存在的文件或目錄建立軟連接;

  • 軟連接可交叉文件系統;

  • 軟連接可對文件或目錄建立;

  • 建立軟連接時,連接計數不會增長;

  • 刪除軟連接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟鏈接被稱爲死連接,若被指向路徑文件被從新建立,死連接可恢復爲正常的軟連接。

    最後硬連接和軟連接的區別可總結爲:
  • linux的硬連接與軟連接的區別爲硬連接只是指向inode號的一個別稱,自身不具備inode號和數據塊,而軟連接有自身的inode號和數據塊

  • 硬連接只能對存在的文件建立,軟連接能夠對不存在的文件建立,能夠以後再建立源文件。

  • 硬連接不能交叉系統建立,而軟連接能夠。

  • 硬連接不可對目錄建立,軟連接能夠。

  • 建立硬連接會增長文件的鏈接數,軟連接不會。

  • 刪除軟連接不會刪除文件,刪除硬連接時若剩餘硬連接數大於0不會刪除文件,若某文件的全部硬連接都被刪除,該文件會被刪除。

參考文獻

王華東,理解 Linux 的硬連接與軟連接[EB\OL].
https://www.ibm.com/developer...

阮一峯,理解inode[EB\OL].
http://www.ruanyifeng.com/blo...

相關文章
相關標籤/搜索