我正在尝试让tcpdump使用以下命令根据文件大小和时间轮换大量的pcap文件:
tcpdump -i lo -G 60 -W 5 -C 1 -w /var/tmp/trace
我预计它会在5个不同的日志文件(名为trace0,trace1,trace2等)中旋转,当它们达到最大大小为1M(来自-C选项)或经过60秒后(来自-G)选项)。相反,只创建了trace0,并且在60秒过后它会被覆盖。
根据手册页对-G参数的解释,我认为,因为我也使用-C,文件将以'file< count>'格式保存:
-G rotate_seconds 如果指定,则每旋转一次旋转使用-w选项指定的转储文件。 Savefiles将具有-w指定的名称,该名称应包含strftime(3)定义的时间格式。如果未指定时间格式,则每个新文件都将覆盖前一个。 如果与-C选项一起使用,文件名将采用`file< count>'的形式。
如果省略-G选项,则会按预期创建多个文件,但在这种情况下,它们只会根据文件大小而不是时间轮换。
我有什么遗漏可以解释为什么我只得到trace0,而不是其他四个?我的tcpdump版本是4.9.0。
答案 0 :(得分:0)
如果未指定时间格式,则每个新文件都将覆盖前一个。
您必须在文件名的末尾添加%H:%M:%S之类的内容,以防止覆盖发生。要控制文件数量,可以通过挂钩到旋转后命令
来解决清理脚本:
echo 'ls -tp trace*| tail -n +6 | xargs -I{} sh -c "echo \"Removing {}\"; rm {}"' > cleanup.sh && chmod a+x cleanup.sh
Tcpdump命令
sudo tcpdump -i lo0 -G 1 -W 5 -C 1 -w trace%H:%M:%S -z ./cleanup.sh
示例输出:
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
Removing trace11:45:580
Removing trace11:45:570
Removing trace11:45:590
Removing trace11:46:000
Removing trace11:46:010
产生的文件
ls -la trace*
-rw-r--r-- 1 root staff 24 Jul 5 11:48 trace11:48:250
-rw-r--r-- 1 root staff 894 Jul 5 11:48 trace11:48:270
-rw-r--r-- 1 root staff 894 Jul 5 11:48 trace11:48:280
-rw-r--r-- 1 root staff 894 Jul 5 11:48 trace11:48:290
-rw-r--r-- 1 root staff 894 Jul 5 11:48 trace11:48:300