在没有设置“x”执行位的情况下读取目录内容

在没有设置“x”执行位的情况下读取目录内容

我已经删除了目录上其他人的“x”执行权限和写入权限 /u/permtst/测试/位/。该目录详细信息是用户:permtst 和组:permtst。

permtst@localhost(nyc):~/test/bits> ls -la
total 8
drwxrw-r-- 2 permtst permtst 4096 Aug  3 12:51 .
drwxrwsr-x 8 permtst permtst 4096 Aug  3 11:52 ..
-rw-rw-r-- 1 permtst permtst    0 Aug  3 11:56 test_file
-rw-rw-r-- 1 permtst permtst    0 Aug  3 11:56 test_file2

用户莫塔马里不属于许可测试团体。

自从其他的具有读取权限,目录上的 ls 应该给出目录中的文件列表。但是,如果您看到下面的内容,它会打印没有访问权限,并且还会按预期打印文件列表。

我的问题是为什么它打印错误ls: cannot access '/u/permtst/test/bits/test_file': Permission denied

motamari@localhost:~% ls /u/permtst/test/bits/
ls: cannot access '/u/permtst/test/bits/test_file': Permission denied
ls: cannot access '/u/permtst/test/bits/test_file2': Permission denied
test_file  test_file2

答案1

如果目录上r没有x,您确实可以列出其中的文件名,但您无法获取有关文件的任何其他信息,因为您无法调用stat()它们(*)。

-F如果它以要求它确定文件类型的选项启动,即使对于简短的列表,例如或--color,错误消息和行为也正是 GNU ls 显示的内容。您可能已经ls为带有选项的东西添加了别名,请检查alias ls.如果使用\ls, 或运行程序,则可以绕过别名/bin/ls。使用-l,您还会得到一排看起来非常令人困惑的问号。

$ mkdir dir; touch dir/file.txt; chmod a-x dir;
$ ls dir
ls: cannot access 'dir/file.txt': Permission denied
file.txt
$ \ls dir
file.txt
$ ls -l dir
ls: cannot access 'dir/file.txt': Permission denied
total 0
-????????? ? ? ? ?            ? file.txt
$ alias ls
alias ls='ls -vF --color=auto'

不过,行为取决于ls实现,例如 Busybox 只是在错误上发出嘎嘎声,并且没有抽出时间打印列表(我什至没有在此处使用-F--color):

$ busybox ls dir
ls: dir/file.txt: Permission denied

(*虽然有些系统也提供了文件类型readdir()。我不确定为什么这ls在这里还不够。)

相关内容