Linux中軟連線和硬連線的區別

2021-08-04 05:59:51 字數 2007 閱讀 8531

首先我linux鏈結分兩種,一種被稱為硬鏈結(hard link),另一種被稱為符號鏈結(symbolic link)。預設情況下,ln命令產生硬鏈結。

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

通過檔名開啟檔案

在 linux 系統中檢視 inode 號可使用命令 stat 或 ls -i(若是 aix 系統,則使用命令 istat)。清單 3.中使用命令 mv 移動並重命名檔案 glibc-2.16.0.tar.xz,其結果不影響檔案的使用者資料及 inode 號,檔案移動前後 inode 號均為:2485677。

link oldfile newfile 

ln oldfile newfile

由於硬鏈結是有著相同 inode 號僅檔名不同的檔案,因此硬鏈結存在以下幾點特性:

另外一種連線稱之為符號連線(symbolic link),也叫軟連線。軟鏈結檔案有類似於windows的快捷方式。它實際上是乙個特殊的檔案。在符號連線中,檔案實際上是乙個文字檔案,其中包含的有另一檔案的位置資訊。

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

圖 2. 軟鏈結的訪問

[oracle@linux]$ touch f1 #建立乙個測試檔案f1

[oracle@linux]$ ln f1 f2 #建立f1的乙個硬連線檔案f2

[oracle@linux]$ ln -s f1 f3 #建立f1的乙個符號連線檔案f3

[oracle@linux]$ ls -li # -i引數顯示檔案的inode節點資訊

total 0

9797648 -rw-r--r-- 2 oracle oinstall 0 apr 21 08:11 f1

9797648 -rw-r--r-- 2 oracle oinstall 0 apr 21 08:11 f2

9797649 lrwxrwxrwx 1 oracle oinstall 2 apr 21 08:11 f3 -> f1

從上面的結果中可以看出,硬連線檔案f2與原檔案f1的inode節點相同,均為9797648,然而符號連線檔案的inode節點不同。

[oracle@linux]$ echo "i am f1 file" >>f1

[oracle@linux]$ cat f1

i am f1 file

[oracle@linux]$ cat f2

i am f1 file

[oracle@linux]$ cat f3

i am f1 file

[oracle@linux]$ rm -f f1

[oracle@linux]$ cat f2

i am f1 file

[oracle@linux]$ cat f3

cat: f3: no such file or directory

通過上面的測試可以看出:當刪除原始檔案f1後,硬連線f2不受影響,但是符號連線f1檔案無效

總結:硬鏈結相當於給乙個檔案起了乙個別名,指向的是相同的inode,因此當刪除其中乙個硬連線的時候是不會刪除原始檔的,除非對原始檔的連線數為0的時候,原始檔就會被**。軟體接相當於建立了乙個新的檔案,檔案中的內容類似乙個「指標」指向原始檔,就好像windows裡面的乙個快捷方式,其本身就是乙個檔案,當原始檔被刪除時,就無法訪問該檔案。

參考:  

Linux中的軟連線和硬連線

最近在寫乙個關於android的檔案瀏覽的軟體,碰到軟連線的問題,因此記錄下軟連線和硬連線的區別 1.軟連線可以連線乙個不存在的檔案,硬連線不可以。比如ln s source symbolic可以,ln s source hardlink會失敗 實際並沒有source這個檔案時 2.軟連線可以連線乙...

linux軟連線和硬連線

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

linux 硬連線和軟連線

系統如何通過檔名訪問磁碟資料 每個檔案都對應了乙個inode物件 inode物件指出該檔案在物理磁碟上的位置,訪問檔案時,作業系統通過檔案找到乙個檔案的 inode 索引 找到對應的inode 硬連線和軟連線的區別 軟連線和硬鏈結都是產生檔案快捷方式的操作 類似於win下的快捷方式 只是底層索引方式...