徹底搞懂硬鏈接和軟鏈接

這篇文章能讓你徹底搞懂硬鏈接和軟鏈接,希望耐心讀完!

在開(kāi)始講解之前,咱們先過(guò)一下咱們學(xué)習(xí)一個(gè)概念或者某個(gè)知識(shí)點(diǎn)的方法:

第一步:我們得知道這個(gè)東西是個(gè)啥?【W(wǎng)HAT】
第二步:這個(gè)東西有什么用,為什么有這么個(gè)東西?【W(wǎng)HY】
第三步:這個(gè)東西咋么用?【HOW】

來(lái)我們按部就班,先來(lái)第一步:硬鏈接和軟鏈接是啥?

硬連接指通過(guò)索引節(jié)點(diǎn)來(lái)進(jìn)行連接。
在Linux的文件系統(tǒng)中,保存在磁盤(pán)分區(qū)中的文件不管是什么類型
都給它分配一個(gè)編號(hào),稱為索引節(jié)點(diǎn)號(hào)(Inode Index)。
在Linux中,多個(gè)文件名指向同一索引節(jié)點(diǎn)是存在的。一般這種連接就是硬連接。
另外一種連接稱之為符號(hào)連接(Symbolic Link),也叫軟連接。
軟鏈接文件有類似于Windows的快捷方式。
它實(shí)際上是一個(gè)特殊的文件。在符號(hào)連接中,文件實(shí)際上是一個(gè)文本文件,其中包含的有另一文件的位置信息

這是我在其他文章里copy過(guò)來(lái)的解釋??赐昴銇?lái)氣不?這講的是啥???講完了我還是沒(méi)理解硬鏈接和軟鏈接是個(gè)啥東西。

為什么沒(méi)看明白呢? 咀嚼了幾遍后,我發(fā)現(xiàn)原因是我不理解索引節(jié)點(diǎn)Inode是什么東西,看這個(gè)解釋的意思是軟硬鏈接是依賴這個(gè)索引節(jié)點(diǎn)的,那么首先,咱們來(lái)搞懂什么是Inode。

又來(lái)新概念了,老樣子,三步走:
第一步【W(wǎng)HAT】:Inode是個(gè)啥?
第二步【W(wǎng)HY】:Inode有啥用?Inode誕生的原因是啥?【待補(bǔ)充】
第三步【HOW】:Inode咋用?【待補(bǔ)充】

Inode是啥?

首先大家得知道文件,咱們?cè)诓僮飨到y(tǒng)上都創(chuàng)建、修改或者刪除過(guò),這個(gè)東西咱們熟啊,那些深夜學(xué)習(xí)的資料,都是以mp4格式存在我E盤(pán)呢,當(dāng)然這是windows系統(tǒng)了。

在linux系統(tǒng)里,文件包含兩部分?jǐn)?shù)據(jù):

第一部分是真實(shí)的文件數(shù)據(jù),也就是你數(shù)據(jù)的內(nèi)容。比如,你在你系統(tǒng)里偷偷建了個(gè)文件,名稱叫《北京富婆通訊錄》,那么這部分?jǐn)?shù)據(jù)存儲(chǔ)的就是富婆的電話、地址、照片、三圍、財(cái)產(chǎn)等等等了;
第二部分是存儲(chǔ)文件的元數(shù)據(jù)信息,比如文件的創(chuàng)建者、文件的創(chuàng)建時(shí)間、文件大小等等。這種存儲(chǔ)文件元數(shù)據(jù)的存儲(chǔ)區(qū)域就叫做INODE,中文譯名“索引節(jié)點(diǎn)”。通過(guò)索引節(jié)點(diǎn),可以迅速定位到真實(shí)的文件數(shù)據(jù)。

【看完這個(gè)介紹,怎么那么像mysql的innodb索引呢?誰(shuí)能回答一下?】

上面對(duì)INODE做了個(gè)簡(jiǎn)單介紹,大家有了個(gè)概念,就是個(gè)存儲(chǔ)文件元數(shù)據(jù)的地方,還以為有多神秘呢。下面咱們對(duì)INODE的幾個(gè)屬性做下簡(jiǎn)單了解,以便更深刻的理解INODE。

Inode的內(nèi)容

inode包含文件的元信息,每個(gè)文件對(duì)應(yīng)一個(gè)Inode,它具體有以下內(nèi)容:

* 文件的字節(jié)數(shù)
  * 文件擁有者的User ID
  * 文件的Group ID
  * 文件的讀、寫(xiě)、執(zhí)行權(quán)限
  * 文件的時(shí)間戳,共有三個(gè):ctime指inode上一次變動(dòng)的時(shí)間,
mtime指文件內(nèi)容上一次變動(dòng)的時(shí)間,atime指文件上一次打開(kāi)的時(shí)間。
  * 鏈接數(shù),即有多少文件名指向這個(gè)inode
  * 文件數(shù)據(jù)block的位置

可以用stat命令查看:


image.png

除了文件名之外的信息都在inode之中。為什么沒(méi)有文件名,下面講。

Inode的大小

Inode既然存儲(chǔ)了文件的元數(shù)據(jù),那必然是占用存儲(chǔ)空間的。需要注意的是,Inode的大小,在磁盤(pán)格式化的時(shí)候,就已經(jīng)決定了。硬盤(pán)格式化的時(shí)候,操作系統(tǒng)會(huì)將硬盤(pán)分成兩個(gè)區(qū),一個(gè)是數(shù)據(jù)區(qū)域,存放文件數(shù)據(jù);另一個(gè)就是inode區(qū)(inode table),存放inode所包含的信息。

每個(gè)Inode的大小,一般是128字節(jié)或者256字節(jié),一般會(huì)為1KB或者2KB就設(shè)置一個(gè)Inode,在格式化的時(shí)候就給定。假設(shè)一塊1G的硬盤(pán),每個(gè)Inode的大小為128字節(jié),每1KB就設(shè)置一個(gè)Inode,那么 inode table的大小就是 1GB/1KB * 128byte = 128M,占這個(gè)硬盤(pán)的12.5%。

由于每個(gè)文件都必須有一個(gè)inode,因此有可能發(fā)生inode用光了, 但是磁盤(pán)未滿的情況。

Inode的編號(hào)

每個(gè)inode都有一個(gè)編號(hào),用于操作系統(tǒng)來(lái)識(shí)別inode。值得一提的是,操作系統(tǒng)不會(huì)在意文件名,而是通過(guò)inode編號(hào)來(lái)識(shí)別文件。對(duì)操作系統(tǒng)來(lái)說(shuō),文件名只是inode編號(hào)的別稱或者綽號(hào)。

用戶通過(guò)文件名打開(kāi)文件,實(shí)際上,操作系統(tǒng)內(nèi)部這個(gè)過(guò)程分為三步:

1. 通過(guò)文件名找到inode編號(hào);
2. 根據(jù)inode編號(hào)獲取inode信息;
3. 根據(jù)inode信息找到數(shù)據(jù)文件所在磁盤(pán)區(qū)域;

采用ls -i 命令可以查看文件的inode編號(hào)。


image.png

以上,咱們終于對(duì)Inode有了個(gè)基本認(rèn)識(shí),總結(jié)一句話就是存儲(chǔ)文件元數(shù)據(jù)的地方。

硬鏈接和軟鏈接

現(xiàn)在,咱們?cè)賮?lái)回頭看硬鏈接和軟連接。

重新來(lái)給硬鏈接下個(gè)定義

一般情況下,文件名和inode編號(hào)是 “一一對(duì)應(yīng)”的關(guān)系。
但是,在linux系統(tǒng)中,允許多個(gè)文件名,對(duì)應(yīng)一個(gè)inode編號(hào)。
這種多個(gè)文件名對(duì)應(yīng)同一個(gè)Inode的情況,稱之為硬鏈接。

模型圖類似這樣:


image.png

第一步硬鏈接是什么咱們知道了。那么它有什么作用呢?

我們看,兩個(gè)文件名有同一個(gè)Inode編號(hào),那說(shuō)明,這兩個(gè)文件名指向的就是同一個(gè)數(shù)據(jù)文件嘛,相當(dāng)于一個(gè)人有兩個(gè)名字。這樣做的好處是啥?

避免誤刪。多個(gè)硬鏈接指向的同一個(gè)文件,只有在所有鏈接都被刪除后,文件才會(huì)被刪除。

軟連接

文件A和文件B的inode號(hào)碼不一樣,但是文件A的內(nèi)容是文件B的路徑。
讀取文件A時(shí)自動(dòng)將訪問(wèn)導(dǎo)向B。無(wú)論打開(kāi)哪個(gè)文件,讀取的都是B。文件A就稱為文件B的軟連接。

模型圖類似這樣:


image.png

看了上述的概念,讓我想到了C語(yǔ)言的指針。

軟鏈接的作用:如果你想在你刪除某個(gè)文件后,其他對(duì)這個(gè)文件的鏈接都同時(shí)失效的話,使用軟連接是非常合適的。

到這里基本上硬鏈接和軟鏈接講完了,至于最后一步怎么用,其實(shí)差不多已經(jīng)講過(guò)了。有的時(shí)候,一個(gè)東西的誕生其實(shí)就是為了滿足某種需求,知道為什么誕生也就知道怎么用了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容