`ls -l` 中的输出 `d?????????` 是什么意思?

Xav*_*uvw 0 ls permissions directory tree

什么情况下ls -l会返回如下形式的子目录列表?

 d????????? ? ? ? ?       ? Subdirectory
Run Code Online (Sandbox Code Playgroud)

例如,tree在该目录上启动的返回。0 directories, 0 files系统似乎知道子目录的名称,但找不到它。
哪个缺失环节令人困惑ls

迟到的笔记。对于目录,而不是文件,另请参阅:

小智 5

您对包含的目录具有读取权限,但没有执行/搜索权限。

易于重现:

mkdir -p foo/bar; chmod -x foo; ls -l foo
ls: cannot access 'foo/bar': Permission denied
total 0
d????????? ? ? ? ?            ? bar
Run Code Online (Sandbox Code Playgroud)

在 Linux 和 BSD 上,ls能够从目录条目d_type字段得知它是一个目录,但仅此而已。

这也可能发生在其他情况下,即ls无法访问实际的索引节点,而只能访问指向它的目录条目(例如当文件或目录索引节点在能够访问ls它之前已经消失时stat()- 请参阅,或者当它是无法访问的安装点 - 请参阅)。