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

kou*_*shk 14 shell directory files

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

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

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

msw*_*msw 26

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

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

一致性是通过如用户空间程序维护mkdir(1)rmdir(1)其设定-UID根,这样他们可以使代表的非特权用户的特权系统调用。当递归被添加到 时rm(1),remove 命令将作为当前 UID 运行,然后调用 tormdir(1)仅用于删除空目录。这仍然是一种非常标准的权限提升方法:不要使用超出您需要的权限。

一段时间后mkdir(2),并rmdir(2)添加他们自己的系统调用,但之间的关系rm(1)rmdir(1)遗迹。

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


Dei*_*ick 7

这是历史性的。 rm被用来删除对文件的引用,rmdir被用来删除目录,与mkdir. 许多年前,Unixrm只能通过调用rmdir. 此外,还没有一个rmdir(2)系统调用,rmdir是一个程序叫unlink(2)

参考:


Dar*_*rax 2

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