当目录权限为 r 时,为什么不带 -l 的 ls 返回 1--

Dav*_*hen 6 ls permissions directory

我已经阅读了thisthis,发现我的问题不同而且更具体。

我明白以下几点。

  • 目录上的 +x 授予通过此特定目录访问文件 inode 的权限
  • 使用的文件的元信息ls -l存储在其 i-node 中,但文件名不属于该 i-node

从2点上方,因为ls没有-l不需要访问该目录中的文件的i节点,它应该成功列出文件名,并返回0。

然而,当我尝试了我的机器上,文件名都列出来,但也有像一些警告permission denied,并返回代码为1。

b03705028@linux7 [~/test] chmod 500 permission/
b03705028@linux7 [~/test] ls --color=no permission/
f1*
b03705028@linux7 [~/test] chmod 400 permission/
b03705028@linux7 [~/test] ls --color=no permission/
ls: ???? 'permission/f1': ?????????
f1
b03705028@linux7 [~/test] echo $0
bash
Run Code Online (Sandbox Code Playgroud)

汉字基本上是讲的 permission denied

我的unix发行版是 Linux 4.17.11-arch1

Ste*_*itt 8

我怀疑ls在你的情况下是类似的别名ls --color=auto;在这种情况下,会ls尝试查找有关目录中包含的文件的信息,以确定要使用的颜色。

ls --color=no
Run Code Online (Sandbox Code Playgroud)

应列出目录,而不抱怨。

如果它仍然抱怨,那么您可能正在使用另一个选项,例如-F--classify,需要访问文件元数据(例如-F/--classify查看文件类型)。

为确保您在ls不通过别名的情况下运行,请使用以下任一方法

command ls
Run Code Online (Sandbox Code Playgroud)

或者

\ls
Run Code Online (Sandbox Code Playgroud)

要删除 的别名ls,请使用

unalias ls
Run Code Online (Sandbox Code Playgroud)

  • @DavidChen 不是,如果你把它放在你的`~/.bashrc` 文件中。 (2认同)