du 命令详解#
du 命令是 Linux 系统中用于显示目录或文件大小的命令,是文件操作中常用的命令之一。本文将从入门到无敌,详细介绍 du 命令的使用方法和技巧。
入门阶段#
基本用法#
du 命令的基本语法:
du [选项] [文件或目录]功能:显示目录或文件的大小,默认以字节为单位。如果不指定文件或目录,则显示当前目录的大小。
常用示例#
显示当前目录的大小:
du显示指定目录的大小:
du /home显示指定文件的大小:
du file.txt以人类可读的格式显示:
du -h
中级阶段#
常用选项#
| 选项 | 说明 |
|---|---|
-a, --all | 显示所有文件和目录的大小 |
-h, --human-readable | 以人类可读的格式显示(如 K、M、G) |
-H, --si | 以 SI 单位显示(1000 为基数) |
-s, --summarize | 只显示总和,不显示子目录的大小 |
-c, --total | 显示所有指定文件或目录的总和 |
-d, --max-depth=N | 显示指定深度的目录大小 |
-k, --kilobytes | 以 KB 为单位显示 |
-m, --megabytes | 以 MB 为单位显示 |
-g, --gigabytes | 以 GB 为单位显示 |
-b, --bytes | 以字节为单位显示 |
-L, --dereference | 跟随符号链接 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
组合使用示例#
显示所有文件和目录的大小:
du -a只显示总和:
du -s显示总和并以人类可读的格式显示:
du -sh显示指定深度的目录大小:
# 显示深度为 1 的目录大小 du -h --max-depth=1 # 显示深度为 2 的目录大小 du -h --max-depth=2显示所有指定文件或目录的总和:
du -ch file1.txt file2.txt dir1跟随符号链接:
du -L file.txt
高级阶段#
高级使用示例#
使用通配符:
# 显示所有 txt 文件的大小 du -h *.txt # 显示所有以 file 开头的文件的大小 du -h file*使用管道:
# 显示大小超过 100MB 的目录 du -h --max-depth=1 | grep -E "[0-9]+M" # 按大小排序显示 du -h --max-depth=1 | sort -hr使用重定向:
# 将目录大小保存到文件 du -h --max-depth=2 > dir_size.txt显示指定类型文件的大小:
# 显示所有 txt 文件的大小 find . -name "*.txt" -type f -exec du -h {} \; # 显示所有 txt 文件的总大小 find . -name "*.txt" -type f -exec du -b {} \; | awk '{sum += $1} END {print sum/1024/1024, "MB"}'显示目录中最大的文件或目录:
# 显示目录中最大的 10 个文件或目录 du -h --max-depth=1 | sort -hr | head -n 10使用
-0选项处理包含空格的文件名:# 处理包含空格的文件名 find . -name "*.txt" -type f -print0 | xargs -0 du -h
大师阶段#
复杂组合命令#
与
find命令结合使用:# 查找大文件并显示大小 find . -type f -size +100M 2>/dev/null | xargs du -h # 查找并删除大文件 find . -type f -size +100M 2>/dev/null | xargs du -h | sort -hr | head -n 10与
xargs命令结合使用:# 批量显示文件大小 ls *.txt | xargs du -h # 批量显示目录大小 ls -d */ | xargs du -sh与
grep命令结合使用:# 显示包含特定字符串的目录大小 du -h --max-depth=1 | grep "dir" # 显示不包含特定字符串的目录大小 du -h --max-depth=1 | grep -v "dir"与
awk命令结合使用:# 计算目录中文件的平均大小 du -b --max-depth=2 | grep -v "\.$" | awk '{sum += $1; count++} END {print "平均大小:", sum/count/1024, "KB"}' # 计算目录中文件的总大小 du -b --max-depth=2 | grep -v "\.$" | awk '{sum += $1} END {print "总大小:", sum/1024/1024, "MB"}'与
sort命令结合使用:# 按大小排序显示文件 du -h *.txt | sort -hr # 按大小排序显示目录 du -h --max-depth=1 | sort -hr
与其他命令结合使用#
与
df命令结合使用:# 显示目录大小和磁盘空间使用情况 du -sh /home && df -h /home与
ls命令结合使用:# 显示文件大小和详细信息 ls -la | awk '{print $9, $5}' | sort -k 2 -nr与
watch命令结合使用:# 实时监控目录大小的变化 watch -n 1 "du -sh /var/log"与
cron命令结合使用:# 添加到 crontab 定时执行 # 编辑 crontab # crontab -e # 添加以下行,每天检查一次目录大小 # 0 0 * * * du -h --max-depth=1 /home > /var/log/dir_size.log与
tar命令结合使用:# 显示压缩前和压缩后的文件大小 du -sh file.txt && tar -czvf file.txt.tar.gz file.txt && du -sh file.txt.tar.gz
无敌阶段#
自定义 du 命令别名#
为了提高工作效率,可以在 .bashrc 或 .bash_profile 文件中为 du 命令创建别名:
# 在 ~/.bashrc 文件中添加以下内容
alias du='du -h' # 默认以人类可读的格式显示
aliases du='du -sh' # 默认只显示总和
aliases dua='du -a' # 显示所有文件和目录的大小
aliases duc='du -c' # 显示总和
aliases dud='du --max-depth=1' # 默认显示深度为 1 的目录大小添加后,执行 source ~/.bashrc 使别名生效。
高级技巧#
使用
du命令监控远程服务器的目录大小:# 监控远程服务器的目录大小 ssh user@server "du -sh /home"使用
du命令和tmux命令结合使用:# 在 tmux 会话中监控目录大小 # 启动 tmux 会话 tmux new -s dir_monitor # 在 tmux 会话中执行 watch -n 1 "du -sh /var/log"使用
du命令和grafana命令结合使用:# 配置 Grafana 监控目录大小 # 1. 安装 Prometheus 和 Node Exporter # 2. 配置 Prometheus 采集 Node Exporter 数据 # 3. 在 Grafana 中添加 Prometheus 数据源 # 4. 创建目录大小监控面板使用
du命令和python命令结合使用:# 使用 Python 脚本监控目录大小 cat > dir_monitor.py << 'EOF' #!/usr/bin/env python3 import subprocess import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 执行 du 命令 result = subprocess.run(['du', '-sh', '/home'], capture_output=True, text=True) output = result.stdout.strip() # 提取目录大小 size = output.split()[0] # 检查目录大小 if 'G' in size: size_gb = float(size.replace('G', '')) if size_gb > 100: # 发送告警邮件 sender_email = "your_email@example.com" receiver_email = "user@example.com" password = "your_password" message = MIMEMultipart() message["From"] = sender_email message["To"] = receiver_email message["Subject"] = "Directory Size Alert" body = f"Directory /home size is {size}, which exceeds the threshold of 100GB." message.attach(MIMEText(body, "plain")) with smtplib.SMTP_SSL("smtp.example.com", 465) as server: server.login(sender_email, password) server.send_message(message) print(f"Directory /home size: {size}") EOF chmod +x dir_monitor.py python3 dir_monitor.py使用
du命令和bash脚本结合使用:# 创建 bash 脚本监控目录大小 cat > dir_monitor.sh << 'EOF' #!/bin/bash # 执行 du 命令 du -sh /home > /var/log/dir_size.log # 提取目录大小 size=$(du -sh /home | awk '{print $1}') # 检查目录大小 if [[ $size =~ G ]]; then size_gb=${size%"G"} if (( $(echo "$size_gb > 100" | bc -l) )); then echo "Directory /home size is $size, which exceeds the threshold of 100GB." | mail -s "Directory Size Alert" user@example.com fi fi EOF chmod +x dir_monitor.sh ./dir_monitor.sh使用
du命令和find命令结合使用:# 查找并删除大文件 find /home -type f -size +100M 2>/dev/null | xargs du -h | sort -hr | head -n 10 # 查找并压缩大文件 find /home -type f -size +100M 2>/dev/null | xargs -I {} sh -c 'du -h {} && gzip {} && du -h {}.gz'
性能优化#
使用
-s选项只显示总和:# 推荐:只显示总和 du -s # 不推荐:显示所有子目录的大小 du使用
--max-depth选项限制显示深度:# 推荐:限制显示深度为 1 du --max-depth=1 # 不推荐:显示所有深度的目录大小 du使用
-h选项以人类可读的格式显示:# 推荐:以人类可读的格式显示 du -h # 不推荐:以默认格式显示 du对于大目录,使用
-b选项以字节为单位显示:# 推荐:以字节为单位显示 du -b /var # 不推荐:以默认格式显示 du /var使用
-0选项和xargs -0处理包含空格的文件名:# 推荐:处理包含空格的文件名 find . -name "*.txt" -type f -print0 | xargs -0 du -h # 不推荐:不处理包含空格的文件名 find . -name "*.txt" -type f | xargs du -h
总结#
du 命令是 Linux 系统中用于显示目录或文件大小的重要命令,掌握其各种选项和使用技巧,可以帮助你更好地管理和监控系统的磁盘空间。从入门到无敌,本文涵盖了 du 命令的所有重要用法,希望对你有所帮助。
常用选项总结#
| 选项 | 说明 |
|---|---|
-a, --all | 显示所有文件和目录的大小 |
-h, --human-readable | 以人类可读的格式显示(如 K、M、G) |
-H, --si | 以 SI 单位显示(1000 为基数) |
-s, --summarize | 只显示总和,不显示子目录的大小 |
-c, --total | 显示所有指定文件或目录的总和 |
-d, --max-depth=N | 显示指定深度的目录大小 |
-k, --kilobytes | 以 KB 为单位显示 |
-m, --megabytes | 以 MB 为单位显示 |
-g, --gigabytes | 以 GB 为单位显示 |
-b, --bytes | 以字节为单位显示 |
-L, --dereference | 跟随符号链接 |
最佳实践#
使用
-h选项:使用-h选项,以人类可读的格式显示目录或文件大小,便于查看。使用
-s选项:对于只需要知道总和的场景,使用-s选项,只显示总和,不显示子目录的大小。使用
--max-depth选项:对于大目录,使用--max-depth选项,限制显示深度,提高命令执行速度。定期检查:定期使用
du命令检查目录大小,及时发现并处理磁盘空间不足的问题。结合其他命令:与
find、sort、grep等命令结合使用,更全面地了解磁盘使用情况。性能优化:对于大目录,使用
-s、--max-depth等选项,限制显示内容,提高命令执行速度。
通过不断练习和使用,你将能够熟练掌握 du 命令的各种技巧,成为 Linux 磁盘空间管理的高手。