您好,登錄后才能下訂單哦!
今天小編給大家分享一下linux硬鏈接不能鏈接目錄的原因是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
原因:引入了對目錄的硬連接就有可能在目錄中引入循環,在目錄遍歷的時候系統就會陷入無限循環當中,這樣導致無法定位到訪問目錄。Linux的目錄結構是一棵以“/目錄”為根節點的樹,如果允許自定義硬連接,則很有可能會破壞這個結構,甚至形成循環;而一旦形成循環,對于需要遍歷目錄樹的命令,是致命的。所以為了避免對目錄樹結構的破壞,linux不允許用戶自定義硬連接在目錄上。
LINUX的硬鏈接不能鏈接到目錄是因為引入了對目錄的硬連接就有可能在目錄中引入循環,在目錄遍歷的時候系統就會陷入無限循環當中,這樣導致無法定位到訪問目錄。
linux系統中,每個文件(目錄也是文件)都對應著一個inode結構,其中inode數據結構中包含了文件類型(目錄,普通文件,符號連接文件等等)的信息,也就是說操作系統在遍歷目錄時可以判斷出符號連接,既然可以判斷出符號連接當然就可以采取一些措施來防范進入過大的循環了,系統在連續遇到8個符號連接后就停止遍歷,這就是為什么對目錄符號連接不會進入死循環的原因了。但是對于硬連接,由于操作系統中采用的數據結構和算法限制,目前是不能防范這種死循環的。
linux硬連接的本質
在探討問題之前,先來談一下硬連接的本質。
硬連接實際上就是目錄的inode所指向的block的內容。目錄的block中的每一條記錄,都是一個硬連接。目錄本身是Linux中文件的一種(目錄文件,符號為d),而“目錄文件”的文件內容,就是一條條的硬連接。
舉個例子(注意圖片中目錄連接數的變化):
tmp目錄連接數變化前后圖示如下(紅線表示連接數來源):
通過上面的例子可以發現,一個目錄剛被創建時的硬連接數就為2,其中一個來自于父目錄,另一個來自于自身的“.”。如果再給目錄創建一個子目錄,那么硬連接數就會+1變成3,這是因為多了一個來自于子目錄的“..”的連接。
到這里或許有人會問,不是說硬連接不能用于目錄么?上面的演示又是怎么回事?
這里需要澄清一個概念,“硬連接不能用于目錄”,是說不能由用戶自定義目錄的硬連接,而只能由操作系統來維護。實際上目錄和硬連接是不可分隔、互為一體的。“硬連接”本身,其實就是目錄維護其子文件名&子目錄名的方式。
自定義硬連接的噩夢:循環
談完了硬連接的本質,就可以回到今天的主題了:為什么不允許用戶自定義目錄的硬連接?
我們知道Linux的目錄結構是一棵以“/目錄”為根節點的樹,如果允許自定義硬連接,則很有可能會破壞這個結構,甚至形成循環,例如下面的命令如果可以執行成功的話:
一旦形成循環,對于需要遍歷目錄樹的命令,是致命的(例如從上向下遍歷的du命令,從下向上遍歷的pwd命令)。所以為了避免對目錄樹結構的破壞,linux不允許用戶自定義硬連接在目錄上。軟連接之所以沒有這個限制,是因為軟連接文件有一個專門的文件類型,可供系統識別,而“硬連接文件”和系統的正常文件沒有任何不同,無法進行判斷。
以上就是“linux硬鏈接不能鏈接目錄的原因是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。