今天小編給大家分享一下linux硬鏈接不能鏈接目錄的原因是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、新賓網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、新賓網(wǎng)絡(luò)營銷、新賓企業(yè)策劃、新賓品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供新賓建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
原因:引入了對(duì)目錄的硬連接就有可能在目錄中引入循環(huán),在目錄遍歷的時(shí)候系統(tǒng)就會(huì)陷入無限循環(huán)當(dāng)中,這樣導(dǎo)致無法定位到訪問目錄。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ì)陷入無限循環(huán)當(dāng)中,這樣導(dǎo)致無法定位到訪問目錄。
linux系統(tǒng)中,每個(gè)文件(目錄也是文件)都對(duì)應(yīng)著一個(gè)inode結(jié)構(gòu),其中inode數(shù)據(jù)結(jié)構(gòu)中包含了文件類型(目錄,普通文件,符號(hào)連接文件等等)的信息,也就是說操作系統(tǒng)在遍歷目錄時(shí)可以判斷出符號(hào)連接,既然可以判斷出符號(hào)連接當(dāng)然就可以采取一些措施來防范進(jìn)入過大的循環(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ì)
在探討問題之前,先來談一下硬連接的本質(zhì)。
硬連接實(shí)際上就是目錄的inode所指向的block的內(nèi)容。目錄的block中的每一條記錄,都是一個(gè)硬連接。目錄本身是Linux中文件的一種(目錄文件,符號(hào)為d),而“目錄文件”的文件內(nèi)容,就是一條條的硬連接。
舉個(gè)例子(注意圖片中目錄連接數(shù)的變化):
tmp目錄連接數(shù)變化前后圖示如下(紅線表示連接數(shù)來源):
通過上面的例子可以發(fā)現(xiàn),一個(gè)目錄剛被創(chuàng)建時(shí)的硬連接數(shù)就為2,其中一個(gè)來自于父目錄,另一個(gè)來自于自身的“.”。如果再給目錄創(chuàng)建一個(gè)子目錄,那么硬連接數(shù)就會(huì)+1變成3,這是因?yàn)槎嗔艘粋€(gè)來自于子目錄的“..”的連接。
到這里或許有人會(huì)問,不是說硬連接不能用于目錄么?上面的演示又是怎么回事?
這里需要澄清一個(gè)概念,“硬連接不能用于目錄”,是說不能由用戶自定義目錄的硬連接,而只能由操作系統(tǒng)來維護(hù)。實(shí)際上目錄和硬連接是不可分隔、互為一體的?!坝策B接”本身,其實(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不允許用戶自定義硬連接在目錄上。軟連接之所以沒有這個(gè)限制,是因?yàn)檐涍B接文件有一個(gè)專門的文件類型,可供系統(tǒng)識(shí)別,而“硬連接文件”和系統(tǒng)的正常文件沒有任何不同,無法進(jìn)行判斷。
以上就是“l(fā)inux硬鏈接不能鏈接目錄的原因是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。