Linux查看文件大小,du和df命令区别
时间:2026-10-6 07:46 作者:emer 分类: 无
前言
服务器磁盘满了,不知道哪个目录占的空间最大?du 和 df 是两个最常用的查看磁盘空间的命令,但很多人搞不清它们的区别。本文一次讲清楚。
du 和 df 的区别
du(Disk Usage)
看的是文件和目录占用的磁盘空间。
比如某个目录下有多少文件,总共占多少空间。
df(Disk Free)
看的是磁盘分区的整体使用情况。
比如整个硬盘总共有多大,用了多少,还剩多少。
一句话总结
- du:看文件/目录占了多少
- df:看磁盘分区总共多大、剩多少
df 命令
查看整体磁盘使用情况
df -h
-h 是 human-readable 的意思,输出成 K、M、G 的易读格式。
输出类似:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 18G 63% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 100G 50G 45G 53% /data
只看某个分区
df -h /
只看根分区的使用情况。
显示文件系统类型
df -Th
多了一列 Type,显示是 ext4、xfs 还是其他类型。
du 命令
查看某个目录占多大空间
du -sh 目录路径
比如看 /var 目录:
du -sh /var
-s 是 summary,只显示总计;-h 是易读格式。
输出类似:
5.2G /var
查看当前目录下每个子目录的大小
du -sh *
输出当前目录下每个子目录占多大空间。
按大小排序
du -sh * | sort -hr
sort -hr 是按数字从大到小排,这样就能一眼看到哪个子目录最大。
找当前目录下最大的10个文件
du -ah . | sort -hr | head -10
-a 是包括文件,不只是目录。
只看一层深度
du -h --max-depth=1 /var
只看 /var 下第一层的子目录大小,不往下钻。
常见场景
场景1:磁盘满了,找大文件
# 先看哪个分区满了
df -h
# 然后去那个分区找大目录
cd /
du -sh * | sort -hr | head -10
# 找到大目录后继续往下钻
cd /var
du -sh * | sort -hr | head -10
一步步找到占空间最大的文件,然后删掉。
场景2:看日志占了多少
du -sh /var/log
场景3:看网站占了多少
du -sh /var/www/html
常见坑
坑1:du 和 df 显示的已用空间不一样
明明删了大文件,但 df 显示还是满的。
原因: 文件被进程占用着,删了之后空间没真正释放。
解决: 找到占用这个文件的进程,重启或者杀掉:
lsof | grep deleted
找到 PID 后重启对应的服务。
坑2:du 命令跑了半天还在跑
du 一个大目录,半天没反应。
原因: 目录太大,文件太多。
解决: 加 --max-depth=1 限制深度,或者先确认一下目录有多大再决定要不要跑。
坑3:df 显示已用空间和 du 对不上
df 显示用了 80G,但 du 加起来才 50G。
原因: 可能有隐藏文件、挂载点下面的文件,或者有进程占用着已删除的文件。
解决: 检查:
# 看有没有挂载点
mount
# 看有没有已删除但还被占用的文件
lsof | grep deleted
坑4:du 显示的大小和 ls 不一样
ls 显示文件是 10M,du 显示是 11M。
原因: du 看的是磁盘块占用,文件系统按块分配空间,实际占用会比文件大小略大一点。
解决: 正常现象,不用纠结。
总结
| 命令 | 作用 |
|---|---|
df -h |
看磁盘分区整体使用情况 |
du -sh 目录 |
看某个目录占多大空间 |
du -sh * | sort -hr |
看当前目录下每个子目录大小并排序 |
du -h --max-depth=1 目录 |
只看一层深度 |
lsof | grep deleted |
看已删除但被进程占用的文件 |
日常运维记住:df 看分区,du 看目录。
遇到问题加QQ23979811 协助处理