gzip本身不能清理日志,需结合find查找过期文件并压缩,或通过logrotate实现自动轮转压缩;生产环境推荐logrotate,手动清理宜用find+gzip配合过滤条件和权限控制。
直接用 gzip 本身不能“清理”日志,它只负责压缩单个文件;真正实现“清理+压缩过期日志”的完整流程,需要结合 find 查找、gzip 压缩、再配合 logrotate 或定时脚本做自动化管理。核心是分两步走:先识别过期日志,再安全压缩或删除。
这是最常用的手动或脚本化方式,适合清理 /var/log 下散落的旧 .log 文件(如 auth.log、syslog 等未被 logrotate 管理的临时日志):
sudo find /var/log -name "*.log" -mtime +14 -exec gzip -k {} ;
(-k 表示 keep 原文件,避免误删;压缩后生成 xxx.log.gz)
sudo find /var/log -name "*.log" -mtime +14 -exec gzip {} ;
(默认行为,压缩后原 .log 消失)
-type f 和 ! -name "current*" 等条件过滤,例如:sudo find /var/log -type f -name "*.log" -mtime +14 ! -name "journal*" -exec gzip -k {} ;
这是生产环境推荐做法——不是“事后清理”,而是让系统主动控制日志生命周期,避免日志暴涨:
sudo nano /etc/logrotate.d/myapp(或修改 /etc/logrotate.conf)/var/log/myapp/*.log {daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 root root
}
compress:轮转后自动用 gzip 压缩旧日志(生成 .log.1.gz);
delaycompress:延迟压缩,确保最新轮转的 .log.1 暂不压缩,方便紧急查看;
rotate 7:最多保留 7 个归档(含压缩和未压缩),超出的自动删除。
如果压缩后的 .gz 文件也积压过多(比如保留了几个月),可再清理旧压缩包:
.gz 日志:sudo find /var/log -name "*.log.*.gz" -mtime +60 -delete
sudo tar -czf /backup/syslog-$(date -d 'last month' +%Y%m).tar.gz /var/log/syslog.*.gz
再用 rm /var/log/syslog.*.gz 清空目录
操作日志前务必注意以下几点,避免服务中断或数据丢失:
/var/log/syslog),会导致写入失败或日志丢失;应等 logrotate 触发轮转后,再对 syslog.1 等旧文件操作journalctl --vacuum-time=2weeks 或 --vacuum-size=500M 管理find ... -exec 前,先运行 find ... -print 看匹配到哪些文件,确认无误再加 -exec
sudo;普通用户无法读取或压缩它们