Linux中du命令与df的区别
Linux中du命令与df的区别详细介绍
在 Linux 中,du(Disk Usage)和df(Disk Free)是两个用于查看磁盘空间的常用命令,但它们的功能和侧重点有明显区别,以下是具体对比:
1. 作用对象不同
du:
用于统计文件或目录占用的磁盘空间,针对具体的文件系统对象(文件、目录)。
例:查看某个目录及其子目录的大小。df:
用于查看文件系统的整体磁盘使用情况,针对磁盘分区(如/dev/sda1)或挂载点(如/、/home)。
例:查看系统各个分区的总空间、已用空间、可用空间等。
2. 显示内容不同
du 的输出(示例):
bash
$ /home/user/documents.0K /home/user/documents/temp
128M /home/user/documents/project
.5G /home/user/documents
- 逐行显示指定目录下每个子目录 / 文件的大小(默认递归子目录)。
- 核心指标:目录 / 文件占用的磁盘块数(
-h选项以人类可读格式显示)。
df 的输出(示例):
bash
$Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 18G % /
/dev/sdb1 100G 20G 80G % /data
tmpfs .0G .0G % /dev/shm
- 显示每个文件系统(分区)的总容量、已用空间、可用空间、使用率、挂载点。
- 核心指标:文件系统的整体空间状态。
3. 统计方式不同
du:- 直接计算文件 / 目录实际占用的磁盘块(Block),包括硬链接的重复计数(因为硬链接指向同一文件,
du会分别统计每个链接所在目录的大小,但实际占用空间是单份)。 - 不考虑文件系统元数据(如 inode 数量),仅关注文件内容的大小。
- 可通过
-s选项统计单个目录的总大小(不递归子目录)。
- 直接计算文件 / 目录实际占用的磁盘块(Block),包括硬链接的重复计数(因为硬链接指向同一文件,
df:- 从文件系统角度统计空间,包括:
- 总块数、已用块数、可用块数(超级用户可用的块数)。
- inode 使用情况(文件数量相关,通过
df -i查看)。
- 会排除已删除但仍被进程占用的文件(此时
du可能显示空间占用,而df的已用空间不会减少,直到进程释放文件)。
- 从文件系统角度统计空间,包括:
4. 典型使用场景
du的场景:- 排查某个目录过大的问题(如
/var/log、/home/user)。 - 查看特定文件或目录的大小,优化磁盘占用。
- 排查某个目录过大的问题(如
df的场景:- 检查系统磁盘是否即将占满(如根分区
/的使用率)。 - 确认文件系统的剩余空间,判断是否需要扩容或清理。
- 检查系统磁盘是否即将占满(如根分区
5. 特殊情况对比
- 删除文件但进程仍占用:
- 若文件被删除但仍有进程打开,
df会显示空间未释放(因为文件系统中该文件的 inode 仍被引用),而du不会显示该文件(因为文件已从目录中删除)。 - 此时需通过
lsof | grep deleted找到相关进程并重启,释放空间。
- 若文件被删除但仍有进程打开,
- 稀疏文件(Sparse File):
du统计文件实际占用的磁盘块(忽略空洞),df统计文件声明的大小(包含空洞)。
总结
| 特性 | du |
df |
|---|---|---|
| 作用对象 | 文件 / 目录的空间占用 | 文件系统(分区)的整体空间状态 |
| 输出粒度 | 目录 / 文件级(可递归) | 分区 / 挂载点级 |
| 统计角度 | 实际占用的磁盘块(内容大小) | 文件系统的元数据和空间分配 |
| 典型用途 | 分析目录大小、定位大文件 | 监控磁盘分区空间、判断是否需要扩容 |
一句话区分:
du回答 “某个文件 / 目录占了多少空间”,df回答 “整个磁盘 / 分区还剩多少空间”。