文件夹的链接值默认为 2

文件夹的链接值默认为 2

当我们在 Linux 中创建任何文件夹/目录时,任何人都可以帮助我第一次理解链接值“2”背后的逻辑。

在此输入图像描述

我搜索了很多,但找不到令人满意的逻辑

答案1

Unix 文件系统的基本设计可以追溯到早期。论文中是这样描述的UNIX 分时系统作者:丹尼斯·M·里奇和肯·汤普森。

设计者希望能够引用当前目录,并有一种方法从目录转到其父目录。他们没有引入特殊的 shell 语法,而是决定使用一个已经存在的功能:目录可以包含其他目录的条目,因此他们决定具有特殊名称的条目.将始终指向目录本身,而具有特殊名称的条目将始终指向目录本身。 name..总是指向目录的父目录。例如,如果根目录包含一个名为 的子目录foo,则foo..条目指向根目录,而foo.条目指向foo其自身。

因此,对于没有子目录的目录,目录的链接计数(指向它的目录条目数)始终为 2:父目录中的预期条目加上目录.。每个子目录都会因条目而将链接计数加 1 ..

特殊条目...最初是mkdir由命令直接使用文件系统的磁盘表示形式进行清理而创建的。后来的系统将其移至内核中。如今,许多文件系统不再在磁盘表示中包含.和条目。..文件系统驱动程序不需要,并且如果它始终记住目录父目录的位置(这会稍微增加内存消耗,按照今天的标准可以忽略不计,但按照 1970 年代的标准则不然),也不.需要。..在包含磁盘...条目的文件系统中,文件系统驱动程序确保这些条目始终存在。在磁盘表示中不包含这些条目的文件系统中,文件系统驱动程序会假装这些条目存在。

答案2

每个目录的链接数至少为两个,因为

  1. 从其父目录对该目录的引用
  2. 目录中的自引用 ( .)

示例:假设在某个基本目录中有一个目录foo

$ ls -i /basedir
1056868 foo
$ ls -ia /basedir/foo
1056868 .  1056849 ..

ls选项-i显示目录条目的索引节点号,该选项-a显示以点开头的条目(ls默认情况下不显示)。注意/basedir/foo/basedir/foo/.具有相同的 inode 号。由于(至少)有两个对相应索引节点的不同引用,因此该索引节点的链接计数为两个(或更多)。

相关内容