du是最直接分析磁盘占用的命令,-sh组合快速显示目录总大小,--max-depth=1配合sort -hr可定位大目录,df与du差异源于文件系统统计机制不同。

du 是最直接、最可靠的方式,其他命令(如 ls)只显示文件大小,不反映实际磁盘占用。
用 du -sh 快速看单个目录总大小
这是日常排查的起点:它跳过子目录细节,只输出一个汇总值,单位自动适配(K/M/G),人眼友好。
-
du -sh /var/log→ 看日志目录占多少空间 -
du -sh .→ 当前目录总大小 - 加
-c(du -shc /var/*)会在末尾多一行“total”,方便核对总和 - 注意:
-s和-h必须一起用才有意义;单独du -s输出是 512 字节块数,难读
用 du --max-depth=1 -h 查当前层谁最占地方
当发现 /var 很大,但不知道具体哪个子目录拖累时,这招能一层展开,避免盲目钻进深层目录。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
-
du --max-depth=1 -h /var | sort -hr→ 按大小倒序列出/var下所有一级子目录 -
--max-depth=1是关键,漏掉它会递归到底,输出冗长且难定位 -
sort -hr中-h支持 K/M/G 排序,-r倒序;不用-h会导致 “10M” 排在 “2G” 前面(字典序) - 常见干扰:/proc、/sys、/dev 下的
du报错(Permission denied / No such file),加2>/dev/null过滤即可
为什么 df 和 du 结果经常对不上
这不是命令错了,而是底层机制差异导致的典型现象:磁盘空间没释放,但 df 还算着,du 已经看不见了。
-
df统计的是文件系统数据块分配情况,反映真实磁盘占用 -
du统计的是文件路径下可见内容的大小之和 - 典型场景:某个进程正在写一个大日志文件,你用
rm -f删除了该文件,du立即变小,但df不变 —— 因为文件 inode 还被进程持有,磁盘块未回收 - 查持有者:
lsof +L1或lsof | grep deleted;杀掉对应进程后,df才会回落
删之前先确认,别误删还在被用的目录
统计只是第一步,真正清理前必须验证路径是否安全可删。尤其注意 /var/adm、/var/log、/var/spool/clientmqueue 这类高危目录。
- 别直接
rm -rf /var/log/*—— 可能删掉正在轮转的 active 日志或 journal 文件 - 优先用
journalctl --disk-usage查 systemd-journald 占用,用journalctl --vacuum-size=100M安全清理 - 清空邮件队列:
postsuper -d ALL(Postfix)比rm -rf /var/spool/postfix/maildrop更稳妥 - 大量小文件慎用
rm -rf,容易卡住甚至触发 OOM;改用find /path -type f -mtime +30 -delete或rsync --delete方式更可控
du 的本质是路径遍历 + 块统计,它不关心文件内容或状态,只认文件系统返回的块分配信息。所以看到异常大小,第一反应不该是“命令不准”,而是检查是否有隐藏挂载、硬链接循环、或被进程锁住的已删除文件。

















