菜鸟科技网

Linux下du命令如何查看磁盘占用?

Linux下的du(disk usage)命令是用于估算文件和目录磁盘使用空间的实用工具,它通过递归遍历指定路径下的文件和子目录,计算其占用的磁盘块数量,并以用户可读的格式展示结果,该命令在系统管理、磁盘空间排查、日志分析等场景中广泛应用,掌握其用法对于高效管理Linux系统至关重要。

Linux下du命令如何查看磁盘占用?-图1
(图片来源网络,侵删)

du命令的基本语法

du命令的基本语法结构为:du [选项] [文件或目录],若未指定文件或目录,默认会显示当前目录下所有子目录及文件的磁盘使用情况,结果以字节为单位输出,在终端输入du并回车,系统会列出当前目录每个子目录的磁盘占用,但这样的输出通常包含大量冗余信息,实际使用时需结合选项进行过滤和格式化。

常用选项及功能说明

du命令的丰富选项使其能够灵活适应不同需求,以下是核心选项的详细解析:

选项 全称 功能描述 示例
-h human-readable 以人类可读格式显示(如K、M、G) du -h /var/log
-a --all 显示所有文件(默认仅显示目录) du -a
-s --summarize 仅显示总计值,不显示子目录详情 du -sh /home
-c --total 显示总计行,汇总所有输入参数的总和 du -ch dir1 dir2
-L --dereference-args 解析符号链接指向的文件大小 du -L symlink_dir
--max-depth=N 限制递归深度为N层 du --max-depth=1 /etc
-x --one-file-system 跳过其他文件系统的目录 du -x /mnt
-B --block-size=SIZE 指定块大小(如KB、MB) du -BMB 1024 /tmp
--exclude=PATTERN 排除匹配模式的文件 du --exclude="*.log"
-t --threshold=SIZE 仅显示超过指定大小的文件/目录 du -t 10M

高级用法与实际应用场景

  1. 磁盘空间排查
    当发现磁盘空间不足时,可使用du -sh /*快速扫描根目录下各主要分区的占用情况,定位异常目录,若/var目录占用过高,可进一步用du -sh /var/* | sort -hr按占用大小排序,快速找到大文件或日志目录。

  2. 日志文件管理
    在运维中,常需清理过期日志,通过du -sh --exclude="*.gz" /var/log/nginx可排除压缩日志,查看原始日志占用;结合find命令可实现批量清理,如find /var/log -name "*.log" -mtime +30 -exec du -ch {} + | grep total

    Linux下du命令如何查看磁盘占用?-图2
    (图片来源网络,侵删)
  3. 限制递归深度
    对于大型目录(如/usr),全量扫描耗时较长,使用du --max-depth=2 /usr可仅查看两级子目录的占用,快速定位大容量目录。

  4. 排除特定文件类型
    在代码仓库中,可通过du -sh --exclude=".git" --exclude="node_modules" .排除版本控制和依赖目录,获取项目实际代码大小。

  5. 跨文件系统扫描
    当挂载多个磁盘时,du -x /data可避免统计其他文件系统的目录(如/data/mnt/other_disk),确保结果准确反映当前文件系统的占用。

输出格式与单位控制

默认情况下,du以字节为单位输出,难以直观理解,通过-h选项可自动转换为KB、MB、GB等单位,如du -h dir显示2G dir,若需自定义单位,可使用--block-size,例如du -BKB 1024 file以1024字节块为单位显示,结合sort -hr可实现按大小倒序排列,如du -sh /* | sort -hr

Linux下du命令如何查看磁盘占用?-图3
(图片来源网络,侵删)

注意事项与常见陷阱

  1. 符号链接处理:默认情况下,du统计符号链接本身的大小(通常为4KB),若需统计其指向文件的实际大小,需加-L选项。
  2. 性能影响:对大目录(如/proc)递归扫描可能导致高I/O负载,建议结合--max-depth限制范围。
  3. 块大小差异:不同文件系统的块大小(如4KB、8KB)会影响统计结果,-B选项可统一计算基准。
  4. 权限问题:若遇到Permission denied错误,可使用sudo dudu --ignore-access-denied(需GNU coreutils支持)。

相关问答FAQs

问题1:如何使用du命令查找大于100MB的文件?
解答:可通过find命令结合du实现,具体命令为:find /path -type f -exec du -h {} + | grep -E '^[0-9.]+[MG]' | sort -hrfind定位所有文件,du -h以人类可读格式显示大小,grep过滤出大于100MB的文件(M/G单位),sort -hr按大小倒序排列。

问题2:为什么du显示的磁盘占用与df不一致?
解答:两者统计逻辑不同。du从文件系统角度统计实际文件占用的数据块(包括间接块等),而df从块设备角度统计已分配的块数(包含文件元数据、预留空间等),常见差异包括:du不统计未使用的块,df包含文件系统元数据开销;du可能因进程正在写入文件导致统计延迟;du默认跳过挂载点目录,而df会统计整个挂载设备,可通过du -x --exclude=lost+founddf -h对比,减少差异影响。

分享:
扫描分享到社交APP
上一篇
下一篇