unlink 比 rm 快吗?
答案1
两者都是同一基本函数(即unlink()
系统调用)的包装器。
权衡用户空间实用程序之间的差异。
rm(1)
:
- 更多的选择。
- 更多反馈。
- 健全性检查。
- 由于上述原因,单次调用的速度会稍微慢一些。
- 可以同时使用多个参数进行调用。
unlink(1)
:
- 减少健全性检查。
- 无法删除目录。
- 无法递归。
- 每次只能接受一个参数。
- 由于其简单性,单次呼叫略微精简。
- 与提供
rm(1)
多个参数相比速度较慢。
你可以通过以下方式展示差异:
$ 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(2)
函数调用,我现在意识到这可能不是你考虑到的。
您可以对目录和文件执行系统操作unlink()
。但如果目录是其他目录和文件的父级,那么指向该父级的链接将被删除,但子级将悬而未决。这并不理想。
编辑:
unlink(1)
抱歉,澄清了和之间的区别unlink(2)
。不同平台之间的语义仍然会有所不同。
答案2
答案3
删除过程中较慢的部分是文件系统代码和磁盘内容,而不是 unlink() 系统调用的用户空间准备。
即:如果速度差异很重要,那么您不应该将数据存储在文件系统上。
unlink 只是一个 rm“轻量版”。rm 具有更多功能,但它们的作用相同。