1. 是什么
- 鏈接:一種在共享文件和訪問它的用戶的若干目錄項(xiàng)之間建立聯(lián)系的一種方法。
-
【硬鏈接】(hard link):指通過索引節(jié)點(diǎn)來(lái)進(jìn)行連接抑月,就是一個(gè)文件(不是文件夾)的別名蚊锹,無(wú)論有多少各別名肚医,但它其實(shí)是一個(gè)文件分尸。
可以這樣理解:
一面墻上有一個(gè)洞乍楚,洞里放著一個(gè)蘋果。從墻的這一面看是這個(gè)蘋果丛楚,從墻的另一面看還是同一個(gè)蘋果
也就是說(shuō)同一塊數(shù)據(jù)但有兩個(gè)不同的名字族壳,讀寫的時(shí)候本質(zhì)上都是修改的同一塊數(shù)據(jù)。
硬鏈接的刪除:
硬鏈接在刪除的時(shí)候只是刪除了一個(gè)名字趣些,只有一塊數(shù)據(jù)的所有名字都刪除了的時(shí)候仿荆,數(shù)據(jù)才會(huì)被刪除。(刪除的時(shí)候相當(dāng)于把墻的這一面糊上坏平,但蘋果本身不動(dòng)拢操,只有兩面都糊上了,你才會(huì)看不到)
-
【軟鏈接】(又稱符號(hào)鏈接舶替,即 soft link 或 symbolic link):相當(dāng)于我們 Windows 中的快捷方式令境,即如果你軟鏈接一個(gè)目錄,只是一個(gè)目錄的快捷方式到指定位置顾瞪,操作系統(tǒng)找這個(gè)快捷方式會(huì)直接找到真實(shí)目錄下的文件舔庶。
可以這樣理解:
我聲稱我有一個(gè)蘋果,但是當(dāng)你找我要的時(shí)候陈醒,我對(duì)你說(shuō)惕橙,到某個(gè)建筑物的倉(cāng)庫(kù)就可以拿到那個(gè)蘋果了《危可見我并不真正擁有一個(gè)蘋果弥鹦,我只是擁有“某個(gè)地方有一個(gè)蘋果”這個(gè)信息。但對(duì)于外部的觀察者來(lái)說(shuō)爷辙,這跟我實(shí)際上擁有一個(gè)蘋果并無(wú)差異彬坏。
軟鏈接的刪除:
假設(shè)我死了,不會(huì)影響到原始數(shù)據(jù)犬钢。假設(shè)原始數(shù)據(jù)沒了苍鲜,那我這個(gè)符號(hào)鏈接就變成了一張空頭支票,也就是懸空的符號(hào)鏈接玷犹。
一個(gè)符號(hào)鏈接可以指向一個(gè)不存在的目標(biāo),而硬鏈接就表示肯定有文件存在洒疚。
硬鏈接可以指向文件歹颓,也可以指向目錄∮秃可以跨越任何文件系統(tǒng)巍扛。拷貝刪除原始文件或者鏈接文件乏德,不會(huì)造成相互影響撤奸。
2. 怎么查看
通過ls -l
查看吠昭,->
后面就是原始地址
$ ls -l
total 6964
lrwxrwxrwx 1 wangdanna wangdanna 48 10月 14 16:07 1.jpg -> /home/wangdanna/Downloads/picture/wallpaper1.jpg
-rw-rw-r-- 2 wangdanna wangdanna 3858 10月 9 02:13 7.jpg
-rw-rw-r-- 1 wangdanna wangdanna 14009 10月 9 01:51 love.jpg
-rw-rw-r-- 1 wangdanna wangdanna 66420 10月 9 16:51 persepolis_6-t2.jpg
如上圖,前面帶有l
的就是軟鏈接胧瓜,不帶的則是硬鏈接矢棚,lrwxrwxrwx 1 wangdanna wangdanna 48 10月 14 16:07 1.jpg -> /home/wangdanna/Downloads/picture/wallpaper1.jpg
在->
后面的是真實(shí)路徑
3. 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
硬連接的作用是允許一個(gè)文件擁有多個(gè)有效路徑名,這樣用戶就可以建立硬連接到重要文件府喳,以防止“誤刪”的功能蒲肋。
比如我將一個(gè)名為
test.txt
從/home/XX/
筆記硬鏈接到/home/XX/
桌面,
編輯桌面的test.txt
時(shí) 筆記下的test.txt
已同步更新了
即使不小心把桌面上的test.txt
刪了,/home/XX/
筆記里的test.txt
還在
你可能會(huì)說(shuō)為什么不直接復(fù)制test.txt
呢?
復(fù)制要占兩個(gè)大小啊,而且復(fù)制了,你編輯了一個(gè),另一個(gè)它不同步啊
- 缺點(diǎn)
軟鏈接文件包含有原文件的路徑信息,所以當(dāng)原文件從一個(gè)目錄下移到其他目錄中钝满,再訪問鏈接文件兜粘,系統(tǒng)就找不到了
硬鏈接就沒有這個(gè)缺陷,你想怎么移就怎么移
4. 怎么創(chuàng)建
- 查看
$ ls -l
total 504
-rw-rw-r-- 1 wangdanna wangdanna 91327 10月 11 14:03 github_api.png
-rw-rw-r-- 1 wangdanna wangdanna 413749 10月 12 21:40 html5播放器.png
drwxrwxr-x 2 wangdanna wangdanna 4096 10月 9 17:29 Wallpapers/
- 創(chuàng)建軟鏈接
$ ln -s old.file soft.link
// 可對(duì)不存在的文件創(chuàng)建軟鏈接
$ ls -l
total 504
-rw-rw-r-- 1 wangdanna wangdanna 91327 10月 11 14:03 github_api.png
-rw-rw-r-- 1 wangdanna wangdanna 413749 10月 12 21:40 html5播放器.png
lrwxrwxrwx 1 wangdanna wangdanna 8 10月 14 16:28 soft.link -> old.file
drwxrwxr-x 2 wangdanna wangdanna 4096 10月 9 17:29 Wallpapers/
$ cat soft.link
# 由于被指向的文件不存在弯蚜,此時(shí)的軟鏈接 soft.link 就是死鏈接
cat: soft.link: No such file or directory
$ echo "This is an original file_A" >> old.file
// 創(chuàng)建被指向的文件 old.file孔轴,soft.link 恢復(fù)成正常的軟鏈接
$ cat soft.link
#可看到文件內(nèi)容了
This is an original file_A
5. 加深理解
$ touch f1
#創(chuàng)建一個(gè)測(cè)試文件f1
ln f1 f2
#創(chuàng)建f1的一個(gè)硬連接文件f2
ln -s f1 f3
#創(chuàng)建f1的一個(gè)軟鏈接文件f3
$ ls -li
#-i參數(shù)顯示文件的inode節(jié)點(diǎn)信息
total 0
4083871 -rw-rw-r-- 2 wangdanna wangdanna 0 10月 14 16:37 f1
4083871 -rw-rw-r-- 2 wangdanna wangdanna 0 10月 14 16:37 f2
4083907 lrwxrwxrwx 1 wangdanna wangdanna 2 10月 14 16:37 f3 -> f1
從上面的結(jié)果中可以看出,硬連接文件 f2 與原文件 f1 的inode
節(jié)點(diǎn)相同碎捺,均為4083871路鹰,然而軟連接文件的inode
節(jié)點(diǎn)不同
$ echo "I am f1 file" >>f1
$ cat f1
I am f1 file
$ cat f2
I am f1 file
$ cat f3
I am f1 file
$ rm -f f1
$ cat f2
I am f1 file
$ cat f3
No such file or directory
通過上面的測(cè)試可以看出:當(dāng)刪除原始文件 f1 后,硬連接 f2 不受影響牵寺,但是軟鏈接 f1 文件無(wú)效
得出結(jié)論
- 刪除軟鏈接 f3 悍引,對(duì) f1,f2 無(wú)影響帽氓;
- 刪除硬鏈接 f2趣斤,對(duì) f1,f3 也無(wú)影響黎休;
- 刪除原文件 f1浓领,對(duì)硬鏈接 f2 沒有影響,導(dǎo)致符號(hào)鏈接 f3 失效势腮;
- 同時(shí)刪除原文件 f1联贩,硬鏈接 f2,整個(gè)文件會(huì)真正的被刪除捎拯。
6. 特性總結(jié)
【硬鏈接】
- 文件有相同的 inode 及 data block泪幌;
- 只能對(duì)已存在的文件進(jìn)行創(chuàng)建;
- 不能交叉文件系統(tǒng)進(jìn)行硬鏈接的創(chuàng)建署照;
- 不能對(duì)目錄進(jìn)行創(chuàng)建祸泪,只可對(duì)文件創(chuàng)建;
- 刪除一個(gè)硬鏈接文件并不影響其他有相同 inode 號(hào)的文件建芙。
不能對(duì)目錄創(chuàng)建的原因: 硬連接的話没隘,相當(dāng)于鏡像的方式,你創(chuàng)建一個(gè)目錄的硬連接之后禁荸,操作系統(tǒng)需要把這* 個(gè)目錄下所有的文件都要做一次硬連接(復(fù)制一份過去)右蒲,這樣操作系統(tǒng)在訪問這個(gè)鏈接的時(shí)候要不斷去遍歷阀湿,大大增加復(fù)雜度,而且很容易進(jìn)入死循環(huán)」逋現(xiàn)在linux沒有很好支持這個(gè) 所以 不支持陷嘴。詳情見這里和這里
【軟鏈接】
- 軟鏈接有自己的文件屬性及權(quán)限等;
- 可對(duì)不存在的文件或目錄創(chuàng)建軟鏈接翰撑;
- 軟鏈接可交叉文件系統(tǒng)罩旋;
- 軟鏈接可對(duì)文件或目錄創(chuàng)建;
- 創(chuàng)建軟鏈接時(shí)眶诈,鏈接計(jì)數(shù) i_nlink 不會(huì)增加涨醋;
- 刪除軟鏈接并不影響被指向的文件,但若被指向的原文件被刪除逝撬,則相關(guān)軟連接被稱為死鏈接(即 dangling link浴骂,若被指向路徑文件被重新創(chuàng)建,死鏈接可恢復(fù)為正常的軟鏈接
參考鏈接https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/