导读:本期聚焦于小伙伴创作的《Linux下如何查看目录占用空间大小?常用命令与实战技巧详解》,敬请观看详情。磁盘报警时最头疼的就是找不到是哪个目录吃掉了空间。Linux自带的du命令能逐层统计目录真实占用量,比df更接近业务视角。本文讲清du基础用法、排除干扰目录的参数组合,以及用sort快速定位大目录的管道写法。理解块分配与稀疏文件对数值的影响,可以避免误判。掌握这些后,排查空间问题不再靠猜。

在Linux系统运维和日常开发中,准确掌握某个目录实际占用了多少磁盘空间,是排查存储异常、规划容量以及清理冗余文件的基础能力。与单纯看文件系统整体使用率的df命令不同,统计目录层级占用需要借助du这类遍历文件元数据的工具。不同参数组合会带来截然不同的统计视角,理解其底层逻辑才能避免被缓存文件或挂载点干扰。

Linux下如何查看目录占用空间大小?常用命令与实战技巧详解

du命令的基本工作原理与基础用法

du是disk usage的缩写,其核心逻辑是递归进入指定目录,对每个文件和子目录调用stat类系统调用获取所占用的磁盘块数,再按块大小累加。需要注意的是,Linux文件系统分配空间的最小单位是块(常见为4KiB),因此一个只写了一个字符的文件,在磁盘上也会占用一整块空间。这就解释了为什么du显示的大小往往大于文件内容字节数总和。

最基础的用法是直接运行 du 目录路径,它会输出该目录下所有子目录的累计空间,最后一行是当前目录的总计。但这种原始输出以磁盘块数为单位,可读性极差。加上 -h 参数后可自动转换为K、M、G等人类易读单位。例如 du -h /var/log 能直观看到每个日志子目录占用了多少兆空间。

若只想看目标目录自身的总大小而不展开子目录,应使用 -s(summary)参数。组合 du -sh /home 便是运维中最常用的查看家目录总占用的写法。此时du不会输出中间层级,只给一个汇总值,非常适合写监控脚本时快速取值。

# 查看/opt目录总占用,人类可读
du -sh /opt

# 查看/etc下各子目录占用,人类可读
du -h /etc | sort -h

# 以字节为单位显示某目录总计
du -sb /tmp

排除无关目录与精准控制统计范围

实际服务器上,某些目录如/proc、/sys是虚拟文件系统,或者某些挂载点存放了不希望被计入的外部存储,直接du会拖慢统计甚至得出无意义数据。这时 --exclude 参数非常关键。它可以按路径模式跳过指定目录,比如排除所有名为node_modules的文件夹,能极大加速前端项目磁盘分析。

对于需要跨文件系统的场景,-x 参数限制du只在本文件系统内统计,自动忽略挂载到其他磁盘的分区。这在分析根分区爆满原因时尤为重要,否则du会把/data独立盘的内容也算进根目录报告里。此外,--max-depth 能控制递归深度,例如 --max-depth=1 只统计直接子目录,避免输出被深层结构淹没。

下面示例展示如何综合使用这些参数:在网站根目录中仅看一级子目录占用,排除缓存与挂载盘,并输出可读结果。这种写法在排查云主机空间异常时,比图形化面板更灵活,也更容易写成定时巡检任务。

# 仅统计/var一级目录,排除/logs挂载点,人类可读
du -hx --max-depth=1 --exclude=/var/logs /var

# 排除所有node_modules和.git目录
du -sh --exclude=node_modules --exclude=.git /srv/app

结合排序与管道快速定位空间大户

当目录结构复杂时,单纯罗列占用并无助于决策,必须排序突出顶部消耗者。由于du的 -h 输出带单位,普通sort按字母排会乱序,因此需用 sort -h 让其识别人类可读数字。将 du 与 sort 通过管道连接,再取头几行,就能立刻找到最占空间的子目录。

进一步可配合 head 限制输出条数,形成 du -h --max-depth=1 / | sort -h | tail -n 10 这类经典组合。注意这里用tail取最大项是因为sort -h默认升序,末尾才是最大的。若想降序可加 -r。在自动化报告里,还可以用 awk 抽取数值列做阈值报警,比人工翻日志高效得多。

另一个易忽略的点是稀疏文件(sparse file)与硬链接。du默认统计块占用,稀疏文件逻辑大小大但实占小;而硬链接因共享inode,du默认只计一次,这与某些备份工具的视角不同。理解这些差异,才能在看到du与ls大小不符时做出正确判断,而不是盲目删除文件。

# 找出根下最占空间的5个一级目录
du -hx --max-depth=1 / | sort -h | tail -n 5

# 将结果写入报告并提取超过1G的条目
du -h --max-depth=1 /data | awk '$1 ~ /G/ && $1+0 > 1 {print}'

通过上述多维度参数与管道协作,Linux下查看目录占用空间不再是模糊猜测,而是一套可复用、可脚本化的诊断流程。无论是临时清盘还是长期监控,掌握du的精细用法都能显著降低运维成本。

linuxdu_commanddisk_usage修改时间:2026-08-14 23:15:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。