我在课本中读到UNIX/Linux不允许硬链接到目录,但软链接呢?是因为当我们有周期,如果我们创建一个硬链接,它会指向一些垃圾值?为什么硬链接不允许在UNIX/Linux中的目录
如果循环是不允许硬链接的唯一原因,那么为什么softlinks被允许到目录?
我在课本中读到UNIX/Linux不允许硬链接到目录,但软链接呢?是因为当我们有周期,如果我们创建一个硬链接,它会指向一些垃圾值?为什么硬链接不允许在UNIX/Linux中的目录
如果循环是不允许硬链接的唯一原因,那么为什么softlinks被允许到目录?
不允许硬链接,因为它们会导致循环。一旦允许循环形成,您必须执行标记和清除垃圾收集来检测何时可以最终删除隔离的目录循环(不再从根目录访问) - 这在磁盘上非常昂贵。
软链接不会导致此问题,因为它们不会提高目标目录的引用计数;因此您仍然可以通过引用计数(最多只能引用一个参考:)逃脱。
另一个问题是遍历文件系统的程序(如find
)需要避免循环。他们可能通过记住他们已经看到的每个inode编号来做到这一点,但是这是昂贵的 - 如果他们能够区分可能导致周期的链接(即,软链接)和不会导致周期的链接(正常目录条目) ,并跳过软链接,他们不需要跟踪inode号码了。
我拿到了第一和第三段的权利。但无法理解第二个。如果你想给出一个更清晰的解释 – user567879
@ user567879,换句话说,如果你有一个到目录的软链接,它不会阻止目录被删除并从磁盘 – bdonlan
+1中删除。关于第3段的更详细的解释:http://unix.stackexchange.com/questions/22394 – ignis
为了避免周期。 – bmargulies
@bmargulies然后为什么可能用软链接 – user567879
因为内核在目录层次结构的基本遍历中没有遵循它们。它可以走树,因为它在走树时不会穿过软链接。 – bmargulies