在CentOS系统中,管理磁盘空间是日常运维的重要任务之一,准确查找目录大小可以帮助管理员快速定位占用空间过大的目录,从而进行优化或清理,本文将详细介绍在CentOS中查找目录大小的多种方法,包括使用基本命令、组合命令以及图形化工具,并针对不同场景提供实用技巧。

使用基本命令查找目录大小
du(disk usage)是Linux系统中用于查看文件和目录磁盘使用情况的基本命令,在CentOS中,du命令结合不同选项可以灵活满足各种需求。du -sh /path/to/directory命令可以显示指定目录的总大小,其中-s表示汇总(summarize),-h则以人类可读格式(如KB、MB、GB)显示结果,若需递归查看子目录的大小,可省略-s选项,直接使用du -h /path/to/directory,系统会列出该目录下所有子目录及文件的大小。
对于需要精确数值的场景,可以使用-c选项汇总总大小,或通过--max-depth参数限制递归深度。du -h --max-depth=1 /path/to/directory将只显示第一级子目录的大小,避免输出过多信息。du命令的--exclude选项支持排除特定文件或目录,如du -sh --exclude=*.log /path/to/directory可排除所有.log文件后再计算大小。
结合sort和head命令快速定位大目录
当需要从大量目录中快速找出占用空间最大的几个目录时,可以将du与sort、head命令结合使用。du -sh /* | sort -rh | head -n 10命令会列出根目录下最大的10个一级目录。sort -rh表示以反向(从大到小)人类可读格式排序,而head -n 10则限制输出为前10行,这种方法在排查磁盘空间问题时非常高效,尤其适用于文件系统层级较深的场景。
若需进一步细化,可以指定特定路径,如du -sh /var/* | sort -rh | head -n 5,用于查看/var目录下最大的5个子目录,需要注意的是,如果目录中包含大量文件,此命令可能需要较长时间执行,建议在系统负载较低时运行。
使用ncdu工具进行交互式分析
ncdu(NCurses Disk Usage)是一款基于命令行的交互式磁盘使用分析工具,比du更直观易用,首先需通过yum install ncdu或dnf install ncdu安装(根据CentOS版本选择包管理器),安装后,直接运行ncdu /path/to/directory即可进入交互界面,界面会显示目录大小列表,并支持按名称、大小排序,或通过方向键导航查看子目录。
ncdu的优势在于其交互功能,例如按d键可删除文件或目录,按c键可查看文件数量统计,它还支持扫描过程中实时更新数据,适合动态分析目录变化,对于需要频繁分析磁盘空间的用户,ncdu是比du更高效的选择。

通过find命令查找特定类型文件的大小
若需查找特定类型文件(如.log、.tmp)的总大小,可以结合find和du命令。find /var/log -type f -name "*.log" -exec du -ch {} + | grep total$会统计/var/log目录下所有.log文件的总大小。-exec选项用于对每个匹配文件执行du命令,而grep total$则过滤出汇总行。
另一种方法是使用find的-printf选项,如find /var/log -name "*.log" -printf "%s\n" | awk '{sum+=$1} END {print sum/1024/1024 " GB"}',直接计算文件大小总和并以GB为单位输出,这种方法适合脚本自动化处理,避免手动解析du的输出结果。
使用df命令查看文件系统整体使用情况
虽然df命令主要用于查看文件系统的磁盘使用率,但在分析目录大小时也很有帮助,运行df -h会显示各分区的使用情况,包括已用空间、可用空间等,若发现某个分区空间不足,可通过df -h /path/to/mountpoint确认具体挂载点的使用率,再结合du或ncdu进一步定位大目录。
若/home分区使用率过高,可运行ncdu /home分析用户目录大小,或使用du -sh /home/* | sort -rh | head -n 5找出占用空间最大的用户目录。
图形化工具:Filelight和Baobab
对于习惯图形界面的用户,CentOS提供了KDE的Filelight和GNOME的Baobab工具,Filelight以交互式环形图展示目录结构,直观显示各目录占比;Baobab则提供树状视图和详细统计,可通过yum install filelight或yum install baobab安装,启动后选择目标路径即可分析,这些工具适合初学者或需要可视化展示的场景。
自动化脚本:定期监控目录大小
为避免手动排查,可编写Shell脚本定期监控目录大小,以下脚本会记录/var/log目录大小并输出到日志文件:

#!/bin/bash LOG_DIR="/var/log" DATE=$(date +"%Y-%m-%d %H:%M:%S") SIZE=$(du -sh $LOG_DIR | cut -f1) echo "$DATE - $LOG_DIR size: $SIZE" >> /var/log/size_monitor.log
将脚本加入cron任务(如0 2 * * * /path/to/script.sh),即可每日凌晨2点自动记录日志,管理员可通过分析日志文件跟踪目录大小变化趋势。
注意事项
在使用上述命令时,需注意以下几点:
- 避免在高峰期执行耗时较长的
du或find命令,以免影响系统性能。 - 对于符号链接,默认不跟随目标文件,如需跟随可添加
-L选项。 - 大型目录扫描可能需要较高权限,建议以root用户执行或配合
sudo。
相关问答FAQs
Q1: 为什么du -sh显示的大小与df -h的已用空间不一致?
A1: du计算的是目录内文件的实际大小,而df统计的是文件系统块组的分配情况,两者差异可能由文件保留块(reserved blocks)、文件系统元数据或未释放的inode空间导致。df包含已删除但未关闭的文件(如进程正在写入的日志),而du不统计此类文件。
Q2: 如何快速查找过去30天内修改过的大文件?
A2: 可使用find命令结合-mtime和-exec du实现,
find / -type f -mtime -30 -exec du -h {} + 2>/dev/null | sort -rh | head -n 20
此命令会查找30天内修改过的文件,按大小排序并显示前20个结果。2>/dev/null用于忽略权限不足的错误信息。