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创建不同大小文件,然后观察随文件增长方向,不同方法的时间消耗情况。