du是linux系统中用于统计目录或文件磁盘空间使用情况的命令行工具,全称“show disk usage”,属于gnu coreutils套件,默认集成于所有主流发行版。

du 不需要安装——它是 GNU coreutils 的一部分,所有主流 Linux 发行版默认自带。
为什么直接运行 du -sh /path 却报 “command not found”
极小概率是 coreutils 被意外卸载,或 /usr/bin 不在 $PATH 中。验证方式:
- 运行
which du—— 若无输出,说明路径异常或缺失 - 检查
echo $PATH是否包含/usr/bin或/bin - 尝试绝对路径:
/usr/bin/du -sh /;若成功,说明只是 PATH 问题
修复 PATH 通常比重装更安全;如确认缺失 coreutils,按发行版重装即可:sudo apt install --reinstall coreutils(Debian/Ubuntu),sudo yum reinstall coreutils(RHEL/CentOS)。
du -sh * 显示大小但不排序,怎么快速找出最大的几个目录
因为 du 默认不排序,必须显式管道处理。注意:不能直接 du -sh * | sort,否则会混入子目录的嵌套结果,干扰 top-N 判断。
- 正确做法是先限制层级:
du -sh --max-depth=1 /path/* 2>/dev/null | sort -hr | head -10 -
2>/dev/null屏蔽权限错误(如/proc下的拒绝访问) -
sort -hr按人类可读格式逆序排(-h解析 K/M/G,-r降序) - 如果想排除特定类型(如日志),加
--exclude="*.log"在du后面
为什么 du -sh dir 和 df -h 显示的已用空间对不上
这是最常被误解的一点:du 统计的是“文件实际占用的块”,df 报告的是“文件系统级剩余空间”,二者统计维度不同。
-
du不计入已被删除但进程仍打开的文件(这类文件仍占磁盘,但du找不到路径) -
du默认跳过其他挂载点(除非加-x选项);df是按设备统计 - ext4 等文件系统有保留块(通常是 5%),普通用户不可用,
df会体现,du不会 - 若怀疑是“幽灵大文件”,用
lsof +L1查看已删除但仍被进程持有的文件
想交互式浏览并实时删大文件,该用 du 还是别的工具
纯 du 是命令行单次快照,不支持交互操作。此时应换用 ncdu——它本质是 du 的增强前端,但底层仍调用 du 扫描。
- 安装:
sudo apt install ncdu(Debian/Ubuntu),sudo dnf install ncdu(Fedora) - 运行:
ncdu /var/log,进入后用方向键浏览、d删除、n按名过滤、q退出 - 优势:自动排除
/proc、/sys等虚拟文件系统;支持颜色高亮;可导出扫描结果复用 - 注意:首次扫描仍需时间,且对 NFS 或慢盘可能卡顿;必要时加
--exclude缩短扫描范围
真正容易被忽略的是:即使你用了 ncdu,它底层仍是 du 的逻辑——所以所有关于权限、符号链接、稀疏文件的行为规则,和原生命令完全一致。











