Linux系统日志清理实战指南
系统日志是记录系统运行状态、服务活动和安全事件的关键文件,但随着时间推移,日志文件会不断膨胀(如/var/log/syslog、/var/log/auth.log等),占用大量磁盘空间。以下是安全、高效清理系统日志的实战方法,覆盖手动清理、自动工具和预防措施。
在清理前,需先确认哪些日志文件占用空间最大,避免盲目操作。使用以下命令快速定位:
# 进入/var/log目录
cd /var/log
# 查看各日志文件大小(按从大到小排序)
sudo du -sh *.log *.gz 2>/dev/null | sort -hr | head -n 10
# 或使用journalctl查看systemd日志占用(适用于systemd系统)
sudo journalctl --disk-usage
注意:优先清理旧日志(如带.gz后缀的压缩日志、.1/.2等数字后缀的轮转日志),避免删除正在使用的当前日志(如syslog、auth.log)。
若当前日志文件(如syslog、auth.log)过大,可直接清空内容(而非删除文件),不影响系统服务运行:
# 清空syslog(Ubuntu/Debian)
sudo truncate -s 0 /var/log/syslog
# 清空auth.log(Ubuntu/Debian)或secure(CentOS/RHEL)
sudo truncate -s 0 /var/log/auth.log # 或 /var/log/secure
说明:truncate -s 0将文件大小截断为0字节,保留文件本身,避免因删除文件导致服务报错。
旧日志通常会被压缩为.gz格式(如syslog.1.gz、auth.log.2.gz),可直接删除:
# 删除所有.gz后缀的旧日志
sudo rm -f /var/log/*.gz
# 或仅删除7天前的旧压缩日志(更安全)
sudo find /var/log -type f -name "*.gz" -mtime +7 -delete
注意:压缩日志已无实时价值,删除后可快速释放空间。
若需保留近7天的日志,可使用find命令删除更早的文件:
# 删除/var/log目录下所有.log文件(不含.gz)中7天前的
sudo find /var/log -type f -name "*.log" ! -name "*.gz" -mtime +7 -delete
说明:-mtime +7表示修改时间超过7天的文件,-delete需谨慎使用,建议先运行find命令预览(去掉-delete)确认目标文件。
若系统使用systemd(现代Linux发行版的默认初始化系统),可通过journalctl命令高效管理日志:
# 查看当前journal日志总大小
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=2025-01-01
sudo journalctl --rotate
说明:旋转日志后,旧日志会被压缩为.journal~格式,可通过--vacuum命令清理。
手动清理需重复操作,logrotate是Linux自带的日志轮转工具,可实现自动压缩、删除旧日志。默认配置文件位于/etc/logrotate.conf,自定义配置需放在/etc/logrotate.d/目录下。
# 强制立即执行logrotate(测试配置是否正确)
sudo logrotate -f /etc/logrotate.conf
以/var/log/syslog为例,在/etc/logrotate.d/syslog中添加以下配置:
/var/log/syslog {
daily # 每天轮转
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(.gz格式)
delaycompress # 延迟压缩(如不压缩第6个旧日志)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
postrotate # 轮转后执行的命令(通知rsyslog重新打开日志文件)
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
说明:配置完成后,logrotate会按计划(通常每天)自动执行,无需手动干预。
除系统日志外,/tmp和/var/tmp目录下的临时文件也会占用空间,可使用以下命令清理:
# 清空/tmp目录下的所有文件(谨慎使用,确保无正在使用的文件)
sudo rm -rf /tmp/*
# 清空/var/tmp目录下的所有文件(保留超过1天的文件)
sudo find /var/tmp -type f -mtime +1 -delete
注意:/tmp目录下的文件通常会在系统重启时自动清空,但长期运行的服务器需定期清理。
sudo cp /var/log/syslog /mnt/backup/syslog.bak
syslog、auth.log等当前日志文件,删除可能导致服务无法记录新日志。cron定时任务(如每周日凌晨2点执行):# 编辑当前用户的cron任务
crontab -e
添加以下内容:0 2 * * 0 /usr/bin/find /var/log -type f -name "*.gz" -delete && /usr/bin/journalctl --vacuum-time=7d
df -h定期检查磁盘使用情况,及时发现空间不足问题。通过以上方法,可有效清理系统日志,释放磁盘空间,同时保证系统日志的完整性和可追溯性。建议结合手动清理与自动化工具(如logrotate),形成常态化的日志管理机制。