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)调用删除目录条目。