df -h 和 du -sh 是 macos 诊断磁盘空间问题的核心命令:df 快速显示各挂载点使用率,du 精确定位大目录;需先用 df 筛选高占用分区,再进对应路径用 du 分层统计并排序排查。

如果您在 macOS 中发现系统变慢、存储告警或无法保存新文件,则很可能是某个分区磁盘空间已接近耗尽。df 和 du 是 macOS 终端中用于诊断磁盘使用问题的两个核心命令:df 从文件系统层面快速显示各挂载点容量,du 则从目录结构出发精确统计具体路径占用。以下是结合实际场景的常用操作步骤:
一、用 df 查看各挂载分区总体使用情况
df 命令直接读取文件系统超级块,响应极快,适合第一时间判断哪个挂载点存在高占用风险。它不依赖文件遍历,因此不受目录内文件数量影响。
1、打开“终端”应用(可通过 Spotlight 搜索 Terminal 快速启动)。
2、输入命令:df -h 并按回车,查看所有挂载点的人类可读格式报告。
3、重点关注 Use% 列中数值 ≥80% 的行,例如 /System/Volumes/Data(用户主数据卷)或 /private/var/folders(临时缓存区)。
二、筛选高占用挂载点并精确定位路径
macOS 使用 APFS 容器架构,根目录 / 下的物理占用常被多个隐藏宗卷分散,仅看 / 的 Use% 容易误判。必须结合 Mounted on 字段识别真实数据路径,再进入该路径使用 du 进一步下钻。
1、运行命令:df -h | awk '$5 ~ /[89][0-9]%|100%/ {print}' | sort -k5nr,快速提取高占用挂载点并按百分比降序排列。
2、观察输出中 Mounted on 列的具体路径,如 /System/Volumes/Data 或 /private/var/vm。
3、执行 cd /System/Volumes/Data(将路径替换为上步所得)切换至该挂载点根目录。
三、用 du 统计当前目录一级子目录大小
du 命令基于文件逐个调用 fstat 获取大小,能穿透 APFS 宗卷边界,适用于定位具体大目录。使用 -sh */ 可规避隐藏项干扰,聚焦可见子目录。
1、确保已在目标挂载点路径下(如 /System/Volumes/Data)。
2、输入命令:du -sh */,列出当前目录下所有非隐藏子目录的汇总大小。
3、若需包含以点开头的目录(如 .Trash、.fseventsd),改用:du -sh .*/ */ | grep -v "^\.$\|^\.\.$"。
四、限制递归深度并排序查看前 N 大目录
全量递归统计(如 du -sh *)在大型目录中极易卡顿且信息过载。通过 --max-depth 限定层级,并配合 sort -hr 可高效识别空间消耗主力。
1、运行命令:du -sh --max-depth=1 | sort -hr,对当前层所有项目(含隐藏项)按大小倒序排列。
2、若仅需前 10 项,追加管道:du -sh --max-depth=1 | sort -hr | head -10。
3、为排除已知干扰项(如 node_modules、.git),添加 --exclude 参数:du -sh --max-depth=1 --exclude="node_modules" --exclude=".git" .。
五、展开某大目录的多级分布结构
当确认某目录(如 ~/Downloads 或 /Library/Caches)异常庞大时,需展开其内部三级以内结构,避免全量扫描耗时。结合 head -20 可截取最可疑的前 20 条明细。
1、切换至待分析目录,例如:cd ~/Downloads。
2、执行命令:du -h --max-depth=3 | sort -hr | head -20,获取三级子路径中最大的 20 个条目。
3、注意输出中每行首列为大小,末列为路径;若路径含空格,可用引号包裹或先执行 set -f 关闭文件名扩展以保安全。











