写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/8744532.html

  

  考虑如下Linux I/O代码:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#define SSIZE_MAX 2048int main (int argc, char **argv)
{int  fd              = 0;int  fd1             = 0;//char str[]           = "0123456789";char str[10];str[0]='a';str[8]='b';str[9]='\0';for(fd1=1;fd1<=7;fd1++){str[fd1]=' ';}int  len = 0;char buf[SSIZE_MAX];/*buf[0]='a';buf[10]='c';buf[1024]='b';  */fd = open("test.txt", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);write(fd, str, strlen(str));write(fd, buf, SSIZE_MAX);close(fd);
}

  很简单的代码:先构建输入输出流,再向指定的txt文件里面写入字符。先写入a、7个空格、b(共计9个字节);再写入2048个空字符;共计2057个字节。

  上面是还没编译运行时的情况;下面是编译运行之后的情况:

  然后使用ls命令查看发现编译运行后生成了.out的可执行文件和代码生成的输入文件test.txt,并且可以知道test.txt的文件大小就是我分析出来的,共计2057个字节。

  可以查看txt文件的内容(红色字体是linux系统下显示的空字符):

  现在我改为使用du命令去查看文件test.txt的大小,发现本应该是2057字节的,结果却变成了4.0KB:

  

那么,为什么会出现这样的情况呢?这就要讨论一下ls和du两个命令实现的机制了:

  du == disk usage (磁盘使用量,占用的磁盘空间)
  ls == apparent sizes(文件长度,file数据结构中定义的文件长度字段)
  一个文件占用的磁盘空间和一个文件的大小是两码事情。占用磁盘空间取决于文件系统的块(block)的大小,Linux一般默认是4k(4096B) ,因此,一个大小为1个字节的文件,最小也要占用4k,如果你创建文件系统的时候制定块大小是16K,那么即便一个文件只有1个字节,占用空间也是16K。
  通常情况下,ls显示的文件大小比du显示的磁盘占用空间小,比如文件系统的block是4K,一个13K的文件占用的空间是 13k/4k = 3.25 个block,一个block只能被一个文件占用,因此实际占用空间就是4个block,就是16K。

  

补充:

1、ls的用法

ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(Linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
ls -s 在每个文件的后面打印出文件的大小。size(大小)。
ls -t 按时间进行文件的排序  Time(时间)
ls -A 列出除了"."和".."以外的文件。
ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
ls -L 列出文件的链接名。Link(链接)
ls -S 以文件的大小进行排序

2、du的用法

du命令用来查看目录或文件所占用磁盘空间的大小。常用选项组合为:du -sh
du常用的选项:
   -h:以人类可读的方式显示
  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小  
du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
du -sk filename 查看指定文件大小

tz@COI HZAU

2018/4/8

转载于:https://www.cnblogs.com/acm-icpcer/p/8744532.html

Linux的磁盘系统和文件系统显示的文件大小为什么不一样(du指令和ls指令的区别)...相关推荐

  1. linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,新型linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍.doc...

    新型linux 查看磁盘分区.文件系统.使用情况的命令和相关工具介绍.doc 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 七.partx ...

  2. linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...

    Linux 查看磁盘分区.文件系统.使用情况的命令和相关工具介绍 作者:北南南北 来自:http://doc.xuehai.net 提要:Linux 磁盘分区表.文件系统的查看.统计的工具很多,有些工 ...

  3. linux的磁盘管理与文件系统

    目录 一.磁盘管理 1.磁盘的基础介绍 2.磁盘的分类 3.识别磁盘 4.磁盘的分区 二.文件系统 1.文件系统的介绍 2.文件系统的分类 3.磁盘创建文件系统 4.挂载和解挂载 一.磁盘管理 1.磁 ...

  4. 【Linux】磁盘管理与文件系统

    文章目录 一.磁盘基础 1.磁盘的解释 2.磁盘结构 物理结构 数据结构 3.磁盘接口类型 4.MBR与磁盘分区 5.文件系统类型 XFS文件系统 SWAP交换文件系统 Linux支持其他文件系统类型 ...

  5. 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...

    作者:北南南北 来自:LinuxSir.Org 提要:Linux 磁盘分区表.文件系统的查看.统计的工具很多,有些工具是多功能的,不仅仅是查看磁盘的分区表,而且也能进行磁盘分区的操作:但在本文,我们只 ...

  6. Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍

    From: http://fedora.linuxsir.org/main/?q=node/41 作者:北南南北 来自:LinuxSir.Org 提要:Linux 磁盘分区表.文件系统的查看.统计的工 ...

  7. linux type命令(用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令,如果给出的指令为外部指令,则显示其绝对路径)

    文章目录 type 补充说明 语法 选项 参数 实例 type 显示指定命令的类型 补充说明 type命令 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令. 命令类型: alias:别名 ...

  8. linuxquot;/quot;分区名称,linux分区,磁盘系统的管理,文件系统制作

    最近又开始重新拾起linux了,因为工作中用的很少,所以看得东西很容易就忘记了. 这几天看了下linux的分区,以及如何制作文件系统等相关命令的用法,下面就按照这个流程来讲一讲,免得自己日后忘记了. ...

  9. Linux 格式化磁盘,制作文件系统 => 报错: dev/sdb is NOT identified.

    前言 在学习 ARM S5PV210 开发板的时候, SD 卡烧录时总是失败,报错信息: dev/sdb is NOT identified. 经过实践,发现格式化 SD 卡可以解决该问题:或者使用命 ...

  10. linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍df...

    linux下查看硬盘使用情况 一.df -lh 命令 df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置: [root@lo ...

最新文章

  1. redis安全与管理
  2. 模拟grub损坏及丢失
  3. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”
  4. visual studio2008 OpenGL开发配置
  5. php-fpm with php-5.3.2 + APC
  6. 前端学习(2905):用vite的2.0构建程序
  7. MIT科学家正在教AI感受电影中的喜怒哀乐
  8. mysql报错Attempted to open a previously opened tablespace的解决办法
  9. spring boot的gradle整合日志
  10. [转载] python的__del__()方法
  11. 很多人已经不会用WINDOWS的命令行、DOS命令了
  12. 眼镜蛇效应:事与愿违的经济学教训
  13. 移动端rem布局实践
  14. eclipse安装Subclipse(svn数据源)
  15. python IRR公式使用——定投基金收益率计算
  16. 为你的整轨APE音乐制作CUE文件(图文)
  17. 系统启动时启动服务器,在BOIS如何设置启动项 启动方式怎么选择
  18. Linux中awk后面的RS, ORS, FS, OFS 用法
  19. Search()函数使用方法
  20. 随机密码生成(Python编程)

热门文章

  1. 2021-07-09商场主页及分类
  2. 2021-06-27循环控制 mapSet
  3. C++ set 排序 修改元素之后不会改变原来的排序
  4. php如何删除zip文件内容,删除php中的zip文件夹
  5. ubuntu 15.10 升级 到Ubuntu 16.04.3 LTS
  6. Odoo(OpenErp) 收藏夹(私藏)
  7. 项目2:PHP抽奖程序 ,抽奖规则代码
  8. RedisTemplate 概述 与 操作 Redis 5 种数据类型
  9. Eureka 自我保护模式、健康检查机制、Eureka 元数据
  10. LoRa无线技术介绍