Linux:硬链接到目录是如何工作的?

Har*_*rry 5 linux hard-link inode

我知道 Linux 不允许硬链接到目录。我在某处读到,

  1. 这是为了防止文件系统中的无意循环(或图形,而不是更理想的树结构)。

  2. 某些 *nix 系统确实允许 root 用户硬链接到目录。

因此,如果我们在一个这样的系统上(确实允许硬链接到目录)并且如果我们是 root 用户,那么..在删除(硬链接的)目标和它的父母?

a (200)
\-- .  (200)
\-- .. (100)
\-- b  (300)
|   \-- .  (300)
|   \-- .. (200)
|   \-- c  (400)
|       \-- .  (400)
|       \-- .. (300)
|       \-- d  (500)

 <snip>

|
\-- H (400)
Run Code Online (Sandbox Code Playgroud)

(上图中,括号中的数字是inode地址。)

如果a/H是到目录的(尝试的)硬链接a/b/c,则

  1. inode 400 中存储的引用计数应该是多少:2、3 或 4?换句话说,硬链接到目录是否会将目标目录的 inode 的引用计数增加 1 或 2?

  2. 如果我们删除a/b/c,inode 400 中的...条目将继续分别指向有效的 inode 400 和 300。但是如果a/b递归删除目录树,inode 400 中存储的引用计数会发生什么变化?

即使 inode 400 可以通过其中的非零引用计数(1 或 2 - 参见前面的问题)保持完整,对应于..内部 inode 400的 inode 地址仍然无效!

因此,在目录树b被删除后,如果用户切换到a/H目录,然后cd ..从那里执行 a ,会发生什么?

注意:如果 Linux (ext4) 上的默认文件系统即使是 root 用户也不允许硬链接到目录,那么我仍然有兴趣了解上述基于 inode 的文件系统问题的答案这确实允许此功能。