技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> 其实,文件也可以truncate

其实,文件也可以truncate

浏览:7406次  出处信息

熟悉数据库的朋友们都知道,大多数数据库都有个truncate指令:truncate table xxx可以把xxx表里的所有数据都删掉,但是保留表结构。其实,在有任何数据库之前,UNIX系统里就有了truncate这个命令了,当然后面的*nix里都保留了这个。可以想像,系统里的truncate命令的操作对象肯定是文件,而且此命令不仅能把文件的数据删成0字节,还可以缩减(甚至扩大)文件至指定的大小(通过 -s 选项指定文件大小值),这对于那种日志头部有些不想删除的关键信息,但后面的部分又很多很杂的情况下很有用。对于普通的日志文件,我们要清理的时候通常可以执行 > log 来清除文件的内容(这样,log文件会变成0字节),但是如果清理的同时想保留原始日志的前面4K的信息,不用truncate就会很麻烦了。

truncate的用法还是通过实战来解释吧,如下:

以下是引用片段:
lily@LLY ~$ echo -n 1234567 > txt
lily@LLY ~$ cat txt
1234567lily@LLY ~$ 
lily@LLY ~$ truncate -s 4 txt
lily@LLY ~$ cat txt
1234lily@LLY ~$ 
lily@LLY ~$ ls -l txt
-rw-r--r-- 1 lily lily 4 10月 24 16:54 txt
lily@LLY ~$ truncate -s 1M txt
lily@LLY ~$ ls -l txt
-rw-r--r-- 1 lily lily 1048576 10月 24 17:17 txt
lily@LLY ~$ du txt
4    txt
lily@LLY ~$ wc -c txt
1048576 txt
 
这里还可以看到一个“奇怪”的现象,本来已经缩至4字节的文件,把它扩展成1M以后,ls 和 wc 的结果显示大小确实是1M,但是 du 的结果却发现大小还是4字节。这也是要注意的地方之一,这种文件称为“空洞文件”,也就是说,文件的部分内容并没有实际存在于硬盘上(即没有分配对应的inode),只是“声称”有1M的大小而已。对于不存在于硬盘上的那部分字节,如果去读的话,也是不会报错的,会读到全0的数据。

这也从另一个方面反映出ls等命令默认显示的是文件“声称”的大小,而du (disk use)默认显示的是真正的磁盘占用。这里是我以前的另外一个例子。

建议继续学习:

  1. 海量小文件存储    (阅读:7566)
  2. 关于Linux的文件系统cache    (阅读:4800)
  3. Linux find命令的速度    (阅读:4749)
  4. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4445)
  5. 修改系统最大文件句柄数    (阅读:4287)
  6. PHP:从一个大文件第N行开始读取M行    (阅读:3950)
  7. C/C++循环获取文件中的每行数据(别以为很简单!)    (阅读:3885)
  8. linux file命令是如何识别文件的类型的    (阅读:3951)
  9. 打开多个文件:linux ulimit max open files    (阅读:3556)
  10. shell文件存在相关判断参数    (阅读:3556)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Linux Hugepages
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1