linux命令du(Linux磁盘使用查看)


Linux命令du(disk usage)是系统管理员和运维人员日常工具库中的核心命令之一,其核心功能在于递归计算指定文件或目录所占用的磁盘空间大小。与传统的ls命令仅显示文件属性不同,du通过遍历文件系统并统计每个文件和子目录的实际占用空间,为存储资源分析提供了精准依据。该命令支持多种输出格式和灵活的参数组合,既能快速汇总根目录的总用量,也可深入排查某个子目录中的异常文件。其重要性体现在三个方面:首先,它是诊断磁盘空间不足问题的首选工具;其次,通过参数配置可实现从概览到细节的多层级分析;再者,结合排序和过滤功能后,能有效定位占用空间较大的文件或目录。尽管现代衍生工具如ncdu提供了更友好的交互界面,但du凭借轻量化、脚本化优势仍保持不可替代的地位。
一、核心功能与基础用法
du命令的基础语法为du [选项] [路径]
,默认以字节为单位递归显示指定路径下所有文件和子目录的磁盘使用量。例如du /var/log
会逐层展示/var/log目录下每个文件及子目录的空间占用情况。核心特点包括:
- 递归遍历:默认深度优先遍历所有子目录
- 实时计算:动态统计实际占用磁盘空间而非文件大小
- 块对齐:按文件系统最小分配单元(通常为4KB)向上取整
参数 | 作用 | 示例 |
---|---|---|
-h | 以人类可读格式(K/M/G)显示 | du -h /home |
-s | 仅显示总计值 | du -sh /var/log |
-a | 包含目录自身的磁盘使用量 | du -ah --max-depth=1 |
二、与df命令的本质区别
虽然du和df都用于磁盘空间分析,但两者存在本质差异:
维度 | du | df |
---|---|---|
分析对象 | 具体文件/目录的占用空间 | 整个文件系统的使用概况 |
数据来源 | 实际扫描文件系统元数据 | 读取文件系统超级块信息 |
输出粒度 | 细粒度到单个文件 | 仅显示挂载点的总量 |
典型应用场景差异:当系统根分区剩余空间告急时,先用df -h
确认是哪个挂载点接近满负荷,再通过du -sh /
定位具体占用大的目录。
三、关键参数深度解析
du命令的参数体系可分为四类:
- 格式化输出参数:-h(人类可读)、-k/-m/-g(固定单位)、-c(显示总计并保留中间结果)
- 遍历控制参数:-L(不跟随符号链接)、-x(限制在单文件系统)、--max-depth(限制递归深度)
- 排除过滤参数:--exclude=PATTERN(跳过匹配项)、--ignore-match=PATTERN(同exclude)
- 精度控制参数:-b(按字节计数)、-D N(只显示大于N的条目)
参数组合 | 适用场景 | 输出特征 |
---|---|---|
du -h --max-depth=1 | 快速查看一级子目录用量 | 仅显示当前目录和直接子目录 |
du -sh | sort -hr | 查找当前目录下最大目录 | 按人类可读格式降序排列 |
du -cS ear.log | 统计所有.log文件总和 | 显示每个文件大小并附加总计 |
四、排序与过滤技巧
原始du输出往往难以直接定位问题,需结合管道和排序工具增强分析能力:
命令结构 | 排序依据 | 效果 |
---|---|---|
du -h | sort -hr | 按人类可读数值降序 | 快速识别最大目录/文件 |
du -b | sort -nr | 按原始字节数降序 | 精确比较原始数值大小 |
du | awk '$1>1000000' | 筛选超过1MB的条目 | 快速过滤小文件干扰 |
实战案例:查找/var/log中最大的3个目录,可执行du -h /var/log/ | sort -hr | head -3
,通过管道将du输出按人类可读格式排序后取前三行。
五、精确度影响因素
du命令的统计结果受多个技术因素制约:
- 文件系统块大小:实际占用空间按文件系统最小分配单元(如4KB)对齐,即使1字节文件也会占用4KB
-
场景 | 参数调整 | 影响结果 |
---|---|---|
统计稀疏文件真实大小 | 无特殊参数 | 显示物理存储空间占用 |
| | |
在实际运维中,du命令的应用场景可分为三类:
随着存储介质的发展和非结构化数据的增长,传统du命令面临新的挑战。一方面,PB级分布式存储系统需要更高效的统计算法;另一方面,容器化环境下的卷挂载机制增加了空间分析的复杂性。未来可能出现基于内存映射文件的即时统计工具,或集成机器学习模型自动识别异常增长目录。尽管如此,du凭借其简单可靠、广泛兼容的特性,仍将在中小型系统和脚本化场景中持续发挥价值。掌握其参数组合和协同使用方法,仍是每个Linux工作者必须修炼的基本功。





