Linux du 命令终极指南:从基础到精通

文章目录


Linux du 命令终极指南:从基础到精通

在日常的 Linux 运维或开发工作中,我们经常需要查看某个目录或文件所占用的磁盘空间,以便进行空间管理、故障排查或优化存储结构。而 du(Disk Usage)命令就是专门用于显示磁盘使用情况的利器。

本文将为你全面讲解 du 命令的使用方法、常用参数及典型示例,帮助你快速上手并灵活运用。


du 命令简介

du(disk usage)命令用于显示文件或目录所占用的磁盘空间。默认情况下,它会递归地统计每个子目录的大小,并以字节为单位输出。

bash 复制代码
du [选项] [文件或目录]

常用参数详解

参数 含义
-h 以人类可读的方式显示(如 KB、MB、GB)
-s 仅显示总计(summary),不递归显示子目录
-a 显示所有文件和目录的大小
-c 最后增加一行显示总计(总和)
-d N 显示目录深度为 N 的子目录大小(适用于 GNU 版本)
--max-depth=N 功能与 -d 相同(更具可读性)
--exclude=PATTERN 排除匹配模式的文件或目录
-x 只统计当前文件系统的使用情况,忽略挂载点
--time 显示目录的最后修改时间
--apparent-size 显示文件逻辑大小(非磁盘占用)
-L 统计符号链接指向的目标大小

常见用法示例

查看当前目录总大小

bash 复制代码
du -sh

输出:

复制代码
12G    .

查看当前目录及其子目录占用空间

bash 复制代码
du -h

输出示例:

复制代码
4.0K    ./cache
2.5G    ./projects/code
8.2G    ./projects

只显示当前目录总占用空间

bash 复制代码
du -sh

输出示例:

复制代码
100M    .

查看目录下每个文件和子目录的大小

bash 复制代码
du -ah

查看某目录深度为 1 的大小分布

bash 复制代码
du -h --max-depth=1

bash 复制代码
du -h -d 1

适用于按模块查看空间占用情况,非常适合查找"哪个目录最大"。

查看某目录并排除日志文件

bash 复制代码
du -h --exclude="*.log"

查看多个目录的总大小

bash 复制代码
du -ch dir1 dir2

输出中会显示每个目录的大小,最后一行是总计(total)。

统计单个文件的磁盘占用

bash 复制代码
du -h filename

注意:du 显示的是文件实际占用磁盘的空间,而不是逻辑文件大小(逻辑大小可通过 ls -l 查看)。


进阶技巧与常见问题

文件逻辑大小 vs 磁盘占用

  • 逻辑大小 :文件实际内容长度(ls -l 显示的值)。
  • 磁盘占用 :文件占用的块空间(du 默认值)。

示例:

bash 复制代码
echo "1" > small.txt   # 创建 1 字节文件
ls -l small.txt        # 输出:1 (逻辑大小)
du -h small.txt        # 输出:4.0K(块大小)
du --apparent-size -h small.txt  # 输出:1

符号链接处理

  • 默认行为:统计链接指向的文件大小。
  • 仅统计链接自身 :去掉 -L 参数。
bash 复制代码
du -sh /usr/bin/python   # 统计 Python 可执行文件大小
du -shL /usr/bin/python  # 同上(显式解除引用)

快速定位大文件

结合 findsort

bash 复制代码
find /home -type f -size +500M -exec du -h {} + | sort -rh

输出:

复制代码
3.5G    /home/user/videos/movie.mp4
2.9G    /home/user/backup.tar.gz

自动化清理实战

定期清理旧日志

脚本 /scripts/clean_logs.sh

bash 复制代码
#!/bin/bash
# 删除 /var/log 下 30 天前的日志
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;

添加定时任务:

bash 复制代码
crontab -e
# 每天凌晨 2 点执行
0 2 * * * /scripts/clean_logs.sh

清理空目录

删除 7 天内未被访问的空目录:

bash 复制代码
find /data/tmp -type d -empty -atime +7 -delete


du 和 df 的区别

命令 功能 使用层级
du 显示文件/目录占用的磁盘空间 具体到目录或文件
df 显示整个文件系统的磁盘使用情况 文件系统级别

因此,当你想分析"哪个目录占了太多空间"时,用 du;当你想知道"磁盘还剩多少空间"时,用 df


实战:查找占用空间最多的目录

结合 sortdu 使用:

bash 复制代码
du -h --max-depth=1 | sort -hr | head -n 10

这条命令将列出当前目录下占用空间最多的前 10 个目录,非常适合快速分析磁盘空间瓶颈。


总结

du 是一个功能强大又轻量的命令,掌握其用法可以帮助我们快速定位磁盘空间的使用情况,是每个 Linux 用户的必备技能之一。

建议你在日常工作中,多尝试将 dusortheadfind 等命令组合使用,打造属于自己的空间分析工具链。

相关推荐
段帅龙呀1 小时前
Redis构建缓存服务器
服务器·redis·缓存
乌鸦不像写字台2 小时前
【docker部署】在服务器上使用docker
服务器·docker·容器
牧以南歌〆3 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
Antonio9154 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
夜月yeyue4 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza4 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无妄-20245 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
R.X. NLOS5 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20185 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
独行soc7 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网