Linux 磁盘空间排查:5个常见目录与日志文件清理实战

📅 发布时间:2026/7/6 12:06:46 👁️ 浏览次数:
Linux 磁盘空间排查:5个常见目录与日志文件清理实战
Linux 磁盘空间排查5个常见目录与日志文件清理实战服务器磁盘空间告急是运维工作中最常见的问题之一。当系统提示No space left on device时如何快速定位并清理占用空间的文件成为关键。本文将聚焦Linux系统中5个最容易产生大文件的目录提供针对性的排查方法和清理策略。1. 快速定位磁盘空间问题的工具组合在深入具体目录前我们需要掌握几个基础命令组合它们能帮助我们快速定位问题所在。查看整体磁盘使用情况df -h这个命令会显示所有挂载点的使用情况-h参数让输出以人类可读的格式显示GB/MB/KB。查找大目录的黄金组合du -h --max-depth1 / | sort -hr | head -10这个管道命令的执行流程du计算根目录下各子目录大小sort按人类可读数值逆序排序head只显示前10个结果查找大文件的利器find / -type f -size 500M -exec ls -lh {} 2/dev/null | sort -k5 -hr这个命令会查找系统中所有大于500MB的文件并按大小排序显示。2/dev/null是为了屏蔽权限不足的报错信息。2. /var/log日志文件的聚集地系统和服务日志默认存储在/var/log目录这是磁盘空间问题的重灾区。以下是几个需要特别关注的日志文件日志文件描述常见问题messages系统主日志长期运行可能体积庞大secure安全相关日志高频认证会产生大量记录journal/systemd日志目录默认不限制大小nginx/Nginx访问日志高流量网站日志增长快mysql/MySQL错误日志配置不当可能无限增长journal日志清理对于systemd系统的journal日志可以使用以下命令# 查看当前日志占用空间 journalctl --disk-usage # 保留最近2天的日志 journalctl --vacuum-time2d # 或者限制总大小不超过500MB journalctl --vacuum-size500MNginx日志轮转配置示例在/etc/logrotate.d/nginx中添加/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] kill -USR1 cat /var/run/nginx.pid endscript }3. /tmp临时文件的温床/tmp目录是系统和应用程序存放临时文件的地方理论上重启后会自动清空但在长期运行的服务器上可能积累大量文件。安全清理/tmp的注意事项不要直接rm -rf /tmp/*可能影响正在运行的应用程序使用find命令清理旧文件更安全find /tmp -type f -atime 7 -delete这个命令会删除7天内未被访问的文件。特殊文件处理对于socket文件等特殊类型应先确认是否可以删除某些应用程序如MySQL可能在/tmp创建重要临时表4. /var/lib/docker容器存储的潜在风险对于使用Docker的环境/var/lib/docker是默认的存储位置可能占用大量空间。Docker空间清理命令# 查看Docker磁盘使用情况 docker system df # 清理无用资源 docker system prune -a --volumes # 清理特定容器的日志文件 truncate -s 0 $(docker inspect --format{{.LogPath}} 容器名)关键目录说明overlay2/容器分层文件系统containers/容器日志和元数据volumes/持久化卷数据5. 用户目录和应用程序日志除了系统目录用户主目录和应用程序特定目录也经常是空间占用大户。常见问题点.cache/应用程序缓存.npm/, .m2/开发工具缓存应用程序日志目录如Tomcat的logs/Tomcat日志清理脚本示例#!/bin/bash TOMCAT_LOG_DIR/opt/tomcat/logs MAX_SIZE500M # 清理catalina.out if [ -f ${TOMCAT_LOG_DIR}/catalina.out ]; then size$(du -m ${TOMCAT_LOG_DIR}/catalina.out | cut -f1) if [ $size -gt ${MAX_SIZE/M/} ]; then echo 清空catalina.out (当前大小: ${size}MB) ${TOMCAT_LOG_DIR}/catalina.out fi fi # 删除30天前的日志文件 find ${TOMCAT_LOG_DIR} -name *.log -mtime 30 -delete6. 自动化清理策略手动清理只是临时解决方案建立自动化机制才能从根本上解决问题。logrotate配置要点为每个重要服务配置独立的日志轮转设置合理的保留周期和压缩选项考虑日志的监控和分析需求cron定时任务示例# 每天凌晨清理临时文件 0 2 * * * find /tmp -type f -atime 7 -delete # 每周日清理Docker无用资源 0 3 * * 0 docker system prune -f # 每月1号检查大文件并发送报告 0 4 1 * * df -h /var/log/disk-report.log du -h --max-depth1 / | sort -hr /var/log/disk-report.log7. 预防优于治疗监控与告警建立完善的监控体系可以在问题发生前预警推荐监控指标各分区使用率超过80%告警关键日志文件大小inode使用情况特别是小文件多的系统Prometheus监控示例- job_name: node_disk static_configs: - targets: [localhost:9100] metrics_path: /metrics结合Grafana可以创建直观的磁盘使用情况看板及时发现潜在问题。