du 和 df的不同

du与df命令解析

转载http://blog.sina.com.cn/s/blog_9c8286b7010108aj.html


du和df命令都被用于获得文件系统大小的信息:df用于报告文件系统的总块数及剩余块数,du -s /<filesystem>用于报告文件
系统使用的块数。但是,我们可以发现从df命令算出的文件系统使用块数的值与通过du命令得出的值是不一致的。如下例:
# du -s /tmp 返回如下值:
12920 /tmp
而 df /tmp返回如下值:
Filesystem 512-blocks Free %Used Iused %Iused Mounted on

/dev/hd3 57344 42208 26% 391 4% /tmp
 
从上面的值我们可以算出<total from df> - <Free from df> = <used block count>: 57344 - 42208 = 15136. 而15136大于
12920。该值差异的存在是由于du与df命令实施上的不同: du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用
的块数累加得到该文件系统使用的总块数;而df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如i节点,磁盘分布图,间接块,超级块等。这些数据对大多数用
户级的程序来说是不可见的,通常称为Meta Data。 
du命令是用户级的程序,它不考虑Meta Data,而df命令则查看文件系统的磁盘分配图并考虑Meta Data。df命令获得真正的文
件系统数据,而du命令只查看文件系统的部分情况。例如,一个frag=4096 并且 nbpi=4096的空的大小为4MB的日志文件系统
中Meta Data 的分配情况如下:
1 4k block for the LVM
2 4k super blocks
2 4k blocks for disk maps
2 4k blocks for inode maps
2 4k blocks for .indirect
32 4k blocks for inodes

-------------------------
41 4k blocks for meta data on an empty 4MB file system
 
对于AIX 4.X 版本:
执行 du /foo返回的结果如下:
8 /foo/lost+found
16 /foo
要使du命令输出的结果与df 命令输出的结果匹配,我们必须要加上Meta Data。首先,将41个4k 的块转换为以512字节为单
位的值:
41 * 8 = 328
328(meta data) + 16(from du) = 344
所以有344个以512字节为单位的块分配给了这个空的文件系统。
 
而使用 df /foo命令我们可以得到下面的结果:
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/lv01 8192 7848 5% 16 2% /foo

从中我们可以得到该文件系统使用的块数:8192(total blocks) - 7848(free blocks) = 344。该值与上面得出的值一致。
 
上面的换算方法对于空的文件系统很容易实现,但是对于非空的文件系统,由于Meta Data中文件间接块的大小不定,因此较难
实现。所以我们不需要查看du 与 df返回的值的匹配关系,而只需要了解du -s命令返回的值反映了分配给文件及目录的磁盘块
数,而df命令则反映了文件系统的实际分配情况。df命令反映的实际情况包含了用户数据(文件及目录)和Meta Data。
 
另一个表现出du与df命令不同之处的例子如下:
如果用户删除了一个正在运行的应用所打开的某个目录下的文件,则du命令返回的值显示出减去了该文件后的目录的大小。但
df命令并不显示减去该文件后的大小。直到该运行的应用关闭了这个打开的文件,df返回的值才显示出减去了该文件后的文件系
统的使用情况。


<think>好的,我现在需要详细分析用户关于Linux中dudf命令的区别及用法的问题。首先,我得回顾已有的知识,并参考提供的引用资料,确保回答准确。 根据用户提供的引用内容,引用[3]明确指出dudf不同层次:du针对文件目录,而df针对文件系统。引用[4]提到当文件被删除但仍有进程占用时,df会统计这部分空间,而du不会,这可能导致两者结果不一致。引用[1][2]则讨论了解决dudf结果差异的方法,强调理解其工作原理的重要性。 接下来,我需要组织回答的结构。首先解释基本概念,然后列出主要区别,包括统计对象、工作原理、结果差异的原因、使用场景等。接着给出具体的使用示例,比如du查看目录大小,df查看磁盘整体使用情况。最后,总结何时使用哪个命令。 需要注意用户要求使用中文,并遵循格式指令,如行内数学表达式用$...$,独立公式用$$...$$,但这里可能不太需要数学公式。另外,要生成相关问题,确保在回答末尾添加相关问题部分。 还要检查是否有遗漏点,比如du的递归统计df的挂载点信息,以及如何处理结果不一致的情况,比如查找被删除但仍被进程占用的文件。这部分在引用[4]中有提到,需要使用lsof命令。 最后,确保回答清晰,分点说明,并正确引用资料,引用标识放在相关段落末尾。例如,在解释统计原理时引用[3],在讨论结果差异时引用[4],在解决方法时引用[1][2]。</think>### Linux中DUDF命令的区别与用法详解 #### 一、基本概念 - **$du$命令**(Disk Usage) 用于统计**文件/目录**占用的磁盘空间,通过递归计算指定路径下所有文件的总大小。例如统计`/home`目录大小: ```bash du -sh /home ``` - **$df$命令**(Disk Free) 用于显示**文件系统**级别的磁盘使用情况,包含挂载点、总容量、已用空间可用空间。例如查看所有挂载点: ```bash df -h ``` #### 二、核心区别 1. **统计对象不同** - $du$统计具体文件/目录的实际数据量 - $df$统计整个文件系统的元数据(包括已删除但被进程占用的空间)[^3] 2. **工作原理差异** | 命令 | 数据来源 | 统计范围 | |------|----------|----------| | du | 文件系统索引节点(inode) | 用户可见文件 | | df | 文件系统超级块(superblock) | 磁盘物理空间 | 3. **结果不一致的常见原因** - **文件已删除但进程仍占用** 例如:日志文件被`rm`删除后,若服务进程未重启,$df$会统计该空间,而$du$不会[^4] ```bash lsof | grep deleted # 查找此类文件 ``` - **稀疏文件或磁盘预分配** 某些数据库文件可能占用物理空间($df$统计)但未实际写入数据($du$不统计) 4. **使用场景对比** - **$du$适用场景** - 查找大文件:`du -a /path | sort -n -r` - 分析目录空间分布:`du -h --max-depth=1 /var` - **$df$适用场景** - 监控磁盘剩余空间:`df -h /` - 排查磁盘写满问题:`df -i`(查看inode使用) #### 三、典型应用示例 1. **快速定位磁盘占满问题** ```bash df -h # 先确定哪个挂载点空间不足 du -sh /* # 在根目录下按一级目录统计 du -sh /var/* | sort -rh # 对/var子目录排序 ``` 2. **解决差异问题** 若$df$显示使用率90%,而$du$统计总仅70%: ```bash # 检查已删除未释放文件 lsof +L1 # 显示链接数为0的文件 # 检查挂载点覆盖 mount | grep overlay # 常见于容器环境 ``` #### 四、总结选择建议 - 需要分析**具体文件/目录**大小 → 使用$du$ - 需要监控**磁盘整体使用**情况 → 使用$df$ - 两者差异较大时 → 优先用$df$判断是否需扩容,用$du$+$lsof$定位异常文件[^1][^2] 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值