是否有任何文件系统可以让 `ln -d` 成功?

Par*_*hot 12 linux filesystems directory hard-link

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)
Run Code Online (Sandbox Code Playgroud)

是否有任何文件系统驱动程序实际上允许这样做,或者是唯一的选择mount --bind <src> <dest>?或者这种行为是否在到达特定于文件系统的驱动程序之前就被内核阻止了?

注意:我实际上并不打算在任何机器上执行此操作,只是出于好奇。

sch*_*ily 6

首先要注意:该ln命令没有诸如-d, -F, 之类的选项--directory,这是一个不可移植的 GNUism。

您正在寻找的功能由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 不太可能允许文件系统驱动程序实现硬链接目录。