Ubuntu磁盘空间分析:du命令及常用组合

1、du命令的作用

du(Disk Usage)是 Ubuntu 系统中用于查看目录或文件磁盘使用情况的命令,主要用于分析磁盘空间占用


2、语法

bash 复制代码
du [选项] [目录/文件路径]

常用选项

2.1、-h

以 KB、MB、GB 等人性化可读格式(Human-readable)的单位显示大小(默认以块为单位)。

bash 复制代码
du -h /home  

注意:由于-h会递归展开所有的子目录,所以不适合直接用于目录下有大量子文件的场景,通常结合下面的-s选项一起使用。


2.2、-s

s代表Summarize,只输出目标目录/文件的总大小,不展开子目录细节。

bash 复制代码
du -sh /var/log 

2.3、-d <深度>--max-depth=<深度>

控制递归查看子目录的层级(-d 0 等价于 -s)。

bash 复制代码
du -h -d 1 /home  # 仅扫描 /home 下一级子目录

输出示例:


2.4、--exclude=<模式>

跳过符合通配符模式的文件或目录(如排除日志文件)。

bash 复制代码
du -h --exclude="*.log" /var  # 扫描 /var 目录,但排除所有 .log 文件

2.5、直接查看文件大小

若目标是文件而非目录,du 会显示该文件的磁盘占用(注意与 ls -l 显示的"实际大小"可能不同,因为磁盘按块分配)。

bash 复制代码
du -h /etc/hosts  # 显示 hosts 文件的磁盘占用

输出示例:

复制代码
4.0K    /etc/hosts  # 即使文件实际大小只有 100字节,也会占 1 个块(通常 4KB)

3、磁盘分析的常见组合

3.1、按大小排序当前目录的一级子目录

想快速定位当前目录下"最占空间"的子目录 时,可结合 sort 命令按大小排序。

bash 复制代码
du -h -d 1 . | sort -hr
  • -h:人性化单位(如MB、GB)。
  • -d 1:仅扫描一级子目录。
  • sort -hr-r 是 --reverse 的缩写,表示逆序排序(从大到小);-hsort 正确解析 K/M/G 单位

3.2、查找大目录下的"深层大文件"

当某个大目录(如 /data)整体占用高,但不清楚具体是哪个子目录或文件导致时,可通过限制扫描深度 + 过滤大文件快速定位。

bash 复制代码
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 命令。

bash 复制代码
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 输出两者的总大小。

bash 复制代码
du -sh /path/to/source /path/to/backup
  • -s:仅显示总大小;
  • -h:易读格式。

3.5、忽略隐藏目录/文件的统计(如 .git、.cache)

开发或运维中,常需要排除隐藏目录(如 Git 仓库的 .git 目录)的干扰,专注业务文件的占用分析。

bash 复制代码
du -h -d 2 --exclude=".*" /project
  • --exclude=".*":排除所有以 . 开头的隐藏目录或文件(如 .git.bashrc)。
  • -d 2:扫描 /project 下两级子目录(避免遗漏关键子目录)。

3.6、实时监控目录大小变化(配合 watch 命令)

需要观察某个目录(如下载目录)在文件传输/下载时的实时大小变化,可结合 watch 命令定时刷新。

bash 复制代码
watch -n 5 "du -sh /downloads"
  • -n 5:每5秒刷新一次(可根据需求调整,如 -n 1 每秒刷新)。
相关推荐
熙曦Sakura15 分钟前
【Linux网络】TCP全连接队列
linux·网络·tcp/ip
脚比路长39 分钟前
win11 安装 wsl ubuntu 18.04后换源失败!
linux
菜鸟康1 小时前
Linux——CMake的快速入门上手和保姆级使用介绍、一键执行shell脚本
linux·运维·服务器
卷卷的小趴菜学编程2 小时前
Linux系统之----基础IO
linux·运维·服务器·文件·fopen·文件操作符·位图传递标志位
码上飞扬2 小时前
Java大师成长计划之第22天:Spring Cloud微服务架构
java·运维·云计算
陈苏同学2 小时前
[已解决] VS Code / Cursor / Trae 的 PowerShell 终端 conda activate 进不去环境的常见问题
linux·windows·conda
simple_whu2 小时前
Ubuntu24.04编译ORB_SLAM的一系列报错解决
ubuntu·slam
我不是秃头sheep2 小时前
Ubuntu 安装 Docker(镜像加速)完整教程
linux·ubuntu·docker
重启就好2 小时前
【Ansible】之inventory主机清单
运维·ansible
靡樊3 小时前
网络基础概念
linux·服务器·网络·c++·学习