unlink和rm有什么区别?

取消任何比rm更快的链接?

两者都是一个unlink()系统调用的基本函数的包装。

衡量用户空间使用率之间的差异。

rm(1)

  • 更多的select。
  • 更多的反馈。
  • 完整性检查。
  • 由于上述情况,对于单个呼叫有点慢。
  • 可以同时调用多个参数。

unlink(1)

  • 不太理智的检查。
  • 无法删除目录。
  • 无法recursion。
  • 一次只能有一个参数。
  • 由于简单性,可以略微精简单个呼叫。
  • 与给rm(1)多个参数相比,速度较慢。

你可以用下面的方法来certificate它的区别

 $ 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 

但是,如果我们正在谈论一个对系统unreadulterated调用unlink(2)函数,我现在意识到可能不是你所考虑的。

你可以在目录和文件上执行unlink()系统。 但是,如果该目录是其他目录和文件的父目录,那么与该父目录的链接将被删除,但这些子目录将被留下。 这是不理想的。

编辑:

对不起,澄清unlink(1)unlink(2)之间的区别。 平台之间的语义仍然有所不同。

删除的缓慢部分是文件系统代码和磁盘的东西,而不是unlink()系统调用的用户空间准备。

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

取消联系只是一个“光”。 RM有更多的function,但他们做同样的事情。

在POSIX规范级别,与rm 链接相比, rm所指定的要紧得多。

如果你的脚本必须跨越操作系统运行,那么使用rm的结果的可移植性似乎会更好。