为什么不允许硬链接到UNIX/Linux中的目录

use*_*879 8 unix linux filesystems hyperlink

我在教科书中读到UNIX/Linux不允许硬链接到目录,但软链接呢?是因为当我们有周期并且如果我们创建硬链接时,它会指向一些垃圾值?

如果循环是不允许硬链接的唯一原因,那么为什么允许软链接到目录?

bdo*_*lan 13

不允许使用硬链接,因为它们会导致循环.一旦允许循环形成,就必须执行标记和清除垃圾收集,以检测何时可以最终删除目录的隔离周期(不再可从根目录访问) - 这在磁盘上非常昂贵.

软链接不会导致此问题,因为它们不会引发目标目录的引用计数; 因此,您仍然可以通过引用计数(最多只有一个引用:)逃脱.

另一个问题是遍历文件系统的程序(例如find)需要避免循环.他们可以通过记住他们看到的每个inode号做到这一点,但这很昂贵 - 如果他们可以区分可能导致循环的链接(即软链接)和不会导致循环的链接(正常目录条目),以及跳过软链接,他们不再需要跟踪inode号码.

  • @ user567879,换句话说,如果你有一个到目录的软链接,它不会阻止该目录被删除并从磁盘中删除 (2认同)