为什么 rmdir 不能递归工作?

Jos*_*Fox 17 shell directory rm

rmdir仅删除一个空目录。rm -rf使用递归删除。

  • 为什么没有rmdir递归选项?从逻辑上讲,当我删除目录时,我想使用rmdir.
  • 鉴于rm除了最简单的情况外,它都用于删除目录,为什么它rmdir存在呢?该功能包含在rm.

这只是历史的偶然吗?

Ste*_*itt 35

取消链接目录最初是一项特权操作

\n
\n

取消目录链接也是非法的(超级用户除外)。

\n
\n

因此rmdir被实现为一个小型二进制文件,仅删除了directories,当时涉及删除目录内部的..和,然后是目录本身。被设计为 setuid root;它执行单独的权限测试,以确定是否允许真实用户删除目录。与任何 setuid root 二进制文件一样,\xe2\x80\x99 最好保持简单且集中。.rmdiraccess

\n

rm -r实际上使用这个单独的二进制文件来根据需要删除目录。

\n

rm -r和 之间似乎存在持久的差异rmdir之间的持久差异是这种最初差异的结果。

\n

大概是因为rm很早就获得了递归删除的能力,并且rmdir应该有一个非常小的职权范围,所以从来没有被认为是有用的rmdir递归删除的能力本身是有用的。

\n

  • 另外,如果你的脚本要删除一个目录,如果目录不为空,`rm -rf` 不会抱怨,而 `rmdir` 会抱怨。这对于用户来说可能很重要。 (4认同)