unlink 和 rm 有什么区别?

unlink 和 rm 有什么区别?

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

在 POSIX 规范级别,R M所做的规定比什么要严格得多解除链接做。

如果您的脚本必须跨操作系统运行,使用 rm 似乎可以获得更好的结果的可移植性。

答案3

删除过程中较慢的部分是文件系统代码和磁盘内容,而不是 unlink() 系统调用的用户空间准备。

即:如果速度差异很重要,那么您不应该将数据存储在文件系统上。

unlink 只是一个 rm“轻量版”。rm 具有更多功能,但它们的作用相同。

相关内容