Ale*_*x B 11 linux permissions
如果目录“foo”归用户A所有,并且包含一个归root所有的目录“bar”,用户A可以简单地用 删除它rmdir,这是合乎逻辑的,因为用户A可以写“foo”。
但是如果目录“bar”包含另一个根拥有的文件,则无法删除该目录,因为必须先删除其中的文件,因此它变为空。但是“bar”本身是不可写的,因此无法删除其中的文件。
有办法解决吗?或者,说服我否则为什么有必要。
解释1:目录是文件系统的子空间。通过在其中创建子目录,它可以进一步细分为子子空间。该目录的所有者foo应该拥有控制权的子空间内的一切:foo/bar,foo/bar/qux,等。
解释2:目录是文件系统的子空间。每个目录都附加到某个其他目录,称为其父目录。目录的所有者foo可以控制子空间内的一切;但是,对于子目录foo/bar,其所有者foo可以控制是否bar可以附加到其中的内容,foo但不能控制其中的内容bar:只有所有者bar可以控制它。
支持解释 2 的证据:正如您所指出的,权限的工作方式。此外,一些 Unix 文件系统允许一个目录附加到多个父目录这一事实:这被称为具有多个硬链接。(具有多个硬链接对于常规文件很常见,但通常不鼓励或禁止目录使用,主要是因为存在创建循环的风险,其中一个目录是它自己的祖父 N 次删除 - 因此您无法从根目录访问它目录,这是一个非常普遍的期望。还有一个问题,如果目录有 0 个硬链接但不为空,该怎么办:由于目录未附加,您想删除它,但是您如何处理它内容?)
支持解释 1 的证据:实际上,目录确实只有一个父目录,因此形成了树状结构。foo/bar/qux除非您对fooas具有执行权限,否则您无法访问bar(嗯,除了有些模糊的方法可以在bar没有被授予访问权限的情况下获得访问权限foo)。所以上层确实很重要。
在更实际的情况下,在您的情况下,用户 A 可以做
mkdir 垃圾 mv foo/酒吧垃圾/ rmdir foo