df 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
df(disk free,磁盘剩余)——磁盘与存储命令族(见磁盘与存储命令族)。它看的是"每个挂载的文件系统整体用了多少"。
df 报告已挂载文件系统的磁盘空间使用情况,是"大盘视角"——告诉你 /、/data、/home 各自还剩多少。当你收到"磁盘空间不足"告警,第一反应就是 df -h。
一、基本用法
df -h # -h 人类可读(G/M 单位)
df -h /var/log # 只看某挂载点
df -T # 同时显示文件系统类型(ext4/xfs/overlay)
df -i # 看 inode 使用率(不是空间!)
-h(human-readable)把 1024 块换算成 G/M,必加。df默认按"挂载点"聚合,每个分区一行。若传一个文件路径(如/var/log),它只显示该文件所在的那一个文件系统——比看全表更聚焦。
二、inode 用完:另一个"满"的原因
df -i
# Filesystem Inodes IUsed IFree IUse% Mounted on
# /dev/sda1 655360 655360 0 100% /磁盘"空间还有"却写不进文件?很可能是 inode(索引节点,每个文件/目录消耗一个)用光了——常见于海量小文件(如缓存、日志轮转残留)。
df -i一查便知。inode 满比空间满更难缠,得找出小文件堆积的目录清理(配合 du 或find -type f | wc -l)。
三、df vs du:两种视角
| 工具 | 看什么 | 粒度 |
|---|---|---|
df | 文件系统整体用量 | 挂载点级 |
| du | 目录/文件占用的空间 | 目录/文件级 |
df告诉你"盘满了",du 告诉你"是谁占的"(见 du 详解)。经典组合:df -h确认哪个分区满 →du -sh /*逐层下钻找大目录。两者一个宏观一个微观,配合定位。
注意
df和 du 偶尔"对不上":删了大文件但df没释放,是因为进程还开着它的句柄(见 lsof +L1);或者有文件被隐藏挂载点盖住。遇到差异先想这两条。
四、实战:磁盘告警排查
# 1. 看哪个分区满了
df -h
# 2. 看是不是 inode 满
df -i
# 3. 逐层下钻找大目录
du -sh /var/* 2>/dev/null | sort -rh | head
# 4. 进最大目录继续下钻,直至定位文件若 df -i 满,转去清小文件;若空间满,du 下钻到具体大文件/目录(如 docker 悬空镜像、日志、node_modules),清理后 df -h 确认回落。配合 find 按时间清理 是标准运维动作。
一句话总结
df = 看文件系统整体磁盘用量:-h 人类可读、-T 看文件系统类型、-i 看 inode 使用率(满盘的另一元凶,常见于海量小文件);它给"盘满了"的宏观结论,具体是谁占的要用 du 下钻,删了不释放则查 lsof +L1。df vs du 一宏观一微观,配合排障。