du (Disk Usage) 是 Linux 系统中一个非常常用且重要的命令,用于查看文件或目录占用的磁盘空间大小。它会递归地遍历目录,计算每个文件和子目录的大小。
基本语法
最常用的选项 (Options)
| 选项 |
含义 |
说明 |
-h |
Human-readable |
以 K, M, G 为单位显示大小(人类可读),最常用。 |
-s |
Summary |
仅显示总计,不列出子目录的详细信息。 |
-a |
All |
列出所有文件和目录的大小(默认只列出目录)。 |
-c |
Total |
在最后一行显示所有查询结果的总和。 |
-d N |
Depth |
指定递归的深度(例如 -d 1 只看当前层级子目录)。同 --max-depth=N。 |
--exclude |
Exclude |
排除指定的文件或目录。 |
实战场景与示例
场景一:查看当前目录下所有子目录的大小
这是最直接的用法,但如果不加 -h,显示的数字是以 K 为单位的块大小,不直观。
场景二:查看某个具体目录的总大小 (最常用 ⭐)
如果你只想知道 var/log 文件夹一共占用了多少空间,而不关心里面每个子文件夹的大小:
# -s 代表汇总(summary),-h 代表人类可读格式
du -sh /var/log
输出示例: 2.5G /var/log
场景三:查看当前目录下,一级子目录的大小
当你发现硬盘满了,想知道是当前哪个文件夹占用了空间,但不想看太深层级时:
# --max-depth=1 表示只看一层
du -h --max-depth=1
# 或者简写为
du -h -d 1
场景四:查看所有文件的大小(包括隐藏文件)
默认 du 只显示目录大小,加上 -a 可以显示文件大小。
场景五:查找大文件并排序 (高阶用法 🚀)
配合 sort 命令,找出当前目录下占用空间最大的前 5 个文件夹或文件:
# du -sh * : 计算当前目录下每个项目的大小
# sort -rh : r表示逆序(大到小),h表示配合du的human-readable格式排序
# head -5 : 只看前5个
du -sh * | sort -rh | head -5
场景六:排除特定文件
比如计算大小时忽略 .log 文件:
du -sh --exclude="*.log" /var/www
查找最占空间的 10 个文件
du -a /data | sort -n -r | head -n 10
或
cd /data
du -hsx * | sort -rh | head -10
或
du -ah . | sort -n -r | head -n 10
- du : 计算出单个文件或者文件夹的磁盘空间占用
- sort : 对文件行或者标准输出行记录排序后输出
- head : 输出文件内容的前面部分
查找最大占用空间的目录
du -h --max-depth=1 /data/
du -sh .
du -h -d 1
du -h -d 1 | sort -hr | head -3
du 和 df 的区别 (面试/常识点)
很多新手容易混淆这两个命令:
-
du (Disk Usage):
- 关注点:文件和目录。
- 原理:通过遍历文件系统,累加文件大小。
- 特点:比较慢(文件多时),能看到具体是谁占用了空间。
-
df (Disk Free):
- 关注点:文件系统(磁盘分区)。
- 原理:直接读取文件系统的超级块信息。
- 特点:速度极快,用于查看整个磁盘还剩多少空间。
注意:有时候 df 显示磁盘满了,但 du 算出来的文件总和却没满。
原因:通常是因为有已删除但在内存中仍被进程占用的文件。du 找不到它们(因为文件名没了),但 df 知道空间仍被占用。解决方法是重启相关进程或系统。
总结
日常使用只需要记住一个万能组合:
du -sh <目录名>/du -sh * 看总大小
du -h -d 1 看各子目录分布
du -lh