檔案系統 硬鏈結與軟鏈結的區別

2021-07-12 02:48:01 字數 2605 閱讀 1232

我們知道檔案都有檔名與資料,這在 linux 上被分成兩個部分:使用者資料 (user data) 與元資料 (metadata)。使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實內容的地方;而元資料則是檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。在 linux 中,元資料中的 inode 號(inode 是檔案元資料的一部分但其並不包含檔名,inode 號即索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。圖 1.展示了程式通過檔名獲取檔案內容的過程。

圖1. 通過檔名開啟檔案

清單1:移動或重新命名檔案

在 linux 系統中檢視 inode 號可使用命令 stat 或 ls -i

清單 :1.中使用命令 mv 移動並重命名檔案 glibc-2.16.0.tar.xz,其結果不影響檔案的使用者資料及 inode 號,檔案移動前後 inode 號均為:2485677。

link oldfile newfile 

ln oldfile newfile

檔案有相同的 inode 及 data block; 只能對已存在的檔案進行建立; 不能交叉檔案系統進行硬鏈結的建立;

不能對目錄進行建立,只可對檔案建立; 刪除乙個硬鏈結檔案並不影響其他有相同 inode 號的檔案。

清單2. 硬鏈結特性展示

清單 3. 查詢有相同 inode 號的檔案:

值得一提的是,linux 系統存在 inode 號被用完但磁碟空間還有剩餘的情況。我們建立乙個 5m 大小的 ext4 型別的 mo.img 檔案,並將其掛載至目錄 /mnt。然後我們使用乙個 shell 指令碼將掛載在 /mnt 下 ext4 檔案系統的 indoe 耗盡(見清單 4)。

清單 4. 測試檔案系統 inode 耗盡但仍有磁碟空間的情景

硬鏈結不能對目錄建立是受限於檔案系統的設計(見 清單2對目錄建立硬鏈結將失敗)。現 linux 檔案系統中的目錄均隱藏了兩個個特殊的目錄:當前目錄(.)與父目錄(..)。檢視這兩個特殊目錄的 inode 號可知其實這兩目錄就是兩個硬鏈結(注意目錄 /mnt/lost+found/ 的 inode 號)。若系統允許對目錄建立硬鏈結,則會產生目錄環。

軟鏈結與硬鏈結不同,若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。軟鏈結就是乙個普通檔案,只是資料塊內容有點特殊。軟鏈結有著自己的 inode 號以及使用者資料塊(見 圖 2.)。因此軟鏈結的建立與使用沒有類似硬鏈結的諸多限制:

軟鏈結有自己的檔案屬性及許可權等;

軟鏈結可對檔案或目錄建立;

刪除軟鏈結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死鏈結(即 dangling link,若被指向路徑檔案被重新建立,死鏈結可恢復為正常的軟鏈結)。

圖 2. 軟鏈結的訪問

清單 5. 軟鏈結特性展示

當然軟鏈結的使用者資料也可以是另乙個軟鏈結的路徑,其解析過程是遞迴的。但需注意:軟鏈結建立時原檔案的路徑指向使用絕對路徑較好。使用相對路徑建立的軟鏈結被移動後該軟鏈結檔案將成為乙個死鏈結(如下所示的軟鏈結 a 使用了相對路徑,因此不宜被移動),因為鏈結資料塊中記錄的亦是相對路徑指向。

當前系統已掛著的檔案系統型別,除上述使用的命令 df,還可使用命令 mount 或檢視檔案 /proc/mounts。

命令 ls 或 stat 可幫助我們區分軟鏈結與其他檔案並檢視檔案 inode 號,但較好的方式還是使用 find 命令,其不僅可查詢某檔案的軟鏈結,還可以用於查詢相同 inode 的所有硬鏈結。(見清單 8.)

清單 6. 使用命令 find 查詢軟鏈結與硬鏈結

系統根據磁碟的大小預設設定了 inode 的值(見清單 9.),如若必要,可在格式檔案系統前對該值進行修改。如鍵入命令 mkfs -t ext4 -i 512/dev/sda4,將使磁碟裝置 /dev/sda4 格式成 inode 大小是 512 位元組的 ext4 檔案系統。

清單 7. 檢視系統的 inode 值

附上ibm在關於硬鏈結與軟連線的官方說明

檔案系統 硬鏈結 軟鏈結

我們使用ls l的時候看到的除了看到檔名,還看到了檔案元資料 linux7種檔案型別 普通檔案 目錄檔案 管道檔案 軟鏈結檔案 塊裝置檔案 字元裝置檔案socket檔案 ls l讀取儲存在磁碟上的檔案資訊,然後顯示出來 求檔案的大小 8int main 9 其實這個檔案元資訊除了通過ls方式來讀取,...

linux檔案系統 軟鏈結和硬鏈結

硬鏈結ln src dest ubpara link ls il 總用量 8 660108 rw rw r 1 ubpara ubpara 9 5月 14 19 41 a 660109 drwxrwxr x 2 ubpara ubpara 4096 5月 14 19 42 test ubpara l...

Linux檔案系統中軟鏈結和硬鏈結的區別

1.硬鏈結是建立乙個指向block的inode,有防止誤刪除的功能。因為刪除乙個檔案,實際上是刪除inode資訊,切斷了inode與block之間的聯絡。當給乙個檔案做了硬鏈結之後,刪除檔案時,只會減少檔案的鏈結數,當鏈結數為0時,才會徹底刪除該檔案。軟鏈結類似windows系統的快捷方式,是乙個完...