博客 > Linux 知識:Linux 中的硬鏈接和符號鏈接
瀏覽量:1337次評論:0次
作者:銳成網(wǎng)絡(luò)整理時間:2024-07-22 17:38:10
類似 Windows 系統(tǒng)中的快捷方式,在 Linux 系統(tǒng)中它們叫鏈接,存在兩種形式 ,一種是硬鏈接,一種是符號鏈接。通常,符號鏈接也被稱為軟鏈接,下面我們就介紹一下這兩種鏈接。
一、硬鏈接
由于 Linux 下的文件是通過索引節(jié)點(Inode)來識別文件,在 Linux 的文件系統(tǒng) 中,保存在磁盤分區(qū)中的文件不管是什么類型都會給它分配一個編號,稱為索引節(jié)點號。硬鏈接就是指向同一個索引節(jié)點 inode 的鏈接,而一個 inode 節(jié)點可以存在任意數(shù)目的硬鏈接。在刪除硬鏈接時,inode 節(jié)點上的數(shù)據(jù)并不會被刪除。所以,要刪除存在硬鏈接的文件的數(shù)據(jù),除了刪除文件本身,還必須刪除該文件所有的硬鏈接。
舉例說明:
首先我們通過 touch命令 來創(chuàng)建一個文件 a.txt,然后通過 ln命令 創(chuàng)建 a.txt 的硬鏈接 a-link.txt,之后通過 ls命令 查看這兩個文件的 inode 值,你會發(fā)現(xiàn)其 inode 值是一樣的,命令如下:
[root@localhost~]# touch a.txt
[root@localhost~]# ln a.txt a-link.txt
[root@localhost~]# ls -i a.txt a-link.txt
ls -li 命令執(zhí)行后,你會看到如下內(nèi)容:
400746 -rw-r--r-- 2 root root 0 6月 18 06:47 a-link.txt
400746 -rw-r--r-- 2 root root 0 6月 18 06:47 a.txt
第一列 400746 就是 inode 值,兩個文件的 inode 值是一致的,第三列是該文件存在的硬鏈接數(shù),可以看到 a.txt 和 a-link.txt 顯示都是 2。這里需要注意,在 Linux 系統(tǒng)中硬鏈接和源文件是無法區(qū)別的,兩個文件具有相同的大小、創(chuàng)建時間等信息。其實它們就是擁有相同 inode 的文件,可以看成就是同一個文件,只是文件名不同。這時候我們刪掉文件 a.txt,看一下 inode 值是否依舊存在:
[root@localhost~]# rm a.txt
[root@localhost~]# ls -i a-link.txt
輸出結(jié)果:
400746 a-link.txt
這時我們會看到,硬鏈接文件指向的 inode 值沒有變化,依舊是400746。即便刪除原來的 a.txt,也不會引起該文件指向的 inode 值發(fā)生變化。所以,要刪除存在硬鏈接文件,必須刪除該文件及該文件存在的所有硬鏈接,這時才會真的刪除該文件數(shù)據(jù)。
需要注意:
1、只有文件才可以創(chuàng)建硬鏈接,目錄不可以創(chuàng)建。
2、硬鏈接只能在同一文件系統(tǒng)中文件創(chuàng)建,不能跨文件系統(tǒng)。
二、符號鏈接(軟鏈接)
在 Linux 系統(tǒng)中,符號鏈接的使用更廣泛。與硬鏈接不同,符號鏈接是一種專門的文件類型,符號鏈接通過文件名稱來指向另一個文件,所以它不像硬鏈接一樣和源文件有相同的inode值。符號鏈接的刪除,并不影響源文件,但源文件刪除后,符號鏈接就會失效。
舉例說明:
首先,我們通過 touch命令 創(chuàng)建 b.txt 文件,之后通過 ln -s 命令來創(chuàng)建 b.txt 的軟鏈接文件。
[root@localhost~]# touch b.txt
[root@localhost~]# ln -s b.txt b-link.txt
之后,我們通過 ls -li 命令來查看創(chuàng)建的文件,你會看到如下內(nèi)容:
[root@localhost ~]# ls -li
400749 lrwxrwxrwx 1 root root 5 6月 18 08:06 b-link.txt -> b.txt
400748 -rw-r--r-- 1 root root 0 6月 18 08:06 b.txt
從結(jié)果上可以看出,兩個文件的第一列 inode 值是不一樣的,這說明符號鏈接和其指向的文件并不相同,而且從結(jié)果中可以很明確的看出 b-link.txt 是指向 b.txt 文件的,這點比硬鏈接直觀。我們來刪除掉 b.txt 文件,驗證一下符號鏈接文件是否有效:
[root@localhost~]# rm b.txt
[root@localhost~]# cat b-link.txt
cat: b-link.txt: 沒有那個文件或目錄從上面的結(jié)果可以看出,刪除 b.txt 源文件后,再查看 b-link.txt 文件,就會提示“沒有那個文件或目錄”,說明此時的符號鏈接文件 b-link.txt 已經(jīng)無效了。通過上面對硬鏈接和符號鏈接的介紹,大致可以歸納為以下對比:
特點 |
硬鏈接 |
符號鏈接 |
名稱解析 |
較快,因為硬鏈接中包含對鏈接對象的直接引用。 |
較慢,符號鏈接包含鏈接對象的路徑,因此,必須解析路徑名稱才可以找到鏈接的對象。 |
鏈接對象 |
鏈接對象必須存在才可以創(chuàng)建硬鏈接。 |
鏈接對象不一定存在,不存在一樣可以創(chuàng)建符號鏈接文件。 |
是否要求同一文件系統(tǒng) |
要求在同一個文件系統(tǒng)中。 |
不要求,符號鏈接可以跨越不同的文件系統(tǒng)。 |
刪除鏈接對象的要求 |
只有刪除所有的硬鏈接才相當(dāng)于刪除文件。 |
無要求,刪除鏈接對象后,使用符號鏈接會給出錯錯誤提示。 |
寫在最后
通過本文,我們初步了解了硬鏈接和符號鏈接的區(qū)別。
在Linux系統(tǒng)中,符號鏈接比硬鏈接靈活很多,符號鏈接可以給任何類型文件系統(tǒng)中的文件創(chuàng)建符號鏈接,而硬鏈接不可以,符號鏈接可以很直觀的看出那個是鏈接,那個是源文件,而硬件鏈接你分辨不出。
重要聲明:本文來自Linux265,經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點,轉(zhuǎn)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評論
還未登錄?點擊登錄