最稳妥的日志归档做法是用 tar -cf 配合 --exclude 跳过活跃日志并按日期命名;优先归档带日期后缀的轮转日志,用 find 按修改时间筛选,打包时加 -p 保留权限,-C 切换目录,-z 或 -J 压缩,归档后验证内容再清理。

直接用 tar -cf 打包日志目录,配合 --exclude 跳过正在写入的活跃日志,再加日期命名避免覆盖——这是最稳妥、最常用的做法。
归档前先清理和筛选日志
历史日志通常散落在 /var/log/ 下,但其中可能混着当前正在滚动的 messages、secure 或 journal。直接打包容易包含不完整或被锁定的文件。
- 优先归档已轮转(rotated)的日志,比如
/var/log/messages-20260720、/var/log/secure-20260715这类带日期后缀的文件 - 用
find按修改时间筛选:例如只打包 7 天前的日志:find /var/log -name "*.log" -mtime +7 -type f - 跳过正在使用的日志:加
--exclude='*.log' --exclude='messages' --exclude='secure',防止打包被进程占用的文件
打包时带上日期并保留权限
归档名含日期便于识别,且必须用 -p 保留原始权限和所有者,否则恢复时可能影响服务读取。
- 基础命令:
tar -czpf logs-$(date +%Y%m%d).tar.gz -C /var/log --exclude='*.log' --exclude='messages' . -
-C /var/log切换到该目录再执行,避免路径冗余;.表示当前目录下所有匹配项 -
-z启用 gzip 压缩,平衡速度与体积;若空间紧张可换-J(xz)获得更高压缩率
验证和提取要精准定位
打包完成后别急着删源文件,先确认内容是否完整、关键日志是否在内。
- 列出归档内容:
tar -tzf logs-20260729.tar.gz | grep -E "(messages|secure|auth)" - 提取单个日志查看:
tar -xzf logs-20260729.tar.gz var/log/messages-20260720 -C /tmp/ - 如需解压到指定位置,始终用
-C明确目标路径,避免污染当前目录
自动化归档建议加简单校验
日常运维中,可把 tar 命令写成脚本,并附加基础检查逻辑。
- 打包后运行
tar -tzf logs-*.tar.gz > /dev/null验证归档可读,失败则退出 - 用
stat -c "%y %s" /var/log/messages-*确认源文件时间戳合理,排除空文件误入 - 归档成功后再清理旧日志:
find /var/log -name "messages-20260[0-6]*" -delete(谨慎测试后再启用)


















