为什么重命名文件需要父目录的执行权限

Fla*_*ien 6 linux filesystems acl file-permissions

在 Linux/Unix 文件系统上,我理解为什么您需要父文件夹的执行权限来读取或写入文件:执行权限使您可以访问文件上的 inode,没有它,您将永远无法访问文件的内容。

但是,对于重命名文件(实际上,甚至是删除),您只需要更改列表中文件的名称,这不需要访问 inode。那么为什么重命名文件需要执行位,写权限就足够了?

这似乎与读取访问不对称:使用r--权限,您可以ls在目录上执行操作并访问该目录中的文件名列表。您不需要执行,因为您没有访问 inode。同样,使用-w-,您应该能够更改文件名列表(您也不需要访问 inode),但您不能,为什么?

Cel*_*ada 5

目录执行权限的含义是能够在该目录中查找文件名。当然,成功查找文件名会产生对 inode 编号的引用,但执行权限与 inode 本身无关。

没有目录的执行权限,您不能统计、打开、重命名、删除或下降到该目录内的子目录。您唯一能做的就是查看存在哪些文件名的列表,然后仅当您具有读取权限(读取但不执行是目录的一组奇怪权限)。

考虑您是否rw-在目录上。您知道foo该目录中存在文件名。为了删除它,您需要查找它,您甚至需要访问 inode(以减少其链接数)。就此而言,您需要访问 inode 以判断它是否是目录(因为如果它是目录,则unlink应该失败并rmdir应该成功,如果它不是目录,则相反)。但是你查不出来。