找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2222

积分

0

好友

313

主题
发表于 16 小时前 | 查看: 1| 回复: 0

du (disk usage) 命令用于估算文件和目录的磁盘空间使用量,是 Linux 系统管理和日常运维工作中不可或缺的工具。

基本语法:

du [选项]... [文件]...

直接使用:
如果直接无参数使用 du 命令,会显示当前目录及其所有子目录的磁盘空间使用情况。默认以 1024 字节块为单位,并且只显示目录的总大小,不单独列出文件。

# 当前目录下的文件与子目录
$ ls
file1.txt file2.txt file3.txt file4.txt t.py      vim

$ du
8 ./vim
12 .

指定目标:
你也可以指定具体的文件或目录路径,du 会计算并显示其大小,支持同时指定多个目标。

du ./vim
du file1.txt ./vim

一、核心选项详解

1. 显示所有文件 (-a / --all)

默认情况下,du 只显示目录的汇总大小。使用 -a 选项可以显示目录中每一个文件的大小。

$ du -a
4 ./vim/xx.py
8 ./vim
0 ./file3.txt
0 ./t.py
0 ./file1.txt
0 ./file2.txt
0 ./file4.txt
12 .

2. 人性化显示大小 (-h / --human-readable)

使用 -h 选项,du 会以 K、M、G、T 等易读的单位显示大小(以 1024 为基数)。

$ du -h
8.0K ./vim
12K .

--si 选项则使用 SI 单位制(以 1000 为基数),例如 1M=1,000,000 字节。

$ du --si
8.2k ./vim
13k .

3. 汇总与总计 (-c / -s)

  • -c / --total: 在处理完所有参数后,额外显示一个总计行。
    $ du -c
    8 ./vim
    12 .
    12 total
  • -s / --summarize: 只显示每个指定参数的总计大小,不显示其子目录的详情。非常适合快速查看一个目录的总占用空间。
    $ du -s
    12 .

组合使用示例:
查看多个目录各自的汇总大小(人性化显示):

$ du -sh /home /var /tmp
20K /home
43M /var
3.4M /tmp

查看当前目录下所有项目的各自大小:

$ du -sh *
0 file1.txt
0 file2.txt
0 file3.txt
0 file4.txt
0 t.py
8.0K vim

4. 指定显示单位 (-k, -m, -B)

  • -k: 以 KB (1024字节) 为单位显示,等同于 --block-size=1K
  • -m: 以 MB (1,048,576字节) 为单位显示,等同于 --block-size=1M
  • -B SIZE / --block-size=SIZE: 指定自定义单位,支持 K, M, G, T, P, E, Z, Y。
    $ du -m
    1 ./vim
    1 .

5. 显示字节与表观大小 (-b, --apparent-size)

  • -b / --bytes: 直接以字节为单位显示大小。
  • --apparent-size: 显示文件的“表观大小”(即文件内容实际的数据量),而不是它在磁盘上占用的块空间。这对于处理稀疏文件(sparse file)尤为重要。

稀疏文件示例:

# 创建一个1G大小的稀疏文件(实际磁盘占用可能为0)
$ dd if=/dev/zero of=sparse_file bs=1 count=0 seek=1G

# 显示实际磁盘占用(很小)
$ du -h sparse_file
0 sparse_file

# 显示表观大小(1G)
$ du -h --apparent-size sparse_file
1.0G sparse_file

6. 控制目录递归深度 (-d / --max-depth)

限制 du 命令递归的目录深度。

  • -d 0 / --max-depth=0: 等价于 -s,只显示总计。
  • -d 1 / --max-depth=1: 显示当前目录的直接子目录。
# 只显示/home下第一级子目录的大小
$ du -h --max-depth=1 /home
16K /home/ubuntu
20K /home

7. 处理符号链接 (-L, -H, -P)

  • -L / --dereference: 跟踪并显示符号链接所指向的实际目标的大小。
  • -H / --dereference-args: 仅跟踪命令行参数中指定的符号链接。
  • -P / --no-dereference: 不跟踪符号链接(默认行为),显示链接文件本身的大小。

8. 硬链接处理 (-l / --count-links)

默认情况下,du 对多个硬链接指向的同一文件数据只计算一次。使用 -l 选项会计算所有硬链接,可能导致统计结果偏大。

9. 单独目录统计 (-S / --separate-dirs)

报告目录大小时,不包括其子目录的大小,只计算目录本身及其直接包含的文件。

# 不使用 -S:/home 的大小包含了子目录 /home/ubuntu
$ du -h /home
16K /home/ubuntu
20K /home

# 使用 -S:/home 的大小只计算其直接包含的文件
$ du -h -S /home
16K     /home/ubuntu
4.0K    /home

10. 排除文件 (--exclude, -X)

  • --exclude=PATTERN: 排除匹配指定模式的文件或目录,支持通配符。
  • -X FILE / --exclude-from=FILE: 从指定文件中读取要排除的模式列表(每行一个)。
# 排除所有.o文件和.git目录
du -h --exclude='*.o' --exclude='.git' project/

11. 不跨越文件系统 (-x / --one-file-system)

只在当前文件系统中递归计算,不统计挂载在其他设备上的目录。

12. 按大小阈值过滤 (-t / --threshold)

只显示大小大于等于指定阈值的条目。若阈值为负数,则显示大小小于等于其绝对值的条目。

# 查找大于100MB的目录
du -h --threshold=100MB

# 查找小于1MB的文件和目录
du -a -h -t -1MB

13. 显示时间戳 (--time)

显示文件或目录的最近修改时间(mtime)。可以通过 --time=atime--time=ctime 显示访问时间或状态更改时间。使用 --time-style 控制时间格式。

$ du -h --time
8.0K 2026-01-15 10:50 ./vim
12K 2026-01-15 11:08 .

14. 从文件读取目标 (--files0-from)

从指定文件中读取要处理的文件名列表(以 NULL 字符分隔),适用于处理大量文件或文件名包含特殊字符的情况。

$ find /home -type f -print0 > files.txt
$ du --files0-from=files.txt

15. 以 NULL 字符结尾输出 (-0 / --null)

输出的每行以 NULL 字符结尾,而非换行符,便于 xargs -0 等命令处理。

16. 显示 inode 使用情况 (--inodes)

显示 inode 的使用数量,而非磁盘空间占用。可用于快速定位哪个目录包含了海量小文件,这在某些文件系统和场景下对性能影响显著。

$ du --inodes -h /home
$ du --inodes -a -h /home
1 /home/ubuntu/.profile
1 /home/ubuntu/.bashrc
1 /home/ubuntu/.bash_logout
4 /home/ubuntu
5 /home

二、实用场景与命令组合

掌握了核心选项后,我们可以组合使用 du 命令来解决实际问题。

1. 定位占用空间最大的目录或文件
这是 du 最经典的用途。结合 sorthead 命令,可以快速找出“元凶”。

# 查找当前目录下最大的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/log
# 查看其下各子目录/日志文件大小
du -h --max-depth=1 /var/log

4. 备份前预估数据量
在实施备份前,先估算需要备份的数据总量。

du -sch /etc /home /opt/important_data

5. 与 find 命令强强联合
find 负责筛选,du 负责统计,这是非常强大的组合。

# 查找并统计30天前修改的、大于10MB的文件
find /var/log -type f -mtime +30 -exec du -h {} + 2>/dev/null

# 查找并汇总当前目录下所有.jpg图片的总大小
find . -name "*.jpg" -exec du -ch {} + | tail -1

6. 其他实用技巧

# 使用 watch 命令动态监控/tmp目录大小变化(每5秒刷新)
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 命令。dudf 结合使用,才能对系统的存储状态有全面的了解。

希望这篇详细的指南能帮助你更高效地使用 du 命令管理磁盘空间。更多Linux系统管理和运维技巧,欢迎在技术社区交流探讨。




上一篇:基于K8s与Jenkins+ArgoCD的CI/CD方案,支撑每日数百次部署
下一篇:Google Antigravity Agent Skills 实战:从创建Pytest测试规范到高级脚本技能
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-16 20:25 , Processed in 0.229361 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表