温馨提示×

如何切割Linux大日志

小樊
38
2026-07-18 11:09:42
栏目: 智能运维

在 Linux 下切割(拆分)大日志文件,常见做法有 按大小切割、按行数切割、按时间切割。下面按使用场景给你一套实用方案。


一、按大小切割(最常用)

1️⃣ 使用 split

split -b 100M big.log big.log.part.

解释:

  • -b 100M:每个文件 100MB
  • big.log:原日志
  • big.log.part.:输出前缀

生成文件示例:

big.log.part.aa
big.log.part.ab
big.log.part.ac

按大小 + 数字后缀

split -b 100M --numeric-suffixes big.log big.log.part.

二、按行数切割

split -l 100000 big.log big.log.part.
  • 每个文件 10 万行

三、按时间切割(日志分析常用)

1️⃣ 使用 sed 按时间范围截取

假设日志格式:

2025-01-01 10:00:00 xxx

截取某天日志:

sed -n '/2025-01-01/,/2025-01-02/p' big.log > 2025-01-01.log

⚠️ 注意:结束时间必须真实存在,否则会一直匹配到文件末尾。


2️⃣ 使用 awk(更精确)

awk '/^2025-01-01/' big.log > 2025-01-01.log

四、实时切割(日志还在写入)

✅ 推荐:logrotate(生产环境标准)

示例配置 /etc/logrotate.d/myapp

/var/log/myapp.log {
    size 100M
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

说明:

  • size 100M:超过 100M 切割
  • rotate 7:保留 7 份
  • compress:gzip 压缩
  • copytruncate:不重启服务

五、边读边切(不生成超大文件)

zcat big.log.gz | split -l 50000 - big.part.

六、查看切割效果

ls -lh big.log.part.*
wc -l big.log.part.*

七、常见错误

❌ 直接 rm 大日志(程序还在写)
✅ 用 logrotate: > big.log

❌ 直接 cp 正在写入的日志
✅ 用 rsynclogrotate


八、推荐方案总结

场景 推荐方式
临时分析 split
按时间 awk / sed
生产环境 logrotate
超大文件 split -b

如果你愿意,可以把 日志格式 / 文件大小 / 是否正在写入 发我,我可以给你一条最合适的具体命令

0