人人都会AI编程

df、du:磁盘空间占用查看

更新时间:2026-07-12

在 Linux 日常运维中,快速了解磁盘使用情况是两个最基本的操作。dfdu 虽然都与磁盘空间有关,但它们的观察角度完全不同,配合使用才是排查磁盘问题的正确方式。

1. df:查看文件系统整体使用情况
df(disk free)以文件系统为单位,显示每个挂载点的总空间、已用空间、可用空间和挂载点。最常用的命令格式是 df -h,其中 -h 表示以人类可读的单位(K、M、G)显示,避免你数着字节位数头晕:

$ df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1       50G   20G   28G   42% /
/dev/sdb1      100G   80G   15G   85% /data
tmpfs           7.8G     0  7.8G    0% /dev/shm
  • 快速定位磁盘满问题:当你收到“磁盘空间不足”的错误时,先运行 df -h 可以看到是哪个分区(挂载点)满了。常见的是根分区 / 或数据分区 /var/home 等。
  • 关注已用%列:当某个文件系统使用率接近 100% 时,需要马上清理或扩容。
  • 注意 inode 耗尽:有时磁盘空间明明还有余量,但无法创建新文件,这是因为 inode(索引节点)用完了。使用 df -i 可以查看每个文件系统的 inode 使用情况:
  $ df -i /home
  文件系统        Inode 已用(I) 可用(I) 已用(I)% 挂载点
  /dev/sda2      655360  655360       0     100% /home
  

这种情况常见于存放海量小文件(如海量邮件、缓存文件)的目录。

2. du:查看目录或文件实际占用空间
du(disk usage)统计指定目录或文件实际占用了多少磁盘块,而不是文件系统级别的汇总。它主要用于找出“到底是哪个目录占空间最大”。最常用的组合是:

du -sh /home/user/*
  • -s:汇总(summary),只列出所给参数的汇总大小,而不会展开每个子目录。
  • -h:人类可读格式。

例如,想找出当前目录下占用空间最大的前 5 个文件夹,可以用:

du -h --max-depth=1 /var | sort -hr | head -5

这里 --max-depth=1 只统计下一级子目录的大小,sort -hr 按人类可读的数字从大到小排序。

  • 直接查看当前目录总大小du -sh . 会给出当前目录(包括所有子目录)的真实占用空间。
  • 找出大文件:有时更需要找到单个大文件,可以用 find 配合 -size 选项,但 du 也可以做到,比如:
  du -ah /var/log | sort -rh | head -10
  

-a 会包括文件而不仅仅是目录。

3. dfdu 的差异及其排错价值
一个常见的故障场景是:df 显示某个分区快满了,但 du 统计出来的所有目录占用总和小得多。这通常是因为某个被删除的文件仍然被某个进程占用,此时文件的空间不会释放。排查方法是:

lsof | grep deleted

lsof +L1

找到状态为 deleted 的文件和对应的进程,重启或终止该进程即可回收空间。这种差异排查是运维中非常实用的技巧。

总结来说,df 给你宏观视图(哪个分区告急),du 让你深入到具体目录和文件(谁在占用空间),两者结合才能完成一次完整的磁盘清理或问题诊断。