共計(jì) 1421 個(gè)字符,預(yù)計(jì)需要花費(fèi) 4 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 linux 硬鏈接不能鏈接目錄的原因是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
原因:引入了對(duì)目錄的硬連接就有可能在目錄中引入循環(huán),在目錄遍歷的時(shí)候系統(tǒng)就會(huì)陷入無(wú)限循環(huán)當(dāng)中,這樣導(dǎo)致無(wú)法定位到訪問(wèn)目錄。Linux 的目錄結(jié)構(gòu)是一棵以“/ 目錄”為根節(jié)點(diǎn)的樹,如果允許自定義硬連接,則很有可能會(huì)破壞這個(gè)結(jié)構(gòu),甚至形成循環(huán);而一旦形成循環(huán),對(duì)于需要遍歷目錄樹的命令,是致命的。所以為了避免對(duì)目錄樹結(jié)構(gòu)的破壞,linux 不允許用戶自定義硬連接在目錄上。
LINUX 的硬鏈接不能鏈接到目錄是因?yàn)橐肓藢?duì)目錄的硬連接就有可能在目錄中引入循環(huán),在目錄遍歷的時(shí)候系統(tǒng)就會(huì)陷入無(wú)限循環(huán)當(dāng)中,這樣導(dǎo)致無(wú)法定位到訪問(wèn)目錄。
linux 系統(tǒng)中,每個(gè)文件 (目錄也是文件) 都對(duì)應(yīng)著一個(gè) inode 結(jié)構(gòu),其中 inode 數(shù)據(jù)結(jié)構(gòu)中包含了文件類型 (目錄,普通文件,符號(hào)連接文件等等) 的信息,也就是說(shuō)操作系統(tǒng)在遍歷目錄時(shí)可以判斷出符號(hào)連接,既然可以判斷出符號(hào)連接當(dāng)然就可以采取一些措施來(lái)防范進(jìn)入過(guò)大的循環(huán)了,系統(tǒng)在連續(xù)遇到 8 個(gè)符號(hào)連接后就停止遍歷,這就是為什么對(duì)目錄符號(hào)連接不會(huì)進(jìn)入死循環(huán)的原因了。但是對(duì)于硬連接,由于操作系統(tǒng)中采用的數(shù)據(jù)結(jié)構(gòu)和算法限制,目前是不能防范這種死循環(huán)的。
linux 硬連接的本質(zhì)
在探討問(wèn)題之前,先來(lái)談一下硬連接的本質(zhì)。
硬連接實(shí)際上就是目錄的 inode 所指向的 block 的內(nèi)容。目錄的 block 中的每一條記錄,都是一個(gè)硬連接。目錄本身是 Linux 中文件的一種(目錄文件,符號(hào)為 d),而“目錄文件”的文件內(nèi)容,就是一條條的硬連接。
舉個(gè)例子(注意圖片中目錄連接數(shù)的變化):
tmp 目錄連接數(shù)變化前后圖示如下(紅線表示連接數(shù)來(lái)源):
通過(guò)上面的例子可以發(fā)現(xiàn),一個(gè)目錄剛被創(chuàng)建時(shí)的硬連接數(shù)就為 2,其中一個(gè)來(lái)自于父目錄,另一個(gè)來(lái)自于自身的“.”。如果再給目錄創(chuàng)建一個(gè)子目錄,那么硬連接數(shù)就會(huì) + 1 變成 3,這是因?yàn)槎嗔艘粋€(gè)來(lái)自于子目錄的“..”的連接。
到這里或許有人會(huì)問(wèn),不是說(shuō)硬連接不能用于目錄么?上面的演示又是怎么回事?
這里需要澄清一個(gè)概念,“硬連接不能用于目錄”,是說(shuō)不能由用戶自定義目錄的硬連接,而只能由操作系統(tǒng)來(lái)維護(hù)。實(shí)際上目錄和硬連接是不可分隔、互為一體的。“硬連接”本身,其實(shí)就是目錄維護(hù)其子文件名 子目錄名的方式。
自定義硬連接的噩夢(mèng):循環(huán)
談完了硬連接的本質(zhì),就可以回到今天的主題了:為什么不允許用戶自定義目錄的硬連接?
我們知道 Linux 的目錄結(jié)構(gòu)是一棵以“/ 目錄”為根節(jié)點(diǎn)的樹,如果允許自定義硬連接,則很有可能會(huì)破壞這個(gè)結(jié)構(gòu),甚至形成循環(huán),例如下面的命令如果可以執(zhí)行成功的話:
一旦形成循環(huán),對(duì)于需要遍歷目錄樹的命令,是致命的(例如從上向下遍歷的 du 命令,從下向上遍歷的 pwd 命令)。所以為了避免對(duì)目錄樹結(jié)構(gòu)的破壞,linux 不允許用戶自定義硬連接在目錄上。軟連接之所以沒(méi)有這個(gè)限制,是因?yàn)檐涍B接文件有一個(gè)專門的文件類型,可供系統(tǒng)識(shí)別,而“硬連接文件”和系統(tǒng)的正常文件沒(méi)有任何不同,無(wú)法進(jìn)行判斷。
以上就是“l(fā)inux 硬鏈接不能鏈接目錄的原因是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道。