在 Debian 系统中,压缩历史日志(尤其是 /var/log 目录下的日志文件)可以通过多种方式实现,具体取决于日志类型(如 syslog、auth.log、journald 日志等)和你的需求(手动压缩、自动轮转或清理)。以下是详细方法:
如果只需要临时压缩某个或某类历史日志(非当前正在写入的日志),可以直接使用 gzip、bzip2 或 xz 等压缩工具。
/var/log 下的旧日志# 进入日志目录
cd /var/log
# 压缩单个日志(如 7 天前的 auth.log)
sudo gzip auth.log.1 # 压缩后生成 auth.log.1.gz,原文件会被删除
# 压缩多个日志(如所有 .log.1 文件)
sudo gzip *.log.1
# 使用更高压缩率的 xz(压缩慢但体积小)
sudo xz auth.log.2
注意:
syslog、auth.log)不要直接压缩,否则可能导致日志写入失败或服务异常。.1、.2 等)。logrotate 自动压缩和轮转日志(推荐)Debian 系统默认使用 logrotate 工具自动管理日志轮转(包括压缩、删除旧日志)。你可以配置 logrotate 规则,让历史日志自动压缩。
logrotate 配置logrotate 的配置文件分为两类:
/etc/logrotate.conf(全局规则)/etc/logrotate.d/ 目录下的文件(针对特定服务,如 rsyslog、nginx 等)查看现有规则:
cat /etc/logrotate.conf # 全局配置
ls /etc/logrotate.d/ # 服务专属配置
logrotate 压缩日志以 rsyslog 的日志(如 syslog、auth.log)为例,修改 /etc/logrotate.d/rsyslog 文件:
sudo nano /etc/logrotate.d/rsyslog
默认配置可能已包含压缩选项,若没有可添加 compress 相关参数。示例配置:
/var/log/syslog
/var/log/auth.log
/var/log/mail.log
{
rotate 7 # 保留 7 个轮转后的日志文件
daily # 每天轮转一次
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
compress # 轮转后压缩旧日志(默认用 gzip)
delaycompress # 延迟压缩(下次轮转时再压缩当前日志,避免影响正在写入的日志)
compresscmd /usr/bin/gzip # 压缩命令(默认 gzip,可改为 xz/bzip2)
compressext .gz # 压缩文件后缀
postrotate # 轮转后执行的命令(重启 rsyslog 让新日志写入新文件)
/usr/lib/rsyslog/rsyslog-rotate # 或 /etc/init.d/rsyslog reload
endscript
}
关键参数说明:
compress:启用压缩(默认用 gzip)。delaycompress:配合 compress 使用,本次轮转的日志暂不压缩,下次轮转时再压缩(避免压缩正在被服务引用的日志)。rotate N:保留 N 个轮转后的日志文件,超过则删除最旧的。daily/weekly/monthly:轮转周期。logrotate 配置修改配置后,可手动测试是否生效:
sudo logrotate -d /etc/logrotate.conf # 调试模式(-d 不实际执行,仅检查配置)
sudo logrotate -f /etc/logrotate.conf # 强制立即执行轮转(测试用)
systemd 日志(journald 日志)如果系统使用 systemd,日志由 journald 管理,存储在 /var/log/journal/(持久化)或 /run/log/journal/(临时)。压缩 journald 日志需通过 journalctl 或配置 journald.conf。
journald 日志大小journalctl --disk-usage
# 输出示例:Archived and active journals take up 1.2G in the file system.
journald 本身会对日志进行内部压缩(默认启用),但可通过以下方式限制大小或清理旧日志:
journald.conf 限制日志大小编辑 /etc/systemd/journald.conf:
sudo nano /etc/systemd/journald.conf
修改以下参数(取消注释并设置值):
[Journal]
Storage=persistent # 持久化存储(默认)
Compress=yes # 启用压缩(默认 yes)
SystemMaxUse=500M # 系统日志最大占用 500M(超过则删除旧日志)
SystemKeepFree=100M # 磁盘剩余空间低于 100M 时删除旧日志
MaxFileSec=1week # 单个日志文件最大保存 1 周
MaxRetentionSec=1month # 日志最大保留 1 个月
重启 journald 生效:
sudo systemctl restart systemd-journald
# 清理 2 周前的日志
sudo journalctl --vacuum-time=2weeks
# 清理到日志总大小不超过 500M
sudo journalctl --vacuum-size=500M
syslog、auth.log(无后缀或后缀为 .log),直接压缩会导致服务无法写入日志。root 或 syslog 用户,操作需加 sudo。通过以上方法,你可以灵活压缩 Debian 的历史日志,既节省磁盘空间,又保证日志管理的规范性。