Linux du 与 find 命令实战:5步定位并清理 100G+ 日志文件
Linux磁盘空间告急5步精准定位并清理100G日志文件实战指南凌晨三点服务器告警短信惊醒梦中人——/var分区使用率100%。这种场景对于运维人员来说再熟悉不过了。本文将分享一套经过实战检验的排查流程将du、find、sort等命令组合成高效的工作流帮助你在10分钟内定位并解决磁盘空间危机。1. 快速诊断确认问题范围首先需要明确问题的严重程度和影响范围。以下命令组合能快速给出全局视图df -hT | grep -v tmpfs | sort -k6 -hr这个命令会显示所有非临时文件系统的磁盘使用情况并按使用率降序排列。关键字段解读Filesystem分区设备名Type文件系统类型Size总容量Used已用空间Avail可用空间Use%使用百分比Mounted on挂载点典型输出示例/dev/nvme0n1p2 ext4 500G 490G 10G 98% / /dev/nvme0n1p1 xfs 200G 180G 20G 90% /var当发现某个分区使用率超过90%时就需要立即介入处理。特别是/var这类存放日志、数据库文件的目录往往是大文件的重灾区。2. 空间占用分析定位问题目录确定问题分区后使用du命令进行深度扫描。这里推荐以下组合命令sudo du -h --max-depth1 /var | sort -hr | head -n 20参数解析-h人类可读格式KB/MB/GB--max-depth1只显示一级子目录sort -hr按人类可读数值逆序排序head -n 20仅显示前20条结果执行结果示例180G /var/log 120G /var/lib 80G /var/cache 12G /var/spool如果发现/var/log异常膨胀可以继续深入分析sudo du -h --max-depth2 /var/log | sort -hr | head -n 15进阶技巧使用time命令统计扫描耗时对于特别大的目录很有参考价值time sudo du -sh /var3. 精确打击查找特定大文件定位到问题目录后需要找出具体的罪魁祸首。find命令是最精准的文件猎手sudo find /var/log -type f -size 1G -exec ls -lh {} \; | awk {print $5,$9} | sort -hr这个复合命令实现以下功能查找/var/log下所有大于1G的文件显示文件大小和路径按大小降序排列对于时间维度分析查找老旧大文件sudo find /var/log -type f -size 100M -mtime 30 -exec ls -lht {} \; | awk {print $6,$7,$8,$5,$9} | sort -hr这个命令会列出修改时间超过30天且大于100MB的文件按修改时间倒序排列。4. 安全清理日志文件处理策略找到目标文件后切忌直接rm删除。正确的处理流程应该是确认文件用途sudo file /var/log/mysql/mysql-bin.000123 sudo head -n 50 /var/log/nginx/access.log压缩归档适用于仍有保留价值的日志sudo gzip /var/log/nginx/access.log日志轮转适用于系统服务日志sudo logrotate -f /etc/logrotate.d/nginx安全删除确认无用后sudo truncate -s 0 /var/log/mysql/slow.log服务重启释放被进程占用的空间sudo systemctl restart mysql特别提醒对于数据库日志如MySQL binlog建议先确认复制状态再清理mysql -e SHOW BINARY LOGS; PURGE BINARY LOGS BEFORE 2024-01-01 00:00:00;5. 防患未然自动化监控方案问题解决后建议建立预防机制。这里提供两种自动化方案方案一Crontab定时任务# 每天凌晨检查磁盘空间 0 3 * * * df -h | awk $50 90 {print $6 is $5 full!} | mail -s Disk Space Alert adminexample.com # 每周日清理30天前的日志 0 4 * * 0 find /var/log -type f -name *.log -mtime 30 -delete方案二Shell监控脚本#!/bin/bash THRESHOLD90 PARTITION/var usage$(df -h | grep $PARTITION | awk {print $5} | cut -d% -f1) if [ $usage -gt $THRESHOLD ]; then echo WARNING: $PARTITION is ${usage}% full! | mail -s Disk Space Alert adminexample.com # 自动清理30天前的Tomcat日志 find /var/log/tomcat -name catalina.*.log -mtime 30 -exec gzip {} \; fi将脚本保存为/usr/local/bin/disk_monitor.sh并添加执行权限然后加入crontab*/30 * * * * /usr/local/bin/disk_monitor.sh对于生产环境建议配置专业的监控系统如PrometheusGrafana设置磁盘空间告警当使用率超过85%时自动通知相关人员。