在Linux系统中,管理磁盘空间是日常运维和开发中常见的任务,准确查看文件夹大小有助于快速定位占用空间过多的目录,从而进行清理或优化,本文将详细介绍Linux中查看文件夹大小的多种方法,从基础命令到高级技巧,帮助用户在不同场景下高效获取目录大小信息。

基础命令:du——查看目录磁盘占用的核心工具
du(disk usage)是Linux中专门用于查看文件和目录磁盘占用的命令,其基本语法为du [选项] [目录/文件],默认情况下,du会递归显示指定目录下每个子目录和文件的磁盘占用,单位为512字节的块(blocks),输出结果可能不够直观,因此通常结合选项使用,以下是核心参数及示例:
-
-h或--human-readable:以人类可读格式显示大小(如K、M、G),默认显示的是块数,加-h后更易理解。du -h /home/user # 查看/home/user目录及其子目录的大小,以K/M/G为单位
-
-s或--summarize:仅显示总计大小,不显示子目录的详细信息,适合快速查看目录总大小。du -sh /var/log # 仅显示/var/log目录的总占用空间
-
-c或--total:显示所有文件和目录的总和,常与其他选项配合使用,比如查看多个目录的总占用。du -sh /home /tmp /var # 分别显示/home、/tmp、/var的大小,并最后输出总和
-
--max-depth=N:限制递归深度,N为数字,1表示只显示当前目录下一级子目录的大小,避免输出过多层级。du -h --max-depth=1 /home # 查看/home下各直接子目录的大小,不递归
-
-a或--all:显示所有文件的大小,默认只显示目录大小,加-a后会同时列出文件占用。du -ha /etc # 查看/etc目录下所有文件和子目录的大小
du与df的区别:不要混淆“目录占用”与“文件系统空间”
虽然du是查看目录大小的主要工具,但有时会与df(disk free)命令混淆。df用于查看文件系统的整体使用情况(如已用空间、可用空间、挂载点等),而du则是计算具体文件或目录的实际占用空间,两者的核心区别如下:
| 命令 | 主要用途 | 输出信息 | 常用场景 |
|---|---|---|---|
du |
查看文件/目录的磁盘占用 | 具体文件或目录的大小(可递归) | 定位大文件、清理目录 |
df |
查看文件系统的使用情况 | 文件系统总大小、已用、可用、挂载点 | 检查磁盘整体空间是否不足 |
df -h会显示/dev/sda1挂载点的总空间、已用空间等,而du -sh /则显示根目录下所有文件的实际占用大小,两者数值可能不同(原因见后文FAQ)。

高级技巧:灵活组合du与其他工具
排除特定文件或目录
使用--exclude选项可排除不需要统计的文件或目录,例如排除.cache目录:
du -h --exclude=".cache" /home/user # 查看/home/user大小,但不统计.cache目录
若需排除多个类型,可多次使用--exclude,如排除.log和.tmp文件:
du -h --exclude="*.log" --exclude="*.tmp" /var/log
按文件类型查找大小
结合find命令可筛选特定类型的文件并统计大小,例如查找.log文件的总占用:
find /var/log -type f -name "*.log" -exec du -ch {} + | grep total
解释:find查找所有.log文件,-exec将文件传递给du -ch(-c显示总和),最后通过grep total提取总大小。
按大小排序,快速定位大目录
查看当前目录下子目录大小并从大到小排序,便于优先清理大目录:
du -h --max-depth=1 . | sort -hr
解释:sort -hr表示按人类可读格式(-h)反向(-r)排序,数值大的排在前面。
实时监控目录大小变化
使用watch命令定时刷新目录大小,例如每2秒查看一次/data目录的变化:
watch -n 2 "du -sh /data"
交互式工具:ncdu(推荐)
ncdu(NCurses Disk Usage)是第三方工具,提供交互式界面,支持导航、删除、排序等功能,比du更直观,安装方式(根据发行版不同):

- Debian/Ubuntu:
sudo apt install ncdu - CentOS/RHEL:
sudo yum install ncdu
使用时直接运行:ncdu /path/to/directory # 进入交互界面,可通过方向键导航,按`d`删除文件
实际应用场景举例
-
场景1:服务器磁盘告警,定位大目录
若根目录占用过高,可先查看一级子目录大小:du -sh /* --max-depth=1 | sort -hr
假设发现
/var占用最大,再进入/var用相同方法排查,最终定位到/var/log/nginx日志文件过多,清理即可。 -
场景2:开发环境清理,排除无用文件
清理项目目录时,需排除.git和node_modules(通常占用较大):du -h --exclude=".git" --exclude="node_modules" /project
相关问答FAQs
Q1:为什么用du查看的目录大小和df中对应文件系统的已用空间不一致?
A:两者统计逻辑不同。du统计的是目录下所有文件的实际数据大小(不包括文件元数据如inode、权限等信息),而df统计的是文件系统中已分配的块(包括文件数据、元数据、保留空间等)。
- 删除文件后,
du会立即反映大小减少,但df可能因文件系统未及时回收块而暂时不变(需运行sync或等待文件系统自动回收); - 空文件(如
touch file)会占用inode,df会统计其占用的块(即使数据为0),但du可能显示0(若无数据)。
Q2:如何快速找到当前目录下占用空间最大的10个文件或文件夹?
A:可通过du结合sort和head命令实现:
du -ah . | sort -hr | head -n 10
解释:-a显示所有文件,-h人类可读,sort -hr按大小反向排序,head -n 10取前10条,若需交互式操作,安装ncdu后运行ncdu .,通过界面快速定位并管理大文件(如按大小排序、按名称筛选等)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26929.html