为什么是 rm -rf 而不是 rmdir -rf

为什么是 rm -rf 而不是 rmdir -rf

我一直很好奇为什么删除目录中所有内容的命令是rm -rf.

为什么没有标志可以做同样的事情rmdir

rmdir用于目录操作不是更直观吗?

答案1

在早期的 Unix 文件系统中(至少在 1970 年左右的 V7 时代),目录被实现为特殊文件,只有 root 可以使用mknod(2)创建它们的系统调用,并且只有 root 可以unlink(2)创建目录特殊文件。

采取这些保护措施是为了保持文件系统结构的一致性。例如,如果允许用户写入目录特殊文件,他可以使其父目录..指向自身(特别是其自己的 i 节点)。这将在文件系统中创建循环引用,这将是一件坏事。当然,还可能出现其他不一致的情况,这只是一个明显的例子。

一致性由用户空间程序(例如Set-UID rootmkdir(1)和 )来维护rmdir(1),以便它们可以代表非特权用户进行特权系统调用。当递归添加到 时rm(1),remove 命令将以当前 UID 运行,然后rmdir(1)仅调用 来删除空目录。这仍然是一种相当标准的权限提升方法:不要使用超出您需要的权限。

一段时间后,mkdir(2)和被添加为它们自己的系统调用,但和rmdir(2)之间的关系仍然存在。rm(1)rmdir(1)

就我个人而言,我发现更令人满意的是,rmdir junk并且知道我所做的最糟糕的事情就是删除一个空目录。

答案2

这是历史性的。 rm是为了删除对文件的引用,rmdir是为了删除目录,与mkdir.许多年前,Unixrm只能通过调用rmdir.也没有rmdir(2)系统调用,rmdir而是一个调用unlink(2).

参考:

答案3

纯粹是意见问题,但在删除目录rm的同时删除文件rmdir。目录是一个文件,但是一种特殊类型的文件,因此rm删除它们是有意义的,但要特殊对待它们(即需要额外的选项来启用该功能。)另一方面,并​​非所有文件都是目录,恕我直言,rmdir删除不是目录的东西是没有意义的。

相关内容