如何在 Linux 上创建目录的硬链接?

如何在 Linux 上创建目录的硬链接?

我知道禁止在目录上创建硬链接,因为这会导致内存错误,但我想绕过这个限制。可以做到吗?

我通过使用创建链接ln,在我尝试做一些事情之后,ln dir1 dir2我得到了ln: dir1: hard link not allowed for directory

答案1

无法在目录上创建硬链接的原因不是内存问题。而是因为它会在文件系统层次结构中创建一个循环,并且这是文件系统所禁止的。这是无法绕过的。

如果您想要目录链接,有以下几种选择:

  • 符号链接(ln -s
  • 绑定挂载(仅限 root)
  • nfs 挂载(和其他网络文件系统)(仅限根,仅限导出的文件系统)

话虽如此,实际上可以间接地创建指向目录的硬链接。每个目录都有两个指向目录的硬链接 -.一个链接到目录本身,..另一个链接到父目录。因此,如果您检查目录中的硬链接数,就会发现其中有多少个子目录。您可以通过创建更多子目录来创建更多硬链接。(请注意,某些文件系统会动态生成这些链接,但实际上并不存储它们。)

答案2

debugfs有可能,如果你选择的文件系统有类似或 的工具xfs_db。使用它来创建指向你选择的 inode 号的目录条目。但是,文件系统检查可能每次都会继续尝试更正它。

如果您遇到链接需要进入/退出 chroot 或类似情况的情况,请改用绑定挂载。(大多数容器或沙箱工具已经知道如何设置绑定挂载。)

答案3

我做过一次,是在内核 0.95 Linux 软着陆系统发行版的 extfs 上。

之后我无法取消链接双重链接目录

答案4

正如您之前所说,出于某些原因,无法在目录上创建硬链接。我认为最重要的原因是,可能会意外创建具有无限深度的文件树结构。

但是,cp -lR <src-dir> <dest-dir>您可以递归地为每个文件创建硬链接。这不完全是相同的语义,因为每个目录仍被复制且未硬链接,但每个文件都是如此,但我想这非常接近您可能需要的。

相关内容