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 等命令组合使用,打造属于自己的空间分析工具链。

相关推荐
大胆飞猪12 分钟前
Linux操作系统--进程间通信(system V共享内存)
linux
LunarCod25 分钟前
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
linux·运维·服务器·ubuntu·docker·开源·sonarqube
betazhou36 分钟前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
什么半岛铁盒42 分钟前
Linux信号的保存
linux·运维·网络
百锦再1 小时前
大数据技术的主要方向及其应用详解
大数据·linux·网络·python·django·pygame
2301_803554521 小时前
vim,gcc/g++,makefile,cmake
linux·编辑器·vim
惜.己1 小时前
Linux常用命令(十四)
linux·运维·服务器
linkingvision2 小时前
H5S 视频监控AWS S3 对象存储
linux·运维·aws·视频监控s3对象存储
BillKu2 小时前
服务器多JAR程序运行与管理指南
运维·服务器·jar
QQ2740287563 小时前
BlockMesh Ai项目 监控节点部署教程
运维·服务器·web3