在 Linux 下分割大日志文件,常见场景和对应方法如下:
split 命令split -b 100M access.log access_part_
-b 100M:每个文件 100MBaccess_part_aa、access_part_ab …按行数分割:
split -l 100000 access.log access_part_
自定义后缀长度:
split -b 200M -d access.log log_
生成:log_00、log_01
logrotate(推荐生产环境)配置文件示例:
/var/log/access.log {
size 100M
rotate 5
compress
missingok
notifempty
}
手动执行:
logrotate -f /etc/logrotate.d/access
awk '/2025-01-01/ {print > "log_2025-01-01.log"}' access.log
或按小时:
awk '{print > "log_" substr($4,2,11) ".log"}' access.log
tail + splittail -F access.log | split -b 50M - live_part_
split -b 100M access.log | gzip > access.gz
或:
split -b 100M access.log access_part_ && gzip access_part_*
cat access_part_* > access.log
| 场景 | 方法 |
|---|---|
| 临时分析 | split |
| 生产日志 | logrotate |
| 按内容 | awk |
| 实时 | tail + split |
如果你能说明日志格式 / 使用场景(nginx、java、系统日志等),我可以给你更精确的命令。