科技

Linux軟連結和硬連結的區別之ln命令詳解

1. 先來了解一下Linux資料是如何儲存和查詢的

對作業系統來說,資料分為兩種:1. 使用者資料 (user data) 2.元資料 (metadata)。使用者資料就是儲存和記錄檔案的內容。比如一個1M的ppt檔案,500K的txt檔案。這都屬於使用者資料。這個檔案總有屬性吧,比如大小、修改時間、訪問時間、建立時間、儲存的位置(檔案所在的inode)、檔案建立者等等資訊。這些屬性資訊或者理解為彙總資訊,我們稱它為元資料。一句話,使用者資料是檔案的真實內容,而元資料則是彙總資訊。

在 Linux 中,元資料中的 inode 號(inode 號即索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。

2. 檢視檔案對應的inode號

[[email protected] ~]# ls -i latest.tar.gz

134474678 latest.tar.gz

linux檢視檔案對應的inode號

可以看出latest.tar.gz這個檔案, inode 號是134474678,Linux查詢讀寫該檔案時,以為個inode號碼為標識,而不是檔名。檔名類似於網站域名,僅僅是方便人類記憶。

也就是說, inode134474678有一個硬連結,它就是latest.tar.gz。

3. 根據inode號查詢對應的檔案

那麼,問題來了,系統上有沒有第二個檔案,它的inode號碼也是13447467。

使用find查詢一下:

[[email protected] ~]# find / -inum 134474678

查詢結果如下:

/root/latest.tar.gz

/root/latest2.tar.gz

linux根據inode號查詢對應的檔案

硬碟上真的有第二個檔案它的inode號碼也是134474678,像這種情況,我們認為inode134474678有兩個硬連結。當然,這是本文作者提前準備好的。

為解決檔案的共享使用,Linux 系統引入了兩種連結:硬連結 (hard link) 與軟連結(又稱符號連結,即 soft link 或 symbolic link)。連結為 Linux 系統解決了檔案的共享使用,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等好處。

4. 確認硬連結的數量

檢視一下檔案latest.tar.gz

[[email protected] ~]# ll latest.tar.gz

輸出結果如下:

-rwxr-xr-x. 2 root root 8743850 Oct 11 15:00 latest.tar.gz

請留意輸出的結果中的數字2,表示該檔案存在2個硬連結。

正常情況下,一個inode只有一個連結,如下例

[[email protected] ~]# ll abc.txt

輸出結果:

-rw-r--r--. 1 root root 9 Nov 21 11:39 abc.txt

請留意輸出的結果中的數字1,表示該檔案只存在1個硬連結,預設情況下,檔案都是隻有一個硬連結的。

5. 檢視軟連結

再來看一個檔案

[[email protected] ~]# ll /dev/stdout

lrwxrwxrwx. 1 root root 15 Sep 26 15:57 /dev/stdout -> /proc/self/fd/1

linux檢視軟連結

我們發現,/dev/stdout實際上指向另一個檔案/proc/self/fd/1,這就是軟連結。類似於Windows系統上的快捷方式。

6. 軟連結與硬連結的區別

6.1 軟連結特點

軟連結,實際上是一個獨立的檔案,有自己的inode。類似於Windows作業系統中的快捷方式軟連結可以跨檔案系統 ,硬連結不可以軟連結可以對一個不存在的檔名進行連結軟連結可以對目錄進行連結軟連結有自己的檔案屬性及許可權等;建立軟連結時,連結計數 i_nlink 不會增加;刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢復為正常的軟連結)。6.2 硬連結特點

檔案有相同的 inode 及 data block;只能對已存在的檔案進行建立;不能交叉檔案系統進行硬連結的建立;不能對目錄進行建立,只可對檔案建立;刪除一個硬連結檔案並不影響其他有相同 inode 號的檔案。ln連結符原理如下:

Linux ln連結符原理圖

7. 建立檔案的連結

Linux ln命令是一個非常重要而且常用命令,它用於為檔案或者目錄建立連結。

7.1 建立軟連結

建立一個檔案,用於演示軟連結。

[[email protected] ~]# touch soft.txt

建立軟連結示例:

[[email protected] ~]# ln -sf soft.txt soft123.txt

檢查結果:

[[email protected] ~]# ll soft123.txt

輸出檔案屬性

lrwxrwxrwx. 1 root root 8 Nov 26 17:48 soft123.txt -> soft.txt

linux建立軟連結

可以看出這個檔案指向當前目錄soft.txt,配置成功。7.2 建立硬連結

建立一個檔案,用於演示硬連結。

[[email protected] ~]# touch hard.txt

建立硬連結,沒有使用選項

[[email protected] ~]# ln hard.txt hard123.txt

檢查結果:

[[email protected] ~]# ll hard123.txt

輸出檔案屬性:

-rw-r--r--. 2 root root 0 Nov 26 17:47 hard123.txt

linux建立硬連結

留意以上輸出數字2,表明該檔案有2個副本。

8. 總結

ln命令可以建立檔案的副本,也可以建立軟連結。

點選瞭解更多,原文排版更直觀易讀哦

Reference:科技日報

看更多!請加入我們的粉絲團

轉載請附文章網址

不可錯過的話題