我每天都使用 BSD 和 Linux,我从来没有遇到过必须使用 rmdir(1) 而不是 rm(1) 的情况。rmdir 存在的目的是什么?
Jon*_*ler 27
主要原因可能是历史原因。回到过去,没有rmdir(2)和mkdir(2)系统调用(我们在这里讨论第 7 版 UNIX™),并且rmdir(1)是(必然)使用unlink(2)系统调用删除目录的 SUID 根程序。
第 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)所做的事情似乎是合理的。此外,它们(现在)是 thermdir(2)和mkdir(2)系统调用的简单执行器——是的,在第 7 版 UNIX 中,mkdir(1)它也是一个 SUID 根程序,使用mknod(2)调用创建目录节点并link(2)调用在目录中创建.和..条目.
“rm”不适用于目录。您必须使用 rmdir 或指定 -r 开关以进行递归删除。原因是历史的:unlink和rmdir是独立的系统调用,并已经从Unix的初期阶段。
| 归档时间: |
|
| 查看次数: |
7380 次 |
| 最近记录: |