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
)。因此,除非有某个标准说某个目录唯一可能的硬链接是.
和..
,否则,我只会将该硬链接数视为偶然的线索。