在 Linux 下“压缩日志存档”通常分几种场景:单个/批量日志压缩、按时间归档、配合 logrotate 自动压缩、以及大日志的特殊处理。下面按常见用法给你讲清楚。
gzip access.log
生成:
access.log.gz
✅ 原文件会被删除
解压:
gunzip access.log.gz
tar -czf logs-2026-01-21.tar.gz /var/log/nginx/
参数说明:
-c 创建-z 用 gzip-f 指定文件名解压:
tar -xzf logs-2026-01-21.tar.gz
tar -cJf logs.tar.xz /var/log/
✅ 压缩率最高
❌ 速度慢
tar -czf logs-$(date +%F).tar.gz /var/log/*.log
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
find /var/log -name "*.log" -mtime +30 -exec tar -czf old-logs.tar.gz {} + ;
find /var/log -name "*.log" -mtime +30 -delete
Linux 自带 logrotate,专门干这事。
/etc/logrotate.d/nginx/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
systemctl reload nginx
endscript
}
说明:
compress → gzipdaily → 每天rotate 30 → 保留 30 份delaycompress → 延迟压缩(防止正在写)手动测试:
logrotate -d /etc/logrotate.d/nginx # 模拟
logrotate -f /etc/logrotate.d/nginx # 强制执行
cat huge.log | gzip > huge.log.gz
tar -cf - /var/log | pigz -p 4 > logs.tar.gz
(需安装 pigz)
| 格式 | 速度 | 压缩率 | 场景 |
|---|---|---|---|
| gzip | 快 | 中 | 通用 ✅ |
| bzip2 | 慢 | 高 | 归档 |
| xz | 最慢 | 最高 | 长期存档 |
| zstd | 快 | 高 | 新趋势 ⭐ |
✅ 日常日志归档
tar -czf logs-$(date +%F).tar.gz /var/log
✅ 生产环境
用
logrotate + gzip
如果你愿意,可以告诉我:
我可以给你一份定制方案或脚本。