如何删除 Linux 中不属于用户的非空目录?

Ale*_*x B 11 linux permissions

如果目录“foo”归用户A所有,并且包含一个归root所有的目录“bar”,用户A可以简单地用 删除它rmdir,这是合乎逻辑的,因为用户A可以写“foo”。

但是如果目录“bar”包含另一个根拥有的文件,则无法删除该目录,因为必须先删除其中的文件,因此它变为空。但是“bar”本身是不可写的,因此无法删除其中的文件。

有办法解决吗?或者,说服我否则为什么有必要。

Gil*_*il' 7

解释1:目录是文件系统的子空间。通过在其中创建子目录,它可以进一步细分为子子空间。该目录的所有者foo应该拥有控制权的子空间内的一切:foo/barfoo/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

  • 这是一个很好的答案(推荐),但明显的不一致仍然让我感到沮丧。虽然将 bar 移动到垃圾的实际示例确实有效,但我们留下了一个无法删除的名为垃圾的目录。我遇到了同样的问题,除了它是用户 A 和用户 B,其中 B 在 A 拥有的目录中卡住了一些东西,A 想要删除该目录。 (2认同)