1、du
命令的作用
du
(Disk Usage)是 Ubuntu 系统中用于查看目录或文件磁盘使用情况的命令,主要用于分析磁盘空间占用。
2、语法
du [选项] [目录/文件路径]
常用选项
2.1、-h
以 KB、MB、GB 等人性化可读格式(Human-readable)的单位显示大小(默认以块为单位)。
du -h /home
注意:由于
-h
会递归展开所有的子目录,所以不适合直接用于目录下有大量子文件的场景,通常结合下面的-s
选项一起使用。
2.2、-s
s代表Summarize,只输出目标目录/文件的总大小,不展开子目录细节。
du -sh /var/log
2.3、-d <深度>
或 --max-depth=<深度>
控制递归查看子目录的层级(-d 0
等价于 -s
)。
du -h -d 1 /home # 仅扫描 /home 下一级子目录
输出示例:
2.4、--exclude=<模式>
跳过符合通配符模式的文件或目录(如排除日志文件)。
du -h --exclude="*.log" /var # 扫描 /var 目录,但排除所有 .log 文件
2.5、直接查看文件大小
若目标是文件而非目录,du
会显示该文件的磁盘占用(注意与 ls -l
显示的“实际大小”可能不同,因为磁盘按块分配)。
du -h /etc/hosts # 显示 hosts 文件的磁盘占用
输出示例:
4.0K /etc/hosts # 即使文件实际大小只有 100字节,也会占 1 个块(通常 4KB)
3、磁盘分析的常见组合
3.1、按大小排序当前目录的一级子目录
想快速定位当前目录下“最占空间”的子目录时,可结合 sort
命令按大小排序。
du -h -d 1 . | sort -hr
-h
:人性化单位(如MB、GB)。-d 1
:仅扫描一级子目录。sort -hr
:-r
是 --reverse 的缩写,表示逆序排序(从大到小);-h
让sort
正确解析K
/M
/G
单位
3.2、查找大目录下的“深层大文件”
当某个大目录(如 /data
)整体占用高,但不清楚具体是哪个子目录或文件导致时,可通过限制扫描深度 + 过滤大文件快速定位。
du -h /data --max-depth=3 | grep '[0-9]G'
--max-depth=3
:扫描/data
下最多3层子目录(避免递归过深)。grep '[0-9]G'
:过滤出大小为 GB 级别的目录或文件(如 2G、5G)。
3.3、统计指定类型文件的总大小
需要快速知道某个目录下所有 PDF、图片等特定类型文件的总占用时,可结合 find
命令。
find /home/user -name "*.pdf" -exec du -ch {} + | grep total
find /home/user -name "*.pdf"
:查找/home/user
下所有.pdf
文件。-exec du -ch {} +
:对每个找到的文件执行du -ch
(-c
汇总,-h
易读)。grep total
:仅显示所有文件的总大小。
3.4、对比两个目录的大小差异
需要快速比较两个目录(如原始目录和备份目录)的空间占用时,直接用 du
输出两者的总大小。
du -sh /path/to/source /path/to/backup
-s
:仅显示总大小;-h
:易读格式。
3.5、忽略隐藏目录/文件的统计(如 .git、.cache)
开发或运维中,常需要排除隐藏目录(如 Git 仓库的 .git
目录)的干扰,专注业务文件的占用分析。
du -h -d 2 --exclude=".*" /project
--exclude=".*"
:排除所有以.
开头的隐藏目录或文件(如.git
、.bashrc
)。-d 2
:扫描/project
下两级子目录(避免遗漏关键子目录)。
3.6、实时监控目录大小变化(配合 watch 命令)
需要观察某个目录(如下载目录)在文件传输/下载时的实时大小变化,可结合 watch
命令定时刷新。
watch -n 5 "du -sh /downloads"
-n 5
:每5秒刷新一次(可根据需求调整,如-n 1
每秒刷新)。