我一直很好奇为什么删除目录中所有内容的命令是rm -rf。
为什么没有标志可以做同样的事情rmdir?
使用rmdir目录操作会更直观吗?
我一直很好奇为什么删除目录中所有内容的命令是rm -rf。
为什么没有标志可以做同样的事情rmdir?
使用rmdir目录操作会更直观吗?
Answers:
在早期的Unix File System(至少在1970年左右的V7年代)中,目录是作为特殊文件实现的,只有root可以使用mknod(2)创建它们的系统调用,而只有root可以unlink(2)使用目录特殊文件。
采取这些保护措施是为了保持文件系统结构的一致性。例如,如果允许用户写入目录特殊文件,则他可以使其父目录..指向自身(特别是其自身的i节点)。这将在文件系统中创建循环引用,这将是一件坏事。当然,还有其他可能导致的不一致之处,这只是一个明显的例子。
一致性是通过如用户空间程序维护mkdir(1)和rmdir(1)其设定-UID根,这样他们可以使代表的非特权用户的特权系统调用。将递归添加到时rm(1),remove命令将作为当前UID运行,然后rmdir(1)仅调用来删除空目录。这仍然是提升权限的非常标准的方法:不要使用超出您需要的权限。
一段时间后mkdir(2),并rmdir(2)添加他们自己的系统调用,但之间的关系rm(1)和rmdir(1)遗迹。
就个人而言,我觉得这更令人满意,rmdir junk并且知道我做的最糟糕的事情是删除一个空目录。
rmdir,它仍然需要一个-r标志。(rmdir -r junk而不是rm -r junk,并且rmdir junk仅在目录为空时仍然有效)
这是历史。 rm旨在删除对文件的引用,rmdir旨在删除与平行的目录mkdir。许多年前,Unix rm只能通过调用来删除目录rmdir。也没有rmdir(2)系统调用,rmdir是一个名为的程序unlink(2)。
参考文献:
纯粹出于意见考虑,但是rm在rmdir删除目录的同时删除文件。目录是文件,但是是一种特殊的文件,因此rm删除它们是有意义的,但是要对其进行特殊处理(即,需要一个额外的选项来启用该功能。)另一方面,并非所有文件都是目录,恕我直言,rmdir删除不是目录的内容毫无意义。
rm删除一个空目录(递归模式除外)?
-r标志来启用目录特殊文件功能。
rmdir删除目录,rm删除。为什么rmdir删除非目录很直观?