$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
两者都是相同基本功能的包装器,即
unlink()
系统调用。权衡用户空间实用程序之间的差异。
rm(1)
:unlink(1)
:rm(1)
与给出多个参数相比,速度较慢。您可以通过以下方式证明差异:
但是,如果我们谈论的是对系统
unlink(2)
函数的纯粹调用,我现在意识到这可能不是您要考虑的。unlink()
您可以在目录和文件上执行系统。但是,如果该目录是其他目录和文件的父目录,则到该父目录的链接将被删除,但子目录将悬空。这不太理想。编辑:
unlink(1)
抱歉,澄清了和之间的区别unlink(2)
。平台之间的语义仍然会有所不同。在 POSIX 规范级别,rm所做的比unlink所做的要严格得多。
如果您的脚本必须跨操作系统运行,那么使用 rm 的结果的可移植性可能会更好。
删除的缓慢部分是文件系统代码和磁盘内容,而不是 unlink() 系统调用的用户空间准备。
即:如果速度差异很重要,那么您不应该将数据存储在文件系统上。
unlink 只是一个 rm“灯”。rm 具有更多功能,但它们做同样的事情。