2011-10-11 43 views
7

我在課本中讀到UNIX/Linux不允許硬鏈接到目錄,但軟鏈接呢?是因爲當我們有周期,如果我們創建一個硬鏈接,它會指向一些垃圾值?爲什麼硬鏈接不允許在UNIX/Linux中的目錄

如果循環是不允許硬鏈接的唯一原因,那麼爲什麼softlinks被允許到目錄?

+1

爲了避免週期。 – bmargulies

+0

@bmargulies然後爲什麼可能用軟鏈接 – user567879

+0

因爲內核在目錄層次結構的基本遍歷中沒有遵循它們。它可以走樹,因爲它在走樹時不會穿過軟鏈接。 – bmargulies

回答

12

不允許硬鏈接,因爲它們會導致循環。一旦允許循環形成,您必須執行標記和清除垃圾收集來檢測何時可以最終刪除隔離的目錄循環(不再從根目錄訪問) - 這在磁盤上非常昂貴。

軟鏈接不會導致此問題,因爲它們不會提高目標目錄的引用計數;因此您仍然可以通過引用計數(最多隻能引用一個參考:)逃脫。

另一個問題是遍歷文件系統的程序(如find)需要避免循環。他們可能通過記住他們已經看到的每個inode編號來做到這一點,但是這是昂貴的 - 如果他們能夠區分可能導致週期的鏈接(即,軟鏈接)和不會導致週期的鏈接(正常目錄條目) ,並跳過軟鏈接,他們不需要跟蹤inode號碼了。

+0

我拿到了第一和第三段的權利。但無法理解第二個。如果你想給出一個更清晰的解釋 – user567879

+2

@ user567879,換句話說,如果你有一個到目錄的軟鏈接,它不會阻止目錄被刪除並從磁盤 – bdonlan

+1

+1中刪除。關於第3段的更詳細的解釋:http://unix.stackexchange.com/questions/22394 – ignis

相關問題