du -sh --max-depth=1 /path可限制统计深度为一级子项,配合sort -hr和2>/dev/null实现高效定位大目录;ncdu则提供交互式树形界面,支持按键导航、排序与安全删除,是du的增强替代方案。

直接看 du 和 ncdu,别只盯着 df -h——它只告诉你“满了”,不告诉你“谁塞的”。
怎么用 du 命令做深度层级统计
du 是唯一能递归钻进目录树、逐层累加大小的命令。但默认输出太杂,容易漏关键路径。
- 必须加
-h(人类可读)和--max-depth=1,否则会列出每层子目录,信息爆炸:du -sh --max-depth=1 /var - 排序要用
sort -hr,不是sort -nr——字母顺序和数字顺序混用会导致1.2G排在900M后面 - 忽略权限错误:加
2>/dev/null,否则/root或/proc下的拒绝访问会打断整个管道流 - 想查某用户家目录总占用?用
sudo du -sh /home/* 2>/dev/null | sort -hr,不加sudo会跳过被限制访问的目录
为什么 ncdu 比 du 更适合定位问题目录
ncdu 不是替代品,是 du 的交互式增强版——它把 du -sh --max-depth=1 的结果变成可导航的树形界面,且实时响应按键操作。
- 启动后按
s按大小排序,n按名称,t切换排序方向;进入子目录后这些键依然有效 - 按
d可直接删除选中项(需二次确认),比rm -rf手动拼路径安全得多 - 扫描时加
--exclude='*.log'能跳过日志文件,避免被滚动日志干扰判断 - 注意:
ncdu默认不统计硬链接重复计数,和du行为一致;但若用du -shL(跟随符号链接),ncdu不支持该选项
df -h 显示 95% 但 du 统计不到对应数据?查 inode
常见现象:根分区 Use% 显示 98%,但 du -sh /* 2>/dev/null | sort -hr 加起来才占 60GB——大概率是 inode 耗尽,而非磁盘块满。
- 运行
df -i查看各挂载点的 inode 使用率,Use%列超过 95% 就危险 - 小文件(如日志碎片、缓存、session 文件)极易吃光 inode,
find /var/log -type f -name "*.log" -size -1k | wc -l可粗略估算数量级 -
du --inodes /path能统计指定路径下 inode 占用量,配合sort -n定位高 inode 密度目录 - 清理时优先删空文件:
find /tmp -type f -size 0 -delete,这类文件不占 block 但占 inode
别信单次命令结果,要交叉验证
单一命令输出可能因缓存、挂载延迟或权限遮蔽产生偏差,尤其在容器或 NFS 环境下。
- 先跑
df -h确认哪个挂载点异常,再用lsblk看该挂载点是否对应物理设备(比如/dev/sdb1),排除 tmpfs 或 overlayfs 干扰 - 对可疑目录,同时执行
du -sh和du -sb(字节级),对比是否因 block 大小导致显示差异(例如 4KB block 下,1B 文件也占 4KB) - 如果
ncdu /扫描卡在某个目录,立刻 Ctrl+C,改用du -sh --max-depth=1 /path/to/suspect分段排查,避免陷入深层嵌套或死循环挂载点 - 容器环境注意:宿主机
df -h看的是 host 文件系统,而du在容器内运行时统计的是容器 rootfs 层,两者不可直接比对
真正耗时间的从来不是命令本身,而是判断“这个大目录能不能删”——du 和 ncdu 只负责暴露事实,决策得靠你翻日志、查进程、看部署文档。


















