在Linux系统中,du(disk usage)命令是一个用于估算文件和目录磁盘使用空间的实用工具,它通过递归遍历指定路径下的所有文件和子目录,计算它们所占用的磁盘块数量,并以人类可读的格式(如KB、MB、GB)或字节数输出结果,du命令在日常系统管理、磁盘空间排查和文件整理中具有不可替代的作用,掌握其常用参数和技巧能显著提升工作效率。

du命令的基本语法为du [选项] [文件或目录]
,如果不指定任何参数,du会默认显示当前目录下所有子目录的磁盘使用量,结果以块(通常是1024字节)为单位显示,且不显示总计行,在终端中输入du
,会输出类似4 ./docs
、8 ./images
、12 .
的结果,其中数字表示目录占用的块数,./docs
和./images
是子目录名,最后的12
表示当前目录总占用12块。
为了更直观地理解磁盘使用情况,常用-h
(human-readable)参数将数值转换为易读的单位,例如du -h
会显示为0K ./docs
、0K ./images
、12K .
,若只想查看指定目录的使用量,可加上路径参数,如du -h /var/log
会显示/var/log
目录及其子目录的磁盘占用,当需要查看某个目录的总使用量(不递归显示子目录详情)时,-s
(summarize)参数非常实用,例如du -sh /home
会直接输出/home
目录的总占用空间,而不会列出每个子目录的细节。
du命令还支持通过-a
(all)参数显示所有文件(包括子目录中的文件)的使用量,而不仅仅是目录,例如du -ah /tmp
会列出/tmp
下每个文件和目录的占用情况,若要排除特定类型的文件,可结合--exclude
参数,如du -sh --exclude="*.log" /var/log
会排除所有.log
文件后计算/var/log
的总使用量,对于大容量文件系统,使用--max-depth
参数可以限制递归深度,避免输出过多层级信息,例如du -h --max-depth=1 /home
只会显示/home
的直接子目录使用量,而不会深入到孙目录。
在排查磁盘空间时,结合sort
命令可以快速定位占用空间最大的目录,例如du -sh /* 2>/dev/null | sort -rh | head -n 10
会列出根目录下前10个最大的子目录及其占用空间(2>/dev/null
用于忽略无权限目录的错误信息),若要以KB、MB或GB为单位精确显示,可使用--block-size
参数,如du -h --block-size=MB /usr
会以MB为单位显示/usr
目录的使用量。

du命令的输出结果可能包含大量无关信息,此时可通过-x
(exclude-other-filesystems)参数排除其他文件系统的占用,避免统计冗余数据,例如du -shx /mnt
只会计算/mnt
所在文件系统的空间,而不会挂载的其他分区(如/mnt/usb
)的占用。-c
(total)参数会在输出末尾显示所有文件和目录的总计值,例如du -ch /var /usr
会在分别显示/var
和/usr
的使用量后,输出total
行表示两者总和。
以下是du命令常用参数的总结:
参数 | 功能描述 |
---|---|
-h |
以人类可读格式显示(K、M、G) |
-s |
只显示总计值,不显示子目录详情 |
-a |
显示所有文件的使用量,包括文件 |
--exclude=PATTERN |
排除匹配模式的文件或目录 |
--max-depth=N |
限制递归深度为N层 |
-x |
排除其他文件系统的占用 |
-c |
显示总计值 |
--block-size=SIZE |
指定块大小(如KB、MB、GB) |
在实际应用中,du命令常与其他工具结合使用,通过du -sh * | sort -rh
可以快速定位当前占用空间最大的子目录;使用find
命令配合du可以筛选特定条件的文件,如find / -type f -size +100M -exec du -h {} \;
会查找大于100MB的文件并显示其大小,需要注意的是,du命令统计的是文件占用的磁盘块数,而非文件的实际大小(一个5KB的文件可能占用8KB磁盘块,因为磁盘分配以块为单位),因此在精确计算文件大小时,需结合ls -l
或wc -c
命令。
相关问答FAQs:

Q1: du命令显示的磁盘使用量与df命令显示的已用空间为何不一致?
A1: 这是因为两者的统计逻辑不同,du命令从文件系统角度统计实际文件占用的磁盘块数,而df命令从分区角度统计已分配的块数(包括文件占用的空间和保留空间、元数据等),删除一个文件后,du会立即反映空间减少,但df可能因文件系统缓存未刷新而暂时不变;du不统计未被文件占用的预留空间,而df会包含这部分数据。
Q2: 如何使用du命令快速查找某个目录下占用空间最大的10个文件或目录?
A2: 可通过以下命令实现:du -ah /path/to/directory | sort -rh | head -n 10
。-ah
表示以人类可读格式显示所有文件和目录,sort -rh
按数值降序排序,head -n 10
提取前10行结果,查找/var/log
下最大的10个文件或目录,执行du -ah /var/log | sort -rh | head -n 10
即可。