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 个文件/目录

结合 sorthead 命令,直接定位"罪魁祸首"。

复制代码
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 使用能极大提高效率。

相关推荐
FJW0208142 小时前
LVS+Keepalived+HAProxy双主高可用负载均衡集群
运维·负载均衡·lvs·高可用
老星*2 小时前
Vaultwarden:轻量级开源密码管理器,自建服务器实现密码自由
运维·服务器·开源
sz66cm2 小时前
Linux基础 -- systemd 用户服务残留条目清除
linux·服务器
❀͜͡傀儡师2 小时前
macOS/Linux Gemini CLI安装指南
linux·运维·macos
liulilittle2 小时前
LINUX RING BUFFER TUN/TAP 2
linux·运维·服务器·开发语言·网络·c++
Chase_______2 小时前
【2026最新保姆级】VMware 安装与虚拟机创建指南 (Window版)
linux
疯狂吧小飞牛2 小时前
修改crashkernel为0
linux·服务器
maosheng114610 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken11 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击