其实,文件也可以truncate
浏览:7399次 出处信息
熟悉数据库的朋友们都知道,大多数数据库都有个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)默认显示的是真正的磁盘占用。这里是我以前的另外一个例子。
建议继续学习:
- 海量小文件存储 (阅读:7558)
- 关于Linux的文件系统cache (阅读:4792)
- Linux find命令的速度 (阅读:4743)
- Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (阅读:4439)
- 修改系统最大文件句柄数 (阅读:4279)
- PHP:从一个大文件第N行开始读取M行 (阅读:3941)
- C/C++循环获取文件中的每行数据(别以为很简单!) (阅读:3879)
- linux file命令是如何识别文件的类型的 (阅读:3937)
- 打开多个文件:linux ulimit max open files (阅读:3556)
- shell文件存在相关判断参数 (阅读:3555)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Linux Hugepages
后一篇:防止VIM粘贴数据时断行 >>
文章信息
- 作者:bones7456 来源: I am LAZY bones ?
- 标签: du ls truncate 文件
- 发布时间:2010-10-24 19:32:53
建议继续学习
近3天十大热文
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑