Chinaunix

标题: 为什么 ls -l 命令列出的文件大小与真实大小不一致 [打印本页]

作者: _LoveLinux    时间: 2008-09-08 16:01
标题: 为什么 ls -l 命令列出的文件大小与真实大小不一致
为什么 ls -l 命令列出的文件大小与真实大小不一致
作者: CloudF_N    时间: 2008-09-08 16:04
硬盘以block为单位存储数据
即使1byte的内容,也至少占据1 block大小

这个很基础。。。
作者: honckly    时间: 2008-09-08 16:12
不足4k (4096)按4k算
作者: _LoveLinux    时间: 2008-09-08 16:20
有没有方法可以在命令下查看文件真实的大小?
作者: CloudF_N    时间: 2008-09-08 16:22
stat [filename]


[root@linux /]# stat /var/log/messages
  File: `/var/log/messages'
  Size: 116739          Blocks: 240        IO Block: 4096   regular file
Device: 1606h/5638d     Inode: 80102       Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2008-09-08 09:46:34.000000000 +0800
Modify: 2008-09-08 16:20:01.000000000 +0800
Change: 2008-09-08 16:20:01.000000000 +0800
作者: meiki05    时间: 2008-09-08 16:29
有点晕,你既然不知道真实大小怎么看,
那怎么判断出ls列出的文件大小就不对呢?
什么叫真实大小呢?
作者: keyou    时间: 2008-09-08 16:34
du -H,你自己看吧
作者: _LoveLinux    时间: 2008-09-08 16:36
谢谢大家!我是新手,不好意思!
作者: CloudF_N    时间: 2008-09-08 16:49
更正一下,ls显示的就是实际大小

举个例子:将文本 12345 写入文件 5byte_file (似乎共5字节内容)
[root@linux tmp]# echo 12345 > 5byte_file
用vi建立文件,并写入12345也可

ls -l看到的大小却是6bytes
[root@linux tmp]# ls -l 5byte_file
-rw-r--r--  1 root root 6 Sep  8 16:50 5byte_file

为什么呢?

这是因为我们忽略了换行符(0a)
[root@linux tmp]# hexdump -C 5byte_file
00000000  31 32 33 34 35 0a                                 |12345.|

用wc同样可以查出总共的字符数应该为6,与ls -l的结果相符
[root@linux tmp]# wc -c 5byte_file
6 5byte_file


所以要注意控制字符对文件大小的影响!

[ 本帖最后由 CloudF_N 于 2008-9-8 16:52 编辑 ]
作者: sdu_lizhipeng    时间: 2008-09-08 16:56
似乎APUE有这个问题的一些说明
作者: MMMIX    时间: 2008-09-08 17:14
原帖由 CloudF_N 于 2008-9-8 16:49 发表
更正一下,ls显示的就是实际大小

实际上,ls 列出的结果并不可信,例如说碰到包含空洞的文件。
作者: kerrywu    时间: 2008-09-08 17:16
ls -l 与 stat显示的文件大小是一致的。


原帖由 _LoveLinux 于 2008-9-8 16:01 发表
为什么 ls -l 命令列出的文件大小与真实大小不一致

作者: redsunchina    时间: 2008-09-08 18:23
又不是钞票不要这么小器。。
作者: qzdmail    时间: 2008-09-08 21:37
我用LS -H的....
作者: kme    时间: 2008-09-10 16:40
学习中....
作者: jeanlove    时间: 2008-09-11 13:53
学习了。。。。。。。。。。
作者: 自由建客    时间: 2008-09-11 13:56
原帖由 CloudF_N 于 2008-9-8 16:49 发表
更正一下,ls显示的就是实际大小

举个例子:将文本 12345 写入文件 5byte_file (似乎共5字节内容)
[root@linux tmp]# echo 12345 > 5byte_file
用vi建立文件,并写入12345也可

ls -l看到的大小却是6b ...

'\0'字符你不算了?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2