linux 查看文件夹大小(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在 Linux 系统中,查看文件夹大小是日常运维和开发工作中的一项基础操作。无论是排查磁盘空间不足的问题,还是优化项目目录的存储效率,掌握这一技能都能显著提升工作效率。对于编程初学者而言,理解文件系统的基本逻辑和命令行工具的使用方法至关重要;而对中级开发者来说,深入掌握进阶技巧和自动化脚本的编写则能进一步释放生产力。本文将从基础命令讲起,逐步深入探讨如何高效查看 Linux 文件夹大小,并结合实际案例帮助读者快速上手。


一、基础命令:du 的核心用法

1.1 什么是 du

dudisk 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.txtdu 会将两者的空间视为独立占用。此时,可使用 --apparent-size 参数仅显示文件逻辑大小:

du --apparent-size -sh .  

4.2 虚拟文件系统的干扰

某些挂载点(如 /proc/sys)可能因虚拟文件导致 du 卡顿。建议通过 --one-file-system 参数限制统计范围:

du -sh --one-file-system /  

五、实战案例:监控项目日志文件夹

案例背景

假设你的项目日志文件夹 /var/log/myapp 日趋庞大,需要:

  1. 快速定位占用空间最大的子目录;
  2. 自动清理 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:交互式磁盘使用分析

ncdudu 的增强版,提供交互式界面,适合复杂场景:

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 命令及其组合技巧都是不可或缺的工具。建议读者通过以下步骤巩固知识:

  1. 在本地 Linux 环境中实践本教程的代码示例;
  2. 尝试编写自动化脚本监控磁盘使用情况;
  3. 探索 ncdu 等工具的高级功能。

掌握这些技能后,你将能更高效地管理 Linux 系统资源,为后续的系统优化和开发工作打下坚实基础。

最新发布