Linux檔案系統之三 硬鏈結和軟鏈結

2021-08-11 20:41:35 字數 1943 閱讀 8670

linux檔案系統不得不提及的乙個概念便是link鏈結(軟鏈結和硬鏈結),不像windows下的快捷方式讓人容易理解,linux下的鏈結存在一定的迷惑性。要談及link鏈結概念,則必須首先介紹linux下的的檔案的讀取方式:

1.由一層一層的目錄取得檔案相關的inode對映資料;

2.找到目標檔案的target inode節點,去該節點提取該檔案存放的block區域資訊

3.在block中提取實際存放的內容

1. 硬鏈結hard link

一句話,在新的目錄下新增了和目標檔案相關聯的的inode對映資料。在鳥叔的書中的乙個例子很好地解釋了hard link。

「假設我的/root/crontab為乙個hard link的文件,該文件是鏈結到/etc/crontab這個文件,也就是說,其實/root/crontab和/ect/crontab是同乙個文件,指示有兩個目錄都記錄crontab這個檔案的inode關聯對映資料。也就是說,可以由/etc目錄的block域找到crontab這個文件的inode節點在a處,而由/root目錄的block域同樣可以找到crontab這個文件的inode節點在a處,所以crontab這個文件的inode和block域都沒有發生改變,只是存在兩個目錄指向它而已。」

並非類似於程式設計領域的深拷貝概念,因為磁碟的佔用量並不會增加,磁碟內也不會存在同一檔案的兩份拷貝。但hard link的限制也很明顯:hard link只能在同一partition上進行,不能跨filesystem,只能在檔案上建立hard link,目錄物件不能使用hard link。

可以看到硬鏈結一般情況下是不使用新的inode節點和block的,故而如果在目錄物件上使用hard link,則該目標目錄下的所有檔案都要和源目錄下所有檔案建立hard link,而如果考慮到源目錄出現建立檔案和刪除操作,則相應的也要主動修改目標目錄下的資訊,顯然這種方式是比較複雜的,並且收益場景也比較少見。故而硬鏈結是不支援目錄物件的。

2. 軟鏈結symbolic link

軟連線是建立乙個新的文件,而這個文件會將資料的讀取指向它link的那個檔案內容(inode,block都是新的,但是新建檔案的block中填寫的是目標link檔案的路徑名+檔名),所以一旦**文件被刪除之後,symbolic link 的檔案將會出現【無法開啟檔案】。

所以可以,看到hard link會給相應的檔案的鏈結(宣告使用)數目加1外並未其他***,即使源目錄下的檔案資料被刪除了,也因為該檔案的鏈結計數並不為0而不會刪除該檔案對應的資料內容,只會擦除在源目錄下的block區的記錄。而軟鏈結則是乙個直接的二道販子,並且不做任何保障機制,所以硬鏈結相比於軟鏈結更安全。

3. 使用ln指令驗證

#ln [-sf] 原始檔  目標檔案

-f:如果目標檔案存在,則先將目標檔案刪除,然後再建立鏈結關係

先驗證硬鏈結:在桌面上存在乙個linux-test可執行檔案,現在先執行du -sb; df -i檢視當前容量,得到結果為

然後執行ln linux-test copy-test這時桌面上會出現乙個copy-test可執行檔案,但是執行du -sb; df -i

可以看到硬鏈結並沒有新的空間損耗(某些局特例如新檔案關聯資訊加入正好會導致當前目錄的block加1)

這時,通過ls指令檢視這兩個檔案的inode節點資訊,可以看到

這兩個檔案的inode節點都是668160,link計數也是按照預期的變為了2。

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...

檔案系統 硬鏈結 軟鏈結

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

檔案系統 軟連線和硬鏈結

先,來看一下檔案的各個屬性。圖1 ls li檢視檔案屬性 輸入命令是ls li 第一行 inode 下面會將述inode 第二行 檔案的種類和許可權 第四行 屬組 第五行 所歸屬的組 第六行 檔案的大小 第七行 檔案最後修改的時間 第八行 檔案或者目錄的名稱 其次,讓我們來看一下inode。inod...