在linux系统运维和日常使用中,查看目录占用的空间大小是高频操作,无论是排查磁盘满的问题,还是清理无用文件,都需要先明确各个目录的空间占用情况。linux系统提供了多个命令可以查看目录空间,其中du命令是最常用的工具。

du命令基础用法
du是disk usage的缩写,专门用于统计文件和目录的磁盘使用情况,默认情况下会递归统计指定目录下所有子文件和子目录的空间占用。
最基础的查看目录占用空间的命令格式如下:
# 查看当前目录下所有子目录的空间占用,单位为KB du # 查看指定目录的空间占用,比如查看/var目录 du /var
默认输出的结果可读性较差,都是KB为单位的数字,实际使用中通常会搭配参数提升可读性。
常用参数详解
-h 参数:人性化显示大小
加上-h参数后,du命令会自动将空间大小转换为K、M、G等易读的单位,是最常用的参数组合。
# 人性化显示当前目录的总空间占用 du -h # 查看/var目录的空间占用,人性化显示 du -h /var
-s 参数:只显示总大小
默认du会输出目录下每个子项的空间占用,加上-s参数后只会显示指定目录的总占用大小,不会展开子目录的明细。
# 只查看/var目录的总占用大小,人性化显示 du -sh /var # 查看当前用户家目录的总大小 du -sh ~
-d 参数:指定递归深度
如果需要查看目录下一级子目录的占用情况,不需要递归到所有层级,可以使用-d参数指定递归深度,比如-d 1表示只统计到一级子目录。
# 查看/var目录下一级子目录的空间占用,人性化显示 du -h -d 1 /var # 等价于 du -hd 1 /var du -hd 1 /var
--max-depth 参数
--max-depth和-d参数作用一致,也是指定递归深度,比如--max-depth=1效果和-d 1相同。
# 查看根目录下一级子目录的空间占用 du -h --max-depth=1 /
排序查看占用最大的目录
当我们需要排查哪个子目录占用空间最大时,可以结合sort命令对du的输出结果进行排序,快速定位大目录。
# 查看/var下一级子目录的空间占用,按大小降序排序,取前10个 du -hd 1 /var | sort -hr | head -10
这里的sort -hr表示按照人类可读的大小格式进行降序排序,head -10表示只取前10行结果。
df命令与du命令的区别
很多用户会混淆df和du命令,df是disk free的缩写,主要用于查看文件系统的磁盘总体使用情况,包括总容量、已用容量、可用容量和使用率,而du是统计具体目录或文件的磁盘占用。
# 查看所有挂载的文件系统的磁盘使用情况,人性化显示 df -h # 查看指定挂载点的磁盘使用情况,比如根目录 df -h /
如果需要看整个磁盘的剩余空间,用df命令;如果需要看某个具体目录占用了多少空间,用du命令。
注意事项
- 查看系统级目录(如/、/var、/usr等)的空间占用时,需要使用root权限,否则可能会出现权限不足无法统计的情况,可以在命令前加sudo。
- du统计的是目录实际占用的磁盘空间,和文件的实际大小可能有差异,因为磁盘存储会有块对齐的损耗。
- 如果目录正在被写入文件,du统计的过程中文件大小可能变化,结果会存在一定偏差。
# 用root权限查看根目录的空间占用 sudo du -hd 1 /