我创建了一个名为 的目录folder
并取消了执行权限。
$ mkdir folder
$ touch folder/innerFile
$ mkdir folder/innerFolder
$ chmod -x folder
现在如果我这样做
$ ls folder
它输出一个文件列表,但是当我这样做时
$ ls -l folder
我明白了
ls: innerFile: Permission denied
ls: innerFolder: Permission denied
这是为什么?
答案1
ls -l
在文件夹上尝试stat
它的内容,而ls
没有:
$ strace ls folder -l
...
lstat("folder/innerFolder", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
getxattr("folder/innerFolder", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFolder", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
lstat("folder/innerFile", {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
getxattr("folder/innerFile", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFile", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
...
这就是为什么您会得到“权限被拒绝”ls -l
而不是 的原因ls
。