在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