【Linux】du 命令查看文件和目录的磁盘占用

du 命令详解:查看文件和目录的磁盘占用

du(disk usage)是 Linux 中最常用的查看磁盘空间占用情况的命令之一。它可以统计文件目录甚至整个文件系统的实际占用空间,非常适合排查“磁盘满了”“哪个目录吃空间”等场景。

下面从基础用法到高级技巧,一次性把 du 搞懂。

1. 基本用法

du [选项] [路径]

最常用的几种写法:

# 查看当前目录的总大小(人类可读格式)
du -sh .

# 查看指定目录的总大小
du -sh /var
du -sh /home

# 查看当前目录下每个子目录的大小
du -sh * 

# 只看某几个目录
du -sh /var/log /var/cache /tmp

2. 最常用选项速查表

选项含义推荐场景示例
-hhuman-readable(K、M、G、T 显示)几乎必用du -h
-ssummary,只显示总大小快速看某个目录占多少du -sh /var
-c在最后显示总计(grand total)统计多个目录时有用du -sh * -c
--max-depth=N最大显示深度(N=0 只显示总计,N=1 显示一级子目录)控制输出层级du -h --max-depth=1
-aall,同时显示文件(不仅仅目录)找出单个大文件du -ah --max-depth=1
--apparent-size显示逻辑大小(不考虑稀疏文件、压缩等)排查稀疏文件或压缩文件系统--apparent-size
-k / -m以 KB / MB 为单位显示(不推荐,h 更好)老系统或脚本兼容du -sk
--time显示最后修改时间找出最近占用空间的文件/目录du -h --time
--inodes显示 inode 占用情况排查 inode 用尽问题du --inodes -h

3. 推荐的实用组合(背下来就够用)

# 1. 当前目录下占用最大的前 10 个子目录/文件
du -h --max-depth=1 . | sort -hr | head -n 11

# 2. 整个 /home 下占用最大的前 10 个目录
du -h --max-depth=1 /home | sort -hr | head -n 11

# 3. 找出 /var 里占用最大的前 5 个目录
du -h --max-depth=1 /var | sort -hr | head -n 6

# 4. 查看当前目录所有文件和子目录(包含隐藏文件)
du -ah . --max-depth=1 | sort -hr | head -n 20

# 5. 只看目录(排除文件)
du -h --max-depth=1 -- * .[^.]* | sort -hr

# 6. 统计 /data 目录总大小 + 显示每个一级子目录
du -sh /data/* /data/.[!.]* /data/..?* 2>/dev/null | sort -hr

# 7. 快速定位大日志文件
du -ah /var/log | sort -hr | head -n 20

4. 常见误区 & 注意事项

现象原因 / 解释解决 / 正确理解方式
du -sh .df -h 显示的小很多du 显示的是文件实际占用块,df 显示的是文件系统已分配空间(含预留、元数据)正常现象,尤其是大量小文件时差距明显
看到 ... 占用很大这是硬链接计数导致的重复计算忽略它们,关注具体子目录
使用 --apparent-size 后变大了显示的是逻辑大小(稀疏文件显示为“看起来很大”)稀疏文件、压缩文件系统、hole 导致的正常现象
du 运行很慢目录层级深、文件数量多--max-depth=1 先粗看,再深入排查
权限不够显示部分目录普通用户无法访问 /root 等目录sudo du ...

5. 进阶技巧

结合其他命令更强大

# 找出大于 1GB 的文件/目录
du -ah . | awk '$1 ~ /[0-9]+[G]/' | sort -hr

# 按大小排序并显示路径(更清晰)
du -h --max-depth=1 . | sort -h | column -t

# 只统计特定后缀文件(比如日志)
find /var/log -type f -name "*.log" -exec du -h {} + | sort -hr

# 实时监控某个目录增长
watch -n 5 'du -sh /data'

脚本小工具(可选保存为 disktop10

#!/bin/bash
# 用法:disktop10 /var  或  disktop10
dir=${1:-.}

echo "前10大占用($dir):"
du -h --max-depth=1 "$dir" 2>/dev/null | sort -hr | head -n 11

6. 总结:最常用的一行命令

# 快速查看当前目录占用情况 + 前10大子项
du -sh . && du -h --max-depth=1 . | sort -hr | head -n 11

或者更简洁:

du -h --max-depth=1 . | sort -hr | head

掌握这几个组合,基本能应对 90% 的磁盘空间排查场景。

有具体场景想排查(比如 /var 爆满、docker 占用大、某个用户家目录超大),可以告诉我,我帮你写更针对性的命令~

文章已创建 4485

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部