最近学习linux遇到一个问题,就是ls和du命令读取到的大小不一样,找到一篇写得不错的文章,特地转一下
du == disk usage (磁盘使用量,占用的磁盘空间)
du 的基本使用
du -s
如 du -skh web
-k或--kilobytes 以1024 bytes为单位。
-h或--human-readable 以K,M,G为单位,提高信息的可读性
-s或--summarize 统计目录或文件
一个文件占用的磁盘空间和一个文件的大小是两码事情。占用空间取决于文件系统的块(block)的大小,linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k,如果你创建文件系统的时候制定块大小是16K,那么即便一个文件只有1个字节,占用空间也是16K。
如果一个分区上主要放大文件,那么block可以大一些,有利于减少磁盘碎片,如果主要放小文件,那么block设置小一下,否则太浪费磁盘空间。
通常情况下,ls 显示的文件大小比du显示的磁盘占用空间小
原因:
如果一个文件有比较大的黑洞,那么会出现文件大小比磁盘空间占用大的情况
原因:
生成黑洞文件的示例代码temp.c:
#include
#include
#include
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
void err_sys(char *msg){
}
int main(void){
}
$gcc temp.c
$./a.out
$od -c file.hole
0000000
0000020
*
0040000
0040012
$du -sh file.hole
8.0K
$ls -al
drwxr-xr-x 2 root root
drwxr-xr-x 8 root root
-rwxr-xr-x 1 root root
-rw-r--r-- 1 root root 16394 Apr 15 20:20 file.hole
-rw-r--r-- 1 root root
原帖地址http://blog.sina.com.cn/s/blog_5ed38ed701017jfc.html