Linux

是否有任何 ln -d 成功的文件系統?

  • March 5, 2016

ln的聯機幫助頁:

-d, -F, --directory
 allow the superuser to attempt to hard link directories (note: will 
 probably fail due to system restrictions, even for the superuser)

是否有任何文件系統驅動程序實際上允許這樣做,或者是唯一的選擇mount --bind <src> <dest>?或者這種行為甚至在到達特定於文件系統的驅動程序之前就被核心阻止了?

注意:我實際上並不打算在任何機器上這樣做,只是好奇。

首先要注意:該ln命令沒有 , , 之類的選項,-d這是一個不可移植的 GNUism。-F``--directory

您正在尋找的功能由link(1)命令實現。

回到你原來的問題:

在典型的 UNIX 系統上,是否可以在目錄上進行硬連結的決定是在文件系統驅動程序中做出的。

Solaris UFS 驅動程序支持目錄上的硬連結,而 ZFS 驅動程序不支持。

Solaris 上的 UFS 支持硬連結的原因是 AT&T 對這個特性很感興趣 - BSD 的 UFS 不支持硬連結目錄。

ZFS 不支持硬連結目錄的原因是 Jeff Bonwick 不喜歡該功能。

關於 Linux,我猜想 Linux 會阻止在上層核心層的目錄上創建硬連結的嘗試。這種假設的原因是 Linus Torvalds 為 GIT 編寫的程式碼在git clone支持硬連結目錄的平台上以 root 身份呼叫時會切碎目錄。

請注意,支持創建硬連結目錄的文件系統還需要支持unlink(1)以 root 身份刪除非空目錄。

因此,如果我們假設 Torvalds 知道 Linux 是如何工作的,並且如果 Linux 確實支持硬連結目錄,那麼 Torvalds 應該知道以unlink(2)root 身份呼叫目錄不會返回錯誤,而是粉碎該目錄。換句話說,Linux 不太可能允許文件系統驅動程序實現硬連結目錄。

引用自:https://unix.stackexchange.com/questions/267694