5分鐘讓你明白“軟鏈接”和“硬鏈接”的區(qū)別

今天在知乎上看到一篇十分有趣的問題:
如何評(píng)價(jià)微軟高級(jí)工程師癡迷于soft link這一linux常見概念?

雖然又是知名撕逼王曾某的撕逼帖,但是我還是想就題目中鏈接的問題簡(jiǎn)單地講講勇劣。

什么是鏈接嗦枢?

鏈接簡(jiǎn)單說實(shí)際上是一種文件共享的方式,是 POSIX 中的概念甲雅,主流文件系統(tǒng)都支持鏈接文件峰锁。

它是用來干什么的萎馅?

你可以將鏈接簡(jiǎn)單地理解為 Windows 中常見的快捷方式(或是 OS X 中的替身),Linux 中常用它來解決一些庫(kù)版本的問題虹蒋,通常也會(huì)將一些目錄層次較深的文件鏈接到一個(gè)更易訪問的目錄中糜芳。在這些用途上,我們通常會(huì)使用到軟鏈接(也稱符號(hào)鏈接)魄衅。

軟鏈接和硬鏈接的區(qū)別是峭竣?

下面我們進(jìn)入正題,來探討一下軟硬兩種鏈接到底有什么區(qū)別晃虫?

首先皆撩,從使用的角度講,兩者沒有任何區(qū)別哲银,都與正常的文件訪問方式一樣扛吞,支持讀寫,如果是可執(zhí)行文件的話也可以直接執(zhí)行荆责。

那區(qū)別在哪呢滥比?在底層的原理上。

為了解釋清楚做院,我們首先在自己的一個(gè)工作目錄下創(chuàng)建一個(gè)文件盲泛,然后對(duì)這個(gè)文件進(jìn)行鏈接的創(chuàng)建:

$ touch myfile && echo "This is a plain text file." > myfile
$ cat myfile

This is a plain text file.

現(xiàn)在我們創(chuàng)建了一個(gè)普通地不能再普通的文件了濒持。然后我們對(duì)它創(chuàng)建一個(gè)硬鏈接,并查看一下當(dāng)前目錄:

$ ln myfile hard
$ ls -li

25869085 -rw-r--r--  2 unixzii  staff  27  7  8 17:39 hard
25869085 -rw-r--r--  2 unixzii  staff  27  7  8 17:39 myfile

ls 結(jié)果的最左邊一列查乒,是文件的 inode 值弥喉,你可以簡(jiǎn)單把它想成 C 語(yǔ)言中的指針郁竟。它指向了物理硬盤的一個(gè)區(qū)塊玛迄,事實(shí)上文件系統(tǒng)會(huì)維護(hù)一個(gè)引用計(jì)數(shù),只要有文件指向這個(gè)區(qū)塊棚亩,它就不會(huì)從硬盤上消失蓖议。

你也看到了,這兩個(gè)文件就如同一個(gè)文件一樣讥蟆,inode 值相同勒虾,都指向同一個(gè)區(qū)塊。

然后我們修改一下剛才創(chuàng)建的 hard 鏈接文件:

$ echo "New line" >> hard
$ cat myfile

This is a plain text file.
New line

可以看到瘸彤,這兩個(gè)文件果真就是一個(gè)文件修然。
下面我們看看軟鏈接(也就是符號(hào)鏈接)和它有什么區(qū)別。

$ ln -s myfile soft
$ ls -li

25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 hard
25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 myfile
25869216 lrwxr-xr-x  1 unixzii  staff   6  7  8 17:47 soft -> myfile

誒质况,你會(huì)發(fā)現(xiàn)愕宋,這個(gè)軟鏈接的 inode 竟然不一樣啊,并且它的文件屬性上也有一個(gè) l 的 flag结榄,這就說明它與之前我們創(chuàng)建的兩個(gè)文件根本不是一個(gè)類型中贝。

下面我們?cè)囍鴦h除 myfile 文件,然后分別輸出軟硬鏈接的文件內(nèi)容:

$ rm myfile
$ cat hard

This is a plain text file.
New line
$ cat soft

cat: soft: No such file or directory

之前的硬鏈接沒有絲毫地影響臼朗,因?yàn)樗?inode 所指向的區(qū)塊由于有一個(gè)硬鏈接在指向它邻寿,所以這個(gè)區(qū)塊仍然有效,并且可以訪問到视哑。
然而軟鏈接的 inode 所指向的內(nèi)容實(shí)際上是保存了一個(gè)絕對(duì)路徑绣否,當(dāng)用戶訪問這個(gè)文件時(shí),系統(tǒng)會(huì)自動(dòng)將其替換成其所指的文件路徑挡毅,然而這個(gè)文件已經(jīng)被刪除了蒜撮,所以自然就會(huì)顯示無(wú)法找到該文件了。

為驗(yàn)證這一猜想慷嗜,我們?cè)傧蜻@個(gè)軟鏈接寫點(diǎn)東西:

$ echo "Something" >> soft
$ ls

hard   myfile soft

可以看到淀弹,剛才刪除的 myfile 文件竟然又出現(xiàn)了!這就說明庆械,當(dāng)我們寫入訪問軟鏈接時(shí)薇溃,系統(tǒng)自動(dòng)將其路徑替換為其所代表的絕對(duì)路徑,并直接訪問那個(gè)路徑了缭乘。

總結(jié)

到這里我們其實(shí)可以總結(jié)一下了:

  • 硬鏈接: 與普通文件沒什么不同沐序,inode 都指向同一個(gè)文件在硬盤中的區(qū)塊
  • 軟鏈接: 保存了其代表的文件的絕對(duì)路徑,是另外一種文件,在硬盤上有獨(dú)立的區(qū)塊策幼,訪問時(shí)替換自身路徑邑时。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市特姐,隨后出現(xiàn)的幾起案子晶丘,更是在濱河造成了極大的恐慌,老刑警劉巖唐含,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浅浮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捷枯,警方通過查閱死者的電腦和手機(jī)滚秩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淮捆,“玉大人郁油,你說我怎么就攤上這事∨嗜” “怎么了桐腌?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蚕苇。 經(jīng)常有香客問我哩掺,道長(zhǎng),這世上最難降的妖魔是什么涩笤? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任嚼吞,我火速辦了婚禮,結(jié)果婚禮上蹬碧,老公的妹妹穿的比我還像新娘舱禽。我一直安慰自己,他們只是感情好恩沽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布誊稚。 她就那樣靜靜地躺著,像睡著了一般罗心。 火紅的嫁衣襯著肌膚如雪里伯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天渤闷,我揣著相機(jī)與錄音疾瓮,去河邊找鬼。 笑死飒箭,一個(gè)胖子當(dāng)著我的面吹牛狼电,可吹牛的內(nèi)容都是我干的蜒灰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼肩碟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼强窖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起削祈,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翅溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岩瘦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體未巫,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窿撬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年启昧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劈伴。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡密末,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跛璧,到底是詐尸還是另有隱情严里,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布追城,位于F島的核電站刹碾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏座柱。R本人自食惡果不足惜迷帜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色洞。 院中可真熱鬧戏锹,春花似錦、人聲如沸火诸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)置蜀。三九已至奈搜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盯荤,已是汗流浹背馋吗。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廷雅,地道東北人耗美。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓京髓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親商架。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堰怨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容