我有一个具有权限位的目录r
:
dr-------- 3 robert robert 4096 2017-12-17 03:47 dir
该目录有两个文件和一个目录:
file 1.txt file 2.txt subdir
ls dir
当我(从帐户)运行命令时robert
,我在目录内容旁边收到错误消息:
ls: cannot access dir/file 1.txt: Permission denied
ls: cannot access dir/file 2.txt: Permission denied
ls: cannot access dir/subdir: Permission denied
file 1.txt file 2.txt subdir
为什么ls
可以正常显示目录内容却显示错误?
答案1
ls
对目录本身调用readdir()
(或getdents()
),这相当于“读取”目录。我认为某些 Unix 将其实现为对 的实际调用read()
,就好像目录是一个文件一样。这是可行的,因为您具有该目录的读取权限,但它只提供了文件的名称。
除此之外,ls
经常想要查找文件的类型(用不同的颜色显示不同的类型,或者将尾部斜杠和星号等放在ls -F
)。但查找类型通常需要调用stat()
文件本身,并且需要+x
对目录的访问 () 权限,就像实际打开文件所需的方式一样。而你没有那个。