我已经删除了目录上其他人的“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
在这里还不够。)