Answers:
注意:@StephaneChazelas评论后编辑
ls -l
允许块之后输出的第一个数字是硬链接数。
它与stat
“链接”中的命令返回的值相同。
当引用文件时,此数字是文件的硬链接计数;当引用目录时,此数字是包含的目录条目的数目。
一个文件通常具有1的硬链接数,但如果硬链接是用做此改变ln
命令。请参阅《 Debian参考手册》。
在您的示例中,为tempFile2添加硬链接将增加其链接数:
ln -l
ln tempFile2 tempHardLink
ln -l
无论tempFile2和tempHardLink将有2的链接数。
如果对符号链接(ln -s tempFile2 tempSymLink
)执行相同的执行,则计数值不会增加。
一个目录将有2最低计数'.'
(链接本身),并在它的父目录中的条目。
在您的示例中,如果您想增加tempFolder的链接数,请创建一个新目录,该目录将增加。
ls -l tempFolder
mkdir tempFolder/anotherFolder
ls -l tempFolder
从anotherFolder /到tempFolder /的链接(即..
)将添加到计数中。
.
本身中也有该条目,另外还有一个用于其..
每个子目录中的条目。
ls
可能花费2个字符并提供更多信息,并且没有stat(1)
命令,也find(1)
没有fsck
,也没有符号链接,这可能更多比今天有用。不破坏作家早已从事的shell脚本,就不能改变它/dev/null
; 至少从1979
通常,在Unix上,文件是文件表中的某些条目。文件种类繁多:常规文件,设备,符号链接,门,管道,套接字,目录...
ls -i
索引节点号(您可以在的输出中看到)是该表中的索引。
现在,您不是通过inode而是通过path访问文件。甲路径是链目录条目。您会发现我们在这里谈论的不是文件夹,而是目录。因为它是目录(想像电话目录)。
目录是一种特殊的文件,它为多个inode命名。目录条目是从名称到索引节点的映射。
一个给定的文件(一个inode)在一个目录中可以有多个名称(就像一个电话号码中可以有多个名称一样),并且在多个目录中也可以具有名称(条目)。这些称为链接,也称为硬链接,用于与软链接区别(一种特殊类型的文件,它是指向路径的指针)。
文件(inode)跟踪其具有的(任何目录中的条目的)链接数量,以便当该数量达到0(从上一个引用的目录取消链接时)时,该文件被释放。
这就是ls -l
输出中显示的数字(链接数)。
当一个非目录文件被创建的第一次(与open
或creat
(或bind
或mknod
某些类型的文件)系统调用),它通过与新的文件(如路径提供完成"/a/b"
)。然后发生的是一个新文件和inode分配,并将新条目添加到与根目录中的"a"
名称关联的"/"
目录中。那是初始链接,所以链接数是1。
以后可以通过link()
系统调用(ln
命令)添加更多链接。链接可以通过unlink()
系统调用(rm
命令)删除。
您会注意到目录类型的文件通常具有数量大于或等于2的链接。
现在,当您创建目录时,您正在调用mkdir()
系统调用。有点像mkdir("/a/b")
。然后,它要做的是分配目录类型的新文件。在该新目录中,它将自动创建两个条目:
"."
(点为目录)。这是到自身的链接。因此,链接数现在为1。".."
(对于目录的目录)。这是的链接"/a"
。因此,的链接计数"/a"
增加1然后,该新目录被链接到"/a"
("/a"
为其添加了一个条目),因此其链接数现在为2。如果由于"/a/b/c"
目录中的".."
条目而创建了目录"/a/b/c"
,则其链接数"/a/b"
将变为3。
大多数Unices限制创建到目录的更多链接,因为它们可能会导致问题循环。当他们允许link()
在目录上使用a时,通常只有超级用户才能这样做。
诸如此类的某些文件系统btrfs
偏离了传统的目录结构。您会注意到,btrfs
即使文件系统中的目录确实包含"."
与它们本身相同的索引节点号的条目,它们在目录中的链接数也始终为1 。
通常使用链接计数为2加上子目录数的事实。例如,在:
find . -name '*.c' -print
如果.
不包含子目录,但包含数百万个文件。通过检查的链接计数.
,find
可以知道没有子目录。因此,所有find
要做的就是读取目录的内容并报告结尾的条目.c
(就像一个grep '\.c$'
几兆字节的文件,没什么大不了的)。否则,find
将必须检查每个文件的类型,以查看其中是否存在目录(导致产生许多lstat()
系统调用)。当然,这种优化是行不通的btrfs
(尽管在现代版本的Linux中,文件类型也存储在某些文件系统(包括btrfs
)的目录条目中,并由getdents(2)
用于检索条目列表的系统调用返回在目录中lstat
仍然没有必要)。
-
在ls -l
输出许可之后,在该位置不包含任何数字是什么意思?