linux du 命令

du (Disk Usage) 是 Linux 系统中用于统计文件或目录所占磁盘空间大小的命令。

与 df(查看分区/文件系统 的整体使用情况)不同,du 的核心作用是深入目录内部 ,帮你找出具体是哪个文件夹或文件占用了大量空间。


1. 基本语法

复制代码
du [选项] [文件或目录]
  • 如果不加参数,默认显示当前目录下所有子目录的大小(递归显示)。
  • 如果指定了目录,则显示该目录及其子目录的大小。
  • 如果指定了文件,则显示该文件的大小。

2. 常用选项 (Options) ------ 必记组合

选项 全称 说明 示例
-h --human-readable 人类可读 。以 K, M, G, T 为单位 (最常用)。 du -h
-s --summarize 仅显示总计。不列出每个子目录,只显示指定目标的总和。 du -sh /var
-a --all 显示所有文件的大小,而不仅仅是目录。 du -ah
-c --total 在最后增加一行总计 (Combined total)。 du -ch
-d N (或 --max-depth=N) --max-depth 限制递归深度 。只统计到第 N 层子目录。排查大目录神器。 du -h -d 1
--exclude 排除特定的文件或目录 (支持通配符)。 du -h --exclude="*.log"
-x --one-file-system 跳过其他文件系统。只统计当前所在分区,不跨越挂载点 (如 NFS, tmpfs)。 du -xh
-t --threshold 只显示大于指定大小的条目。 du -h -t 100M

3. 实战场景与经典命令

场景 A:快速查看当前目录下各一级子目录的大小 (最常用)

这是运维排查"磁盘满了"时的第一步操作。

复制代码
du -h -d 1
# 或者
du -h --max-depth=1
  • 含义 :以人类可读格式,只显示当前目录下第一层子目录的大小,不深入显示更深层的细节。

  • 输出示例 :text

    复制代码
    14.0K    ./bin
    21.2G    ./var
    3500M    ./home
    42.0G    .

    一眼看出 ./var 占了 1.2G,是主要嫌疑对象。

场景 B:查看特定目录的总大小

想知道 /var/log 整个文件夹占了多少空间,不想看里面的细节:

复制代码
du -sh /var/log
  • -s: Summarize (总计)
  • -h: Human-readable (人类可读)
  • 输出 : 1.2G /var/log
场景 C:找出当前目录下最大的前 10 个文件/目录

结合 sort 和 head 命令,直接定位"罪魁祸首"。

复制代码
du -ah | sort -rh | head -n 10
  • du -ah: 列出所有文件和目录的大小。
  • sort -rh: 按人类可读的数字大小进行反向排序 (Reverse, Human),即从大到小。
  • head -n 10: 只取前 10 行。
场景 D:排除不需要统计的目录

比如你想统计项目代码大小,但不想算上巨大的 node_modules 或 .git 目录:

复制代码
du -h -d 1 --exclude="node_modules" --exclude=".git"
  • 支持多次使用 --exclude。
  • 也可以使用通配符:--exclude="*.log"。
场景 E:只统计当前分区 (防止遍历挂载的网络存储)

如果你在一个挂载了巨大网络存储 (NFS) 的目录下运行 du,可能会跑很久甚至卡死。加上 -x 可以限制只在当前物理分区统计:

复制代码
1du -xh -d 1
场景 F:查找大于 500M 的大文件
复制代码
du -ah -t 500M
  • -t 500M: Threshold (阈值),只显示大于 500MB 的条目。

4. du vs df (核心区别回顾)

很多新手会困惑:为什么 du 统计的总和 小于 df 显示的已用空间?

特性 du (Disk Usage) df (Disk Free)
统计对象 文件 (遍历目录树累加文件大小) 文件系统块 (读取超级块元数据)
速度 较慢 (需要遍历文件) 极快 (直接读取元数据)
差异原因 不统计 : 1. 已被删除但被进程占用的文件 ("幽灵文件") 2. 隐藏的系统保留空间 (reserved blocks) 3. 某些特殊文件系统开销 包含 : 1. 上述所有空间占用
典型用途 "哪个文件夹占用了我的空间?" "我的硬盘还剩多少空间?"

💡 故障排查技巧 :

如果 df 显示磁盘已满 (100%),但 du -sh /* 加起来只有 50%:

  1. 大概率是有文件被删除了,但进程(如 Java, Nginx, MySQL)还开着它。
  2. 执行 lsof | grep deleted 查找这些文件。
  3. 重启对应进程或清空文件内容 (> /proc/PID/fd/FD) 释放空间。

5. 输出字段详解

执行 du -h 时:

复制代码
14.0K    ./config
21.5M    ./logs/access.log
32.3G    ./data
  • 第一列:大小 (带单位)。
  • 第二列:文件或目录路径。
  • 注意:对于目录,显示的是该目录下所有内容的累计大小。

6. 总结与推荐命令

  • 看当前目录谁最大 :bash

    复制代码
    du -h -d 1 | sort -rh | head -n 10
  • 看某个文件夹总大小 :bash

    bash 复制代码
    du -sh /path/to/dir
  • 查找大于 1G 的所有文件 :bash

    bash 复制代码
    du -ah -t 1G
  • 统计当前分区(忽略挂载点) :bash

    复制代码
    1du -xh -d 1

du 是清理磁盘空间时不可或缺的工具,配合 sort 使用能极大提高效率。

相关推荐
未济3 天前
linux 配置环境变量
linux
傲世仙尊3 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.3 天前
进程间通信
linux
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-053 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏3 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK3 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid