即使它有效,“ls”也会给出“权限被拒绝”错误?

即使它有效,“ls”也会给出“权限被拒绝”错误?

我有一个具有权限位的目录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对目录的访问 () 权限,就像实际打开文件所需的方式一样。而你没有那个。

相关内容