温馨提示×

怎么压缩linux日志存档

小樊
48
2026-09-26 16:15:34
栏目: 智能运维

在 Linux 下“压缩日志存档”通常分几种场景:单个/批量日志压缩、按时间归档、配合 logrotate 自动压缩、以及大日志的特殊处理。下面按常见用法给你讲清楚。


一、最基础的压缩命令

1. 用 gzip 压缩(最常用)

gzip access.log

生成:

access.log.gz

✅ 原文件会被删除

解压:

gunzip access.log.gz

2. 用 tar 打包并压缩(推荐用于“存档”)

tar -czf logs-2026-01-21.tar.gz /var/log/nginx/

参数说明:

  • -c 创建
  • -z 用 gzip
  • -f 指定文件名

解压:

tar -xzf logs-2026-01-21.tar.gz

3. 更高压缩率(xz)

tar -cJf logs.tar.xz /var/log/

✅ 压缩率最高
❌ 速度慢


二、日志归档常用做法(实战)

场景 1:把旧日志按日期打包

tar -czf logs-$(date +%F).tar.gz /var/log/*.log

场景 2:只压缩 N 天前的日志

find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

场景 3:压缩并删除原日志

find /var/log -name "*.log" -mtime +30 -exec tar -czf old-logs.tar.gz {} + ;
find /var/log -name "*.log" -mtime +30 -delete

三、用 logrotate(最推荐)

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 → gzip
  • daily → 每天
  • rotate 30 → 保留 30 份
  • delaycompress → 延迟压缩(防止正在写)

手动测试:

logrotate -d /etc/logrotate.d/nginx   # 模拟
logrotate -f /etc/logrotate.d/nginx   # 强制执行

四、超大日志怎么处理

1. 边读边压(省内存)

cat huge.log | gzip > huge.log.gz

2. 并行压缩(多核)

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


如果你愿意,可以告诉我:

  • 日志路径
  • 是否正在写入
  • 多大(GB?)
  • 想自动还是手动

我可以给你一份定制方案或脚本。

0 踩