Answers:
从历史上看,第一个Unix文件系统在每个目录中创建两个条目:.指向目录本身,并..指向其父目录。这为应用程序和OS本身提供了遍历文件系统的简便方法。
因此,每个目录的链接计数为2 + n,其中n是子目录数。链接是该目录在其父目录中的.条目,目录本身的条目以及..每个子目录中的条目。例如,假设这是以/parent所有目录为根的子树的内容:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
然后dir有5链接数:该dir条目/parent中,.在入口/parent/dir,三个..在每个条目/parent/dir/sub1,/parent/dir/sub2和/parent/dir/sub3。由于/parent/dir/sub1没有子目录,因此其链接数为2(中的sub1条目/parent/dir和中的.条目/parent/dir/sub1)。
为了最大程度地减少没有“适当”父级的根目录的特殊大小,根目录包含一个..指向自身的条目。这样,它的链接数也为2加上子目录的数量,2为/.和/..。
后来的文件系统趋向于跟踪内存中的父目录,通常不需要.并且..作为实际条目存在。典型的现代UNIX系统将.其..作为特殊值,作为独立于文件系统类型的文件系统代码的一部分。即使磁盘上什么也没有,有些文件系统仍然包含.和..条目,或者假装成。
不管是否存在.和..条目,大多数文件系统仍然报告目录的链接数为2 + n ,但是也有例外,例如btrfs不会这样做。
..指向父目录不会影响当前目录的链接数。计数2来自,.目录的(原始)名称列出了自身。你把它的方式是有点模糊,使得它听起来像.和..是两个。..应该仅用于解释数学运算的原理2+n:)
.内部有一个目录。” 如果您仍然不清楚,很抱歉,我无法进一步澄清。我能做得更好的就是在评论中复制并粘贴他的答案。
目录本身有一个,目录.内部有一个。
另外,当前目录中的子目录数是否等于硬链接数-2?
这是有道理的,因为每个子目录都会创建一个..硬链接,除此之外,您将无法创建到目录的硬链接。1 但是,对于任何严重的问题,我都不相信,尤其是。因为很容易计算子目录并获得实数。
如果您只是在查看ls输出以了解多少个子,那确实可以给您一个不错的想法。
1至少,您不能这样做ln。我没有尝试过编程,并且man 2 link是模糊的-有用于连接到一个目录中没有明显的错误,虽然有可能适用(一对夫妇EMLINK,EPERM)。因此,除非有某个标准说某个目录唯一可能的硬链接是.和..,否则,我只会将该硬链接数视为偶然的线索。