`ls` 如何找到硬链接?

`ls` 如何找到硬链接?

设置

以下命令序列是为我的问题设置的。

root@cd330f76096d:/# cd
root@cd330f76096d:~# ls              
root@cd330f76096d:~# mkdir -p my_dir/my_subdir
root@cd330f76096d:~# ls -hAil
total 12K
6175969 -rw-r--r-- 1 root root 3.1K Oct 15  2021 .bashrc
6175970 -rw-r--r-- 1 root root  161 Jul  9  2019 .profile
7382820 drwxr-xr-x 3 root root 4.0K Sep  6 19:34 my_dir

语境

my_dir请注意,根据输出,它具有三个硬链接。想必他们是:

  • ./my_dir
  • my_dir/.
  • my_dir/my_subdir/..

然而。 。 。

root@cd330f76096d:~# find . -xdev -inum 7382820
./my_dir

就是这样。只有一行。

问题

我缺少什么和/或如何ls -l工作?

我一半期望我无法找到更多文件的原因find是它们引用了...在这种情况下我问到底如何ls -l处理对源代码

预设置

上面的示例是在 docker 容器中创建的,为了方便起见,我在下面分享:

$ docker pull ubuntu:jammy
jammy: Pulling from library/ubuntu
Digest: sha256:aabed3296a3d45cede1dc866a24476c4d7e093aa806263c27ddaadbdce3c1054
Status: Downloaded newer image for ubuntu:jammy
docker.io/library/ubuntu:jammy
$ docker run -it ubuntu:jammy bash

答案1

遇到的路径名find(即,除了命令行上给出的搜索路径之外)不能包含...组件,因此您的命令永远不会显示这些。

为什么?因为POSIX 标准是这么说的(我的重点):

每个路径操作数应在提供时按原样进行评估,包括所有尾随<slash>字符;<slash>层次结构中遇到的其他文件的所有路径名应由当前路径操作数、a (如果当前路径操作数不以 1 结尾)和相对于路径操作数的文件名的串联组成。相关部分不得包含点或点-点组件,没有尾随字符,并且路径名组件之间<slash>只有单个字符。<slash>

(上面提到的“当前路径操作数”是命令行上的搜索路径之一。)

ls命令可以计算出目录的链接计数,因为它使stat()调用,返回一个stat结构,其中包含硬链接的数量。严格来说不知道在哪里但其他硬链接已找到。

相关内容