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

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

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

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

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

答案1

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

如果没有目录的执行权限,您就无法统计、打开、重命名、删除或进入该目录内的子目录。您唯一能做的就是查看存在哪些文件名的列表,而且只有当您有读取权限时才能查看(对于目录来说,读取但不能执行是一组奇怪的权限)。

考虑一下,如果你有rw-一个目录。你知道文件名foo存在于此目录中。为了删除它,你需要查找它,甚至需要访问 inode(以减少其链接数)。就此而言,你需要访问 inode 才能判断它是否是目录(因为如果它是一个目录,则unlink应该失败,rmdir如果它不是目录,则应该成功,反之亦然)。但你无法查找它。

答案2

电视执行位允许受影响的用户进入并访问和更改文件和目录的属性以及里面的目录。执行其他文件系统 Linux 命令的权限可能需要在子目录和文件上“执行”,由“执行位”决定。不要与执行可执行文件混淆,这意味着您已授予“执行决策”权限来编辑与文件名和符号链接相关的 inode 文件编号或元数据的链接。

功能变化包括禁用写入的情况下执行。这意味着您可以重命名文件但不能编辑内容。或者启用写入但禁用执行,反之亦然。

“每个磁盘驱动器都包含一定数量的文件系统。文件系统由多个磁柱组组成。每个磁柱组都有索引节点和数据。

 A file system is described by its super-block, which in turn describes
 the cylinder groups.  The super-block is critical data and is replicated
 in each cylinder group to protect against catastrophic loss.  This is
 done at file system creation time and the critical super-block data does
 not change, so the copies need not be referenced further unless disaster
 strikes.

 Addresses stored in inodes are capable of addressing fragments of
 `blocks'. File system blocks of at most size MAXBSIZE can be optionally
 broken into 2, 4, or 8 pieces, each of which is addressable; these pieces
 may be DEV_BSIZE, or some multiple of a DEV_BSIZE unit."

其他有趣的细节; http://linux.about.com/library/cmd/blcmdl2_stat.htm

“如果您对目录有执行权限(但没有写入权限),并且对目录中的文件有写入权限,则您无法删除该文件(因为这涉及将其从列表中删除)。但是,您可以删除其内容,例如,如果它是文本文件,您可以使用 vi 打开它并删除所有内容。该文件仍会存在,但它是空的。”...Baldrick

stat -f "%Sp ->owner=%SHp group=%SMp other=%SLp" 显示 ACL 统计信息

相关内容