免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3300 | 回复: 16
打印 上一主题 下一主题

为什么 ls -l 命令列出的文件大小与真实大小不一致 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-08 16:01 |只看该作者 |倒序浏览
为什么 ls -l 命令列出的文件大小与真实大小不一致

论坛徽章:
0
2 [报告]
发表于 2008-09-08 16:04 |只看该作者
硬盘以block为单位存储数据
即使1byte的内容,也至少占据1 block大小

这个很基础。。。

论坛徽章:
0
3 [报告]
发表于 2008-09-08 16:12 |只看该作者
不足4k (4096)按4k算

论坛徽章:
0
4 [报告]
发表于 2008-09-08 16:20 |只看该作者
有没有方法可以在命令下查看文件真实的大小?

论坛徽章:
0
5 [报告]
发表于 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

论坛徽章:
0
6 [报告]
发表于 2008-09-08 16:29 |只看该作者
有点晕,你既然不知道真实大小怎么看,
那怎么判断出ls列出的文件大小就不对呢?
什么叫真实大小呢?

论坛徽章:
0
7 [报告]
发表于 2008-09-08 16:34 |只看该作者
du -H,你自己看吧

论坛徽章:
0
8 [报告]
发表于 2008-09-08 16:36 |只看该作者
谢谢大家!我是新手,不好意思!

论坛徽章:
0
9 [报告]
发表于 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 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-09-08 16:56 |只看该作者
似乎APUE有这个问题的一些说明
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP