以下清空文件的方法有什么区别?



假设要清空的文件名为foo,清空文件的常用方法如下所示。我想知道它们之间的区别,比如性能、系统的I/O压力等等。

#1 also ":>foo" and "true>foo" 
echo > foo
#2
dd if=/dev/null of=foo
#3
cp /dev/null >foo
#4
cat /dev/null >foo
#5
truncate -s 0 foo

如果不依赖于您使用的操作系统、您拥有的shell和各种实用程序的实现等,那么很难对此进行详细说明。也就是说,对于shell脚本来说,分支子进程通常是一种速度较慢/计算成本较高的事情,因此,如果您希望优化性能,您应该尽量减少脚本创建的进程数量。

在此基础上,: >footrue >foo可能是最好的选择,因为POSIX标准要求shell将它们作为内置实现,这意味着shell将"执行"。

许多shell也实现echo作为一个内置,但这实际上并不清空文件,它写一个换行符到它。

列表中的所有其他命令通常都是外部的,因此它们需要一个昂贵的进程分支。这样做的计算费用可能会使文件的I/O操作相形见绌。

(哦,cat /dev/null foo应该是cat /dev/null >foo)

相关内容

  • 没有找到相关文章

最新更新