du
的核心作用:磁盘占用空间(Disk Usage)
du
统计的是文件或目录实际占用的磁盘块数量,而非文件的“逻辑大小”,关键区别在于:
-
块大小(Block Size)
磁盘存储以固定大小的“块”为单位(4KB),即使一个文件只有 1 字节,它也会独占至少 1 个块(即显示 4KB)。
示例:echo "A" > small.txt # 创建仅 2 字节的文件 ls -l small.txt # 显示逻辑大小:2 字节 du -h small.txt # 显示磁盘占用:4.0K(因占用 1 个块)
-
目录的元数据开销
目录本身需要存储子文件信息(inode、文件名等),这些元数据也占用磁盘块。
示例:du -sh empty_dir/ # 空目录可能显示 4.0K(元数据占用)
为什么用户觉得“不能查看文件大小”?
-
与
ls -l
的混淆ls -l
显示文件的逻辑大小实际字节数)。du
显示物理占用空间(逻辑大小 + 块填充 + 元数据)。
典型场景:ls -l bigfile.iso # 显示 1.5GB(逻辑大小) du -h bigfile.iso # 显示 1.5G(若块对齐则相同) du -h small.txt # 显示 4K(与 ls 结果不同!)
-
默认统计目录而非文件
直接运行du
会递归统计当前目录下所有内容,输出大量数据,若想查看单个文件,需明确指定路径:du -h /path/to/file.txt # 正确查看单个文件
常见问题场景与解决方案
问题现象 | 原因 | 解决方案 |
---|---|---|
du 结果比 ls -l 大很多 |
文件含大量小文件或稀疏文件 | 用 du --apparent-size 查看逻辑大小 |
空目录显示 4KB | 目录元数据占用磁盘块 | 正常现象,无需处理 |
du 不显示文件大小 |
未指定文件路径或权限不足 | 检查路径并添加 sudo |
统计结果包含子目录 | 默认递归统计 | 用 -s 参数(du -sh dir/ ) |
正确使用 du
的技巧
- 查看文件/目录的磁盘占用
du -sh /path # -s: 汇总, -h: 人类可读格式
- 查看逻辑大小(类似
ls
)du -h --apparent-size /path/to/file
- 排除子目录/文件
du -sh --exclude="*.log" /path # 忽略所有.log文件
- 按大小排序目录内容
du -h /path | sort -h # 按人类可读值排序
何时用 du
vs ls
?
- 用
ls -l
:
快速查看文件的逻辑大小(如文本文件内容长度)。 - 用
du
:- 分析文件/目录实际消耗的磁盘空间。
- 排查磁盘已满但找不到大文件的问题。
- 统计目录总占用(如
du -sh /home
)。
关键总结:
du
并非“不能”查看文件大小,而是其统计维度(物理磁盘块占用)与用户预期的“逻辑大小”不同,理解块存储机制和命令参数差异后,即可高效使用。
引用说明参考 Linux man du
官方文档及 Filesystem Hierarchy Standard (FHS),结合磁盘存储原理验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6446.html