当前位置:首页>Linux>Linux命令每日一清单036:du--磁盘空间使用命令速查表

Linux命令每日一清单036:du--磁盘空间使用命令速查表

  • 2026-09-21 17:36:50
Linux命令每日一清单036:du--磁盘空间使用命令速查表

du(disk usage)是Linux/Unix系统中用于估算文件和目录磁盘空间使用量的标准工具。与df(查看文件系统整体使用情况)不同,du从目录和文件级别报告空间占用,帮助管理员快速定位哪些目录或文件占用了大量磁盘空间。

du命令支持多种输出格式,可以控制遍历深度、排除特定文件、排序输出等,是磁盘空间分析和清理的核心工具。掌握du对于日常系统维护、日志清理、容量规划等场景至关重要。

1. 基本用法

命令说明
du
显示当前目录及子目录的磁盘使用量
du file.txt
显示单个文件的磁盘使用量
du dir1 dir2
显示多个路径的磁盘使用量
du -h directory/
人类可读格式(K、M、G)
du -sh directory/
仅显示目录总大小
du -sh *
显示当前目录下每个项目的大小
sudo du -sh /var
使用sudo读取需要root权限的路径

2. 大小显示格式

选项说明
-h
人类可读,使用1024进制(K、M、G)
-H
人类可读,使用1000进制(SI单位)
-k
以1K块为单位显示(大多数系统默认)
-m
以1M块为单位显示
-B G
 或 --block-size=G
以1G块为单位显示
-B SIZE
使用指定字节大小的块(如-B M、-B 512)
-b
等效于--apparent-size --block-size=1(精确字节数)

3. 汇总与总计

命令说明
du -s directory/
仅显示目录总大小(不列出子目录)
du -sh directory/
人类可读格式的总大小
du -c dir1 dir2
在底部添加总计行
du -csh /var/log /var/lib
人类可读总计,并显示合计
du -a directory/
列出每个文件(不仅限于目录)
du -sh --apparent-size directory/
显示实际数据大小(而非磁盘占用)

4. 深度控制

限制du向下递归的层级深度:

命令说明
du -h --max-depth=1 directory/
仅显示第一级子目录
du -h --max-depth=2 directory/
显示两级深度
du -h -d 1 directory/-d
是--max-depth的短格式
du -h --max-depth=0 directory/
仅显示目录总计(同-s)
du -h --max-depth=1 / | sort -rh
查看根目录下最大的目录

5. 排除文件

选项说明
--exclude=PATTERN
排除匹配shell模式的文件和目录
--exclude-from=FILE
从文件读取排除模式
-x
停留在同一文件系统(跳过挂载点)
--exclude=*.log
排除所有log文件
--exclude=node_modules
排除node_modules目录

示例:

du -sh --exclude="*.log" /var          # 排除.log文件
du -sh --exclude=node_modules ~/project # 跳过node_modules目录
du -xsh /                              # 仅统计根文件系统(忽略其他挂载点)
du -sh --exclude-from=exclude.txt /data # 从文件读取排除列表

6. 排序与Top N

结合sort和head查找最大项目:

命令说明
du -h directory/ | sort -rh
按大小降序排序
du -h directory/ | sort -rh | head -10
列出最大的10个项目
du -h --max-depth=1 / | sort -rh | head -20
根目录下最大的20个子目录
du -ah directory/ | sort -rh | head -10
最大的10个文件和目录
du -sh */ | sort -rh
当前目录下子目录按大小排序
du -h --max-depth=1 | sort -rh | head -5
当前目录下最大的5个子目录

7. 实用组合模式

命令说明
du -ah /var/log | sort -rh | head -20
找出/var/log下最大的20个文件
du -sh /home/* | sort -rh | head -10
找出最大的10个用户目录
find / -type f -size +100M -exec du -sh {} \; 2>/dev/null
查找大于100MB的文件
du -sch /var/lib/docker /var/log /home | tail -1
多个目录合计大小
du -h --max-depth=1 /var | grep -v "/var$" | sort -rh
排除父目录的排序输出
du -h --time /var/log
显示最后修改时间
du -0 /var/log | xargs -0 -n1 echo
空字符分隔输出(处理特殊文件名)

8. 常用选项

选项完整名称说明
-a
--all
显示所有文件(不仅限于目录)
-s
--summarize
仅显示总计
-c
--total
显示总计行
-h
--human-readable
人类可读格式(1024进制)
-H
--si
人类可读格式(1000进制)
-k
--kilobytes
以1K块为单位
-m
--megabytes
以1M块为单位
-b
--bytes
以字节为单位(表观大小)
-d N
--max-depth=N
限制递归深度
-x
--one-file-system
不跨越文件系统边界
-L
--dereference
跟随符号链接
-P
--no-dereference
不跟随符号链接(默认)
-l
--count-links
多次计算硬链接
--exclude
-
排除匹配模式
--exclude-from
-
从文件读取排除模式
--apparent-size
-
显示表观大小
--time
-
显示修改时间
-0
--null
空字符分隔输出
-S
--separate-dirs
排除子目录大小

9. du vs df 对比

命令报告内容适用场景
du
文件和目录的磁盘使用量
查找大文件/大目录、清理磁盘空间
df
文件系统整体的使用情况
查看磁盘分区剩余空间、监控容量

典型工作流:

# 1. 先用df查看哪个分区满了
df -h

# 2. 再用du定位具体大目录
sudo du -sh /* | sort -rh | head -10
sudo du -sh /var/* | sort -rh | head -10

10. 故障排查

问题解决方法
du显示空间与df不一致
df包括被删除但仍在运行的进程占用的空间;使用`lsof
目录显示总大小为4.0K
目录本身占用很少空间;使用-a查看文件大小;使用--apparent-size
du扫描很慢
使用--max-depth限制深度;使用-x排除其他文件系统;排除缓存目录
权限不足
使用sudo执行;跳过无权限目录:2>/dev/null
输出结果难以解析
使用-b获得精确字节数;使用--time获取时间信息
符号链接导致重复计数
默认不跟随链接;使用-L跟随(谨慎)
硬链接文件重复计数
默认每个链接单独计数;使用-l会多次计数;默认行为通常符合预期

温馨提示: du是磁盘空间分析的首选工具。建议掌握以下技巧:1)先用df -h找出满的分区,再用du定位具体目录;2)du -sh * | sort -rh是快速查看当前目录大项目的常用组合;3)使用--max-depth=1控制输出层级,避免输出过多;4)排除/proc、/sys等虚拟文件系统;5)脚本中使用-b获得精确字节数便于计算;6)清理大文件前,先用file命令确认文件类型。对于需要定期运行的分析,可以结合watch命令:watch -n 60 'du -sh /var/log'。

本文PDF格式下载:

  关注公众号(haopython),请回复: LLTDU

最新文章

随机文章