在Linux系统中,磁盘空间管理是系统管理员和开发人员日常工作中不可或缺的一部分。df和du是两个最常用的命令,它们分别用于查看磁盘分区的使用情况和文件或目录占用的磁盘空间,虽然这两个命令都与磁盘空间相关,但它们的功能、输出信息和使用场景存在显著差异,本文将详细解析df和du命令的用法、参数及实际应用场景,并通过表格对比两者的核心区别,最后以FAQs形式解答常见问题。

df命令:磁盘分区使用情况分析
df(disk free)命令用于显示Linux系统中各文件系统的磁盘空间使用情况,包括总容量、已用空间、可用空间、挂载点等信息,其核心功能是监控分区的整体使用状态,帮助用户判断哪个分区接近存储上限,从而避免因磁盘空间不足导致系统故障。
基本语法与常用参数
df命令的基本语法为df [选项] [文件或目录],常用参数包括:
-h:以人类可读格式显示(如KB、MB、GB),默认以KB为单位。-T:显示文件系统类型(如ext4、xfs、nfs等)。-i:显示inode使用情况,而非磁盘块。-a:显示所有文件系统,包括虚拟文件系统(如proc、sysfs)。--output:自定义输出列,例如--output=source,fstype,size,used,pcent。
输出信息解析
执行df -h后,输出结果通常包含以下列:
- Filesystem:文件系统名称,即磁盘分区的设备路径(如
/dev/sda1)或挂载点。 - Size:分区的总容量。
- Used:已使用的空间。
- Avail:可用空间(通常基于
Use%计算,实际可用空间可能因保留空间而略少)。 - Use%:使用百分比,超过90%时需警惕。
- Mounted on:挂载点,即文件系统在目录树中的位置。
实际应用场景
- 检查系统分区空间:通过
df -h /查看根分区使用情况,避免因空间不足导致系统无法写入。 - 排查挂载点异常:若某个目录(如
/data)访问缓慢,可用df -hT /data检查对应分区是否满盘或文件系统损坏。 - 监控网络文件系统:对NFS或SMB挂载的远程目录,
df可显示远程磁盘的实时使用状态。
du命令:文件或目录空间占用分析
du(disk usage)命令用于递归计算指定文件或目录占用的磁盘空间,与df不同,du聚焦于文件和目录的微观占用情况,适合定位具体的大文件或目录。

基本语法与常用参数
du命令的基本语法为du [选项] [文件或目录],常用参数包括:
-h:以人类可读格式显示。-s:仅显示总计,不递归显示子目录。-a:显示所有文件,而不仅仅是目录。--max-depth=N:限制递归深度(如--max-depth=1仅显示当前目录的直接子目录)。--exclude=PATTERN:排除匹配模式的文件(如--exclude=*.log)。
输出信息解析
du的输出默认为每行一个目录或文件,末尾显示占用的块数(默认为512字节块)。
0K ./testdir
8.0K ./subdir
12K .
若使用-s参数,则仅显示总计:
12K .
实际应用场景
- 定位大文件:通过
du -ah /home | sort -hr | head -10查找/home目录下占用空间最大的10个文件或目录。 - 清理临时文件:结合
find命令删除超过指定大小的文件,如find /var/log -type f -size +100M -exec du -sh {} \;。 - 分析目录结构:使用
du --max-depth=2 /var快速查看/var下各子目录的空间占用,判断日志、缓存等目录是否膨胀。
df与du的核心区别
| 对比维度 | df命令 |
du命令 |
|---|---|---|
| 功能目标 | 查看磁盘分区的整体使用情况 | 计算文件/目录的微观空间占用 |
| 统计范围 | 基于文件系统块(block)统计 | 基于实际文件内容+元数据统计 |
| 输出信息 | 分区总容量、已用/可用空间、挂载点等 | 文件/目录的累计占用空间 |
| 是否包含保留空间 | 是(Linux默认预留5%空间给root用户) | 否(直接计算实际占用) |
| 典型场景 | 检查分区是否满盘、监控挂载点 | 定位大文件、分析目录空间分布 |
关键差异说明
- 统计粒度不同:
df以文件系统为单位,du以文件/目录为单位。df -h /显示根分区总空间,而du -sh /显示根目录下所有文件的实际占用(可能因保留空间小于df结果)。 - 空间计算逻辑:
df的“已用空间”包含文件内容、元数据(inode)及保留空间;du仅统计文件内容和元数据,不包含保留空间。 - 性能影响:
du递归遍历大目录时可能较慢,而df直接读取文件系统超级块,速度更快。
常见问题与解答(FAQs)
Q1: 为什么df -h显示的已用空间大于du -sh --all的总和?
A1: 这通常由以下原因造成:

- 保留空间:Linux文件系统默认预留5%-10%空间供root用户使用,这部分空间在
df中标记为“已用”,但du不会统计。 - 文件系统开销:
df包含inode表、日志等元数据占用,而du仅统计用户数据。 - 挂载点重叠:若存在多层挂载(如
/home挂载到独立分区),du /会计算所有文件,而df可能重复统计挂载点。
Q2: 如何快速定位某个分区中占用空间最大的目录?
A2: 可结合df和du分步操作:
- 先通过
df -h | grep '/data'确认/data分区使用情况。 - 再进入该分区根目录,执行
du -sh * | sort -hr | head -10,按占用大小排序显示前10个目录。
若需排除特定文件(如日志),可添加--exclude参数,例如du -sh --exclude=*.log * | sort -hr。
通过合理使用df和du命令,Linux用户可以高效管理磁盘空间,及时发现存储瓶颈并优化存储结构,掌握两者的区别与互补性,是提升系统运维能力的重要基础。
