当前位置:首页>Linux>Linux du 估算文件和目录的磁盘空间使用情况

Linux du 估算文件和目录的磁盘空间使用情况

  • 2026-10-24 06:51:53
Linux du 估算文件和目录的磁盘空间使用情况

du[1](disk usage)命令用于估算文件和目录的磁盘空间使用量。

基本语法:

du [选项]... [文件]...
# 当前目录下的文件与子目录$ lsfile1.txt file2.txt file3.txt file4.txt t.py      vim

直接无参数使用。

du
  • 显示当前目录及其子目录的空间使用情况
  • 默认以 1024 字节块为单位显示
  • 只显示目录大小,不显示文件大小
$ du8 ./vim12 .

指定文件或目录。

du ./vimdu file1.txt ./vim
  • 显示指定文件或目录的空间使用情况
  • 可同时指定多个文件或目录

一、选项详解

1. 显示所有文件

du -adu --all
  • 显示所有文件和目录的大小
  • 默认只显示目录大小

示例:

# 显示当前目录下所有文件和目录的大小$ du -a4 ./vim/xx.py8 ./vim0 ./file3.txt0 ./t.py0 ./file1.txt0 ./file2.txt0 ./file4.txt12 .

2. 人性化显示

du -hdu --human-readable
  • 使用易读的单位(K、M、G、T)
  • 使用 1024 为基数(1K=1024 字节)
$ du -h8.0K ./vim12K .
du --si
  • 使用 SI 单位制(1000 为基数)
  • 1M=1,000,000 字节
$ du --si8.2k ./vim13k .

3. 总计汇总

du -cdu --total
  • 在所有参数处理完后显示总计
  • 通常与其他选项一起使用
$ du -c8 ./vim12 .12 total
du -sdu --summarize
  • 只显示每个参数的总计,不显示子目录详情
  • 适用于查看目录总大小
$ du -s12 .

组合使用示例:

# 显示每个目录的总大小(人性化显示)$ du -sh /home /var /tmp20K /home43M /var3.4M /tmp# 显示当前目录下所有项目的各自大小$ du -sh *0 file1.txt0 file2.txt0 file3.txt0 file4.txt0 t.py8.0K vim

4. 指定块大小

du -k
  • 以 1024 字节块为单位显示
  • 等价于 --block-size=1K
# 实例$ du -k8 ./vim12 .
du -m
  • 以 1MB(1,048,576 字节)块为单位显示
  • 等价于 --block-size=1M
# 实例$ du -m1 ./vim1 .
du -B 1Gdu --block-size=1G
  • 指定显示单位
  • 支持:K、M、G、T、P、E、Z、Y
# 实例$ du -B 1G1 ./vim1 .

5. 显示字节大小

du -bdu --bytes
  • 以字节为单位显示
  • 等价于 --apparent-size --block-size=1
# 实例$ du -b41 ./vim41 .
du --apparent-size
  • 显示表观大小而非实际占用的磁盘空间
  • 表观大小是文件的实际数据大小
  • 对于稀疏文件特别重要

示例:

# 创建一个稀疏文件$ dd if=/dev/zero of=sparse_file bs=1 count=0 seek=1G# 显示实际磁盘使用(可能很小)$ du -h sparse_file0 sparse_file# 显示1G$ du -h --apparent-size sparse_file1.0G sparse_file

6. 目录深度控制

du -d 1du --max-depth=1
  • 只显示指定深度内的目录
  • 深度 0:du -s(只显示总计)
  • 深度 1:显示当前目录的直接子目录

示例:

# 只显示/home下第一级子目录的大小$ du -h --max-depth=1 /home16K /home/ubuntu20K /home# depth=0$ du -h -d 0 /home20K /home

7. 符号链接处理

du -Ldu --dereference
  • 跟踪符号链接指向的实际文件/目录
  • 显示链接目标的大小
du -Ddu --dereference-argsdu -H
  • 只跟踪命令行参数中的符号链接
  • 不影响递归过程中遇到的链接
du -Pdu --no-dereference
  • 不跟踪符号链接(默认行为)
  • 显示符号链接本身的大小

8. 硬链接计数

du -ldu --count-links
  • 计算所有文件的大小,包括重复的硬链接
  • 默认情况下,多个硬链接只计算一次

9. 单独目录统计

du -Sdu --separate-dirs
  • 报告目录大小时不包括子目录的大小
  • 只计算目录本身及其直接包含的文件

对比示例:

# 不使用-S:目录大小包括子目录$ du -h /home16K /home/ubuntu20K /home# 使用-S:目录大小不包括子目录$ du -h -S /home16K     /home/ubuntu4.0K    /home

10. 文件排除

du --exclude='*.o'
  • 排除匹配模式的文件
  • 支持通配符
du -X exclude.txtdu --exclude-from=exclude.txt
  • 从文件中读取排除模式
  • 每行一个模式

示例:

# 排除所有.o文件和.git目录du -h --exclude='*.o' --exclude='.git' project/

11. 跨文件系统限制

du -xdu --one-file-system
  • 不跨越文件系统边界
  • 只在当前文件系统中递归

12. 大小阈值过滤

du -t 100Mdu --threshold=100M
  • 只显示大于等于指定大小的条目
  • 可与其他选项组合使用
du -t -500k
  • 只显示小于等于指定大小的条目
  • 负数表示小于等于

实用示例:

# 查找大于100MB的目录du -h --threshold=100MB# 查找小于1MB的文件和目录du -a -h -t -1MB# 查找使用超过20000个inode的目录du --inodes -x --threshold=20000 /

13. 时间戳显示

du --time
  • 显示最近修改时间(mtime)
du --time=atimedu --time=access
  • 显示最近访问时间
du --time=ctimedu --time=status
  • 显示状态更改时间
du --time-style=iso
  • 控制时间显示格式
  • 可用格式:full-iso, long-iso, iso, 或自定义格式

示例:

$ du -h --time8.0K 2026-01-15 10:50 ./vim12K 2026-01-15 11:08 .$ du -h --time=atime --time-style=long-iso8.0K 2026-01-15 10:50 ./vim12K 2026-01-15 11:08 .

14. 处理大量文件

du --files0-from=file_list.txt
  • 从文件读取要处理的文件名
  • 文件名以 NULL 字符分隔
  • 适用于文件名包含特殊字符或文件数量过多的情况

示例:

# 生成文件列表$ find /home -type f -print0 > files.txt# 处理列表中的文件$ du --files0-from=files.txt

15. 以 NULL 结尾输出

du -0du --null
  • 每行以 NULL 字符结尾而非换行符
  • 便于处理包含特殊字符的文件名

示例:

$ du -08 ./vim12 .

16. inode 使用情况

du --inodes
  • 显示 inode 使用情况而非磁盘块使用
  • 可用于查找包含大量文件的目录
  • 可与大多数其他选项组合使用

示例:

$ du --inodes -h /home$ du --inodes -a -h /home1 /home/ubuntu/.profile1 /home/ubuntu/.bashrc1 /home/ubuntu/.bash_logout4 /home/ubuntu5 /home

二、实用示例

1:查找大文件/目录

# 查找当前目录下最大的10个目录du -h --max-depth=1 | sort -hr | head -10# 查找所有大于100MB的文件du -a -h -t 100MB | sort -hr

2:按用户统计

# 统计/home下各用户目录大小du -sh /home/*du -sch /home/* | tail -1

3:监控日志目录

# 查看/var/log目录大小du -sh /var/logdu -h --max-depth=1 /var/log

4:备份前检查

# 检查要备份的目录总大小du -sch /etc /home

5:与 find 协作

# 查找30天前修改的大于10MB的文件find /var/log -type f -mtime +30 -exec du -h {} + 2>/dev/null
# 查找并统计特定类型的文件find . -name "*.jpg" -exec du -ch {} + | tail -1

6. 其它

# 监控目录大小变化watch -n 5 "du -sh /tmp"
# 生成详细的磁盘使用报告du -ah /home | sort -rh > disk_usage_report.txt
# 排除多种类型的文件du -h --exclude='*.log' --exclude='*.tmp' --exclude='cache' /var

最后,du 命令更适合估算文件集合的备份大小,而非精确测量设备空间使用量。在需要精确磁盘空间信息时,建议结合使用 df 命令。

参考资料

[1] 

du: https://man.archlinux.org/man/du.1

最新文章

随机文章