设置
以下命令序列是为我的问题设置的。
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
结构,其中包含硬链接的数量。严格来说不知道在哪里但其他硬链接已找到。