df和du是linux中唯二能全面查清磁盘空间占用的命令:df读取文件系统元数据,秒级显示分区整体使用率(如df -h)、inode状态(df -i)及文件系统类型(df -ht);du则递归统计文件实际占用块大小(如du -sh /path),用于定位大目录,二者结果差异常源于已删除但未释放的文件或挂载覆盖。

df 和 du 是唯二真正能查清磁盘空间占用的命令,其他像 ls、stat 只能看单个文件大小,没法反映目录总用量或文件系统整体状态。
df -h 看分区整体是否快爆了
这是第一反应命令,用来快速判断「哪块盘快满了」。输出里 Use% 超过 85% 就该动手查了,90% 以上可能已影响服务(比如日志写不进、MySQL 拒绝写入)。
-
df -h:最常用,单位自动缩放(G/M/K),一眼看出根目录/或/var分区用了多少 -
df -hT:加-T能看到文件系统类型(ext4、xfs),某些旧程序对xfs的配额行为有差异 -
df -i:查 inode 是否耗尽——即使Avail还剩很多空间,Inodes用光也会导致「No space left on device」错误 - 注意:
df统计的是挂载点(如/dev/sda1),不是某个目录路径;它读的是文件系统元数据,结果秒出,但不包含被进程占用却已删除的文件(这类文件实际空间未释放,df算不到)
du -sh /path 查具体目录吃掉了多少空间
当 df 显示 /var 用了 92%,就得用 du 往里钻,定位是哪个子目录撑大的。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
du -sh /var/log:直接看日志目录总大小 -
du -sh /var/* | sort -h:列出/var下所有一级子目录,按大小排序,最大的排最后 -
du -sh /var/log/* | grep -E "G|M$" | sort -h:只筛出 GB/MB 级别的大项,跳过一堆 KB 级日志碎片 - 关键区别:
du统计的是文件实际占用的块,包括硬链接重复计数;它递归扫描,速度慢,且无法看到已被删除但仍有进程打开的文件(lsof +L1才能抓到)
为什么 df 和 du 结果经常对不上
这不是 bug,是 Linux 文件系统设计导致的常见现象。典型原因就两个:
- 进程还在写一个已被
rm删除的文件:文件名没了,但 inode 还在内存中,空间没释放,df认为已用,du找不到路径所以不统计 - 挂载覆盖:比如
/mnt/data原本挂载着一块盘,后来又把另一块盘挂到了/mnt/data/subdir,du会把子挂载点内容算进去,而df把它们当独立分区 - 解决办法:
lsof +L1查被删除但仍被占用的文件;findmnt确认挂载层级是否嵌套
别用 ls -lh 当磁盘用量工具
ls -lh 只显示单个文件大小,对目录只显示其自身 inode 占用(通常是 4KB),完全不体现里面内容。比如 ls -lh /home 输出 drwxr-xr-x 12 user user 4.0K Jun 10 10:22 /home,这个 4.0K 是目录结构本身大小,不是里面几百 GB 用户数据的大小。
- 想粗略估算目录大小?必须用
du -sh - 想看某个大文件是谁、多大?
ls -lh /path/to/file有效,但仅限单文件 - 误用
ls导致清理失误很常见:删了「看起来小」的目录名,结果里面嵌套了 TB 级数据
真正卡住人的是那些看不见的空间:被删未释放的文件、嵌套挂载、inode 耗尽。df 和 du 必须配合用,单看一个永远查不全。










