如何找到目录的 link 计数
How to find the link count of a directory
mkdir d
mkdir d/a
mkdir d/b
mkdir d/c
在终端中执行这些命令时,目录 d 的 link 计数是多少?
在POSIX系统上,您可以使用stat()
syscall读取st_nlink
以获得任何文件的硬link数或目录,根据包含它的文件系统将定义为"number of hard links"
但是 POSIX 实际上并没有定义 "number of hard links" 对目录的含义。目录不能有 hard link,所以它们理论上的 hard link 计数总是 1.
不同的文件系统使用 st_nlink
传递有关目录的不同信息:
在 Linux (ext4) 上,st_nlink
表示该目录的子目录数,加上它的特殊条目:
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/
5
因此,如果您 运行 问题中的命令,您将得到 5。
另一方面,MacOS (apfs) 将其定义为该目录中所有条目的数量,加上它的特殊条目:
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/ # with GNU coreutils
8
因此,如果您 运行 问题中的命令,您将得到 8。
mkdir d
mkdir d/a
mkdir d/b
mkdir d/c
在终端中执行这些命令时,目录 d 的 link 计数是多少?
在POSIX系统上,您可以使用stat()
syscall读取st_nlink
以获得任何文件的硬link数或目录,根据包含它的文件系统将定义为"number of hard links"
但是 POSIX 实际上并没有定义 "number of hard links" 对目录的含义。目录不能有 hard link,所以它们理论上的 hard link 计数总是 1.
不同的文件系统使用 st_nlink
传递有关目录的不同信息:
在 Linux (ext4) 上,st_nlink
表示该目录的子目录数,加上它的特殊条目:
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/
5
因此,如果您 运行 问题中的命令,您将得到 5。
另一方面,MacOS (apfs) 将其定义为该目录中所有条目的数量,加上它的特殊条目:
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/ # with GNU coreutils
8
因此,如果您 运行 问题中的命令,您将得到 8。