Linux下快速清空文件的方法

0x00 前言

最近遇到一些问题,都需要一种稳妥的清空文件方法,凭借自己多年摸爬滚打的经验,信手拈来一条命令:

echo "" > my_file

结果,文件大小不是0,而是1
在这里插入图片描述
蛋疼

0x01 清空命令

1. 重定向null到文件里

> my_file

2. 使用ture命令重定向文件

: > my_file
OR 
true > my_file

3. 使用cat/cp/dd命令重定向文件

说道null,少不了/dev/null

cat /dev/null > my_file

或者

cp /dev/null my_file

高端的上dd,直接写入null

dd if=/dev/null of=my_file

4. 使用echo命令重定向文件

echo命令默认会在结尾加一个’\n’换行符,所以前言中提到的bug就是’\n’引起的。老司机会使用 -n 选项去掉换行符。

echo -n "" > my_file

5. 使用truncate命令清空文件

truncate命令可以将文件缩减或扩展至指定大小。

简直就是如意金箍棒,要大就大,要小就小,感觉测试程序的时候估计会用上。比dd简单很多。

-s 选项是指定文件大小,不足用0填充,多余则从末尾删除。这里指定size为0,则是清空文件

truncate -s 0 my_file

0x02 性能对比

使用truncate创建出1T的文件,当然truncate这种是似乎没有磁盘写入操作,只是把文件属性改掉了。

方法 耗时
> my_file 0m0.000s
: > my_file 0m0.000s
cat /dev/null > my_file 0m0.002s
echo -n “” > my_file 0m0.000s
truncate -s 0 my_file 0m0.002s

使用time计时
在这里插入图片描述

当然,这种方法可能不准,仅供参考,有兴趣的同学,可以使用dd创建不同大小文件,然后观察随文件增长方向,不同方法的时间消耗情况。

0x03 参考文献

https://www.tecmint.com/empty-delete-file-content-linux/