linux 查看文件夹大小(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
在 Linux 系统中,查看文件夹大小是日常运维和开发工作中的一项基础操作。无论是排查磁盘空间不足的问题,还是优化项目目录的存储效率,掌握这一技能都能显著提升工作效率。对于编程初学者而言,理解文件系统的基本逻辑和命令行工具的使用方法至关重要;而对中级开发者来说,深入掌握进阶技巧和自动化脚本的编写则能进一步释放生产力。本文将从基础命令讲起,逐步深入探讨如何高效查看 Linux 文件夹大小,并结合实际案例帮助读者快速上手。
一、基础命令:du
的核心用法
1.1 什么是 du
?
du
是 disk usage 的缩写,是 Linux 系统中用于统计文件或目录磁盘占用情况的核心工具。它的设计理念类似于“抽屉整理师”:当你想了解一个抽屉(文件夹)里所有物品(文件和子目录)的总体积时,du
会逐层扫描并计算总和。
语法示例:
du [选项] 目标路径
1.2 最简单的用法:查看单个文件夹的大小
du 目标文件夹路径
例如,查看当前目录(.
)的大小:
du .
输出结果可能类似:
4096 ./subdir
8192 ./file.txt
12288 .
这里需要注意:
- 第一列数字表示磁盘占用空间(单位为字节),第二列是路径;
- 默认输出的数值可能难以直观理解(如 12288 字节=12KB),因此需要结合
-h
参数优化显示。
二、常用参数:让输出更清晰
2.1 -h
:人性化显示(human-readable)
通过 -h
参数,du
会将字节自动转换为 KB、MB、GB 等单位,输出更易读。
du -h .
示例输出:
4.0K ./subdir
8.0K ./file.txt
12K .
2.2 -s
:汇总显示总大小
若只需查看目标文件夹的总大小,而非逐层统计子目录,可使用 -s
(summarize)参数:
du -sh .
此时输出仅显示总和:
12K .
比喻:这就像用秤称整个包裹的重量,而非逐个称量包裹内的物品。
2.3 -a
:显示所有文件和目录的大小
默认情况下,du
仅统计目录的总大小,而 -a
(all)参数会列出目录内所有文件和子目录的详细信息:
du -ah .
输出可能包含:
4.0K ./subdir
8.0K ./file.txt
12K .
注意:此参数可能产生大量输出,建议在小规模目录中使用。
三、进阶技巧:排序、过滤与组合命令
3.1 结合 sort
排序:快速定位大文件
若需查看某个目录下占用空间最大的文件或子目录,可将 du
的输出与 sort
命令结合:
du -h --max-depth=1 | sort -hr
--max-depth=1
:限制递归深度为一级子目录;sort -hr
:按人类可读的大小(-h)逆序(-r)排序。
示例输出:
12K .
8.0K ./file.txt
4.0K ./subdir
3.2 使用 awk
提取关键信息
若只需显示文件夹名称和大小,可借助 awk
筛选输出列:
du -sh * | awk '{print $2 "\t" $1}'
输出格式变为:
./subdir 4.0K
./file.txt 8.0K
. 12K
3.3 排除特定文件或目录
通过 --exclude
参数可忽略不需要统计的路径。例如,排除 .git
目录:
du -sh --exclude='.git' .
四、常见误区与解决方案
4.1 硬链接导致的重复计算
Linux 的硬链接机制可能导致 du
统计结果偏大。例如,若文件 file.txt
被硬链接到 link.txt
,du
会将两者的空间视为独立占用。此时,可使用 --apparent-size
参数仅显示文件逻辑大小:
du --apparent-size -sh .
4.2 虚拟文件系统的干扰
某些挂载点(如 /proc
或 /sys
)可能因虚拟文件导致 du
卡顿。建议通过 --one-file-system
参数限制统计范围:
du -sh --one-file-system /
五、实战案例:监控项目日志文件夹
案例背景
假设你的项目日志文件夹 /var/log/myapp
日趋庞大,需要:
- 快速定位占用空间最大的子目录;
- 自动清理 7 天前的日志文件。
操作步骤
5.1 统计日志目录大小
du -sh /var/log/myapp
若输出为 2.1G
,说明需要进一步分析。
5.2 排序子目录并输出前 5 名
du -h --max-depth=1 /var/log/myapp | sort -hr | head -n 5
假设输出显示 error_logs
占用 1.8G,需重点关注此目录。
5.3 自动清理旧文件
编写脚本 cleanup.sh
:
#!/bin/bash
find /var/log/myapp/error_logs -type f -mtime +7 -exec rm -v {} \;
echo "清理完成:$(date)"
通过 crontab
定期执行此脚本,确保磁盘空间充足。
六、其他相关命令与工具
6.1 ncdu
:交互式磁盘使用分析
ncdu
是 du
的增强版,提供交互式界面,适合复杂场景:
ncdu /path/to/directory
其功能包括:
- 快速缩放目录层级;
- 删除冗余文件;
- 统计隐藏文件等。
6.2 df
:查看全局磁盘空间
若需了解整个系统的磁盘使用情况,可使用 df
命令:
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 15G 5G 75% /
结论
通过本文,读者已掌握从基础到进阶的 Linux 文件夹大小查看方法,并能结合实际场景解决常见问题。无论是排查磁盘空间瓶颈,还是优化项目存储结构,du
命令及其组合技巧都是不可或缺的工具。建议读者通过以下步骤巩固知识:
- 在本地 Linux 环境中实践本教程的代码示例;
- 尝试编写自动化脚本监控磁盘使用情况;
- 探索
ncdu
等工具的高级功能。
掌握这些技能后,你将能更高效地管理 Linux 系统资源,为后续的系统优化和开发工作打下坚实基础。