Answers:
主要原因可能是历史原因。在过去,没有rmdir(2)
和mkdir(2)
系统调用(我们在这里讨论第七版UNIX™),并且rmdir(1)
(必然)是一个SUID根程序,它使用unlink(2)
系统调用删除目录。
可以从以下网站在线获得第7版UNIX手册:http://cm.bell-labs.com/7thEdMan(上次检查日期为2017-04-23);它们也可以从http://plan9.bell-labs.com/7thEdMan获得(最新检查于2017-04-23)。对于第2卷中的文章,似乎至少还有一个在线替代资源-http : //wolfram.schneider.org/bsd/7thEdManVol2/-在第1卷中有指向FreeBSD站点的命令和系统调用的链接。 。
该rm
命令(常规的非SUID程序)调用该rmdir(1)
命令以删除空目录。它本身不能这样做。需要root权限。因此,该rmdir(1)
命令(在Unix V7中为源代码,请参见此处)用于删除空目录,而该rm
命令本身并未删除空目录。
要使用rm
删除目录,您必须提供-r
选项。
还有一个对称性的论点。您需要一个命令mkdir(1)
来创建目录。发出命令rmdir(1)
撤消已执行的操作似乎是合理的mkdir(1)
。另外,它们(现在)是the rmdir(2)
和mkdir(2)
system调用的简单执行器—是的,在第7版UNIX中,mkdir(1)
它也是SUID根程序,使用该mknod(2)
调用创建目录节点,并使用该调用在目录link(2)
中创建.
和..
条目。 。
fsck(1)
是幸存的那个。
“ rm”不适用于目录。您必须使用rmdir或指定-r开关以进行递归删除。原因是历史性的:unlink
并且rmdir
是单独的系统调用,并且起源于Unix的早期。
rmdir(2)
没有mkdir(2)
系统调用,也没有系统调用。用户root
可以使用该mknod(2)
调用创建目录节点,并使用该调用在目录link(2)
中创建.
和..
条目;并root
可以使用该unlink(2)
调用删除目录条目。