tcpdump 的 -G 选项需与 -w 配合使用,通过 -G 秒数指定轮转周期、-w 文件名含 %s 占位符实现按时间切分抓包文件,支持与 -C(大小限制)叠加触发任一轮转条件,并建议配合 find 定期清理过期文件。

tcpdump 本身没有 -G 参数,你提到的 tcpdump -G 实际上是真实存在的功能,但写法和逻辑需要准确理解:它不是“Tcpdump-G”这个命令,而是 tcpdump 的 -G 选项配合 -w 使用,用于按固定时间间隔轮转保存捕获文件,从而防止单个文件过大导致磁盘打满。
用 -G 实现定时切分抓包文件
核心原理是:-G 指定轮转周期(秒),-w 指定输出文件名模板,且文件名中必须包含 %s 占位符,tcpdump 会自动将 Unix 时间戳代入,生成带时间标记的独立文件。
- -G 60:每 60 秒新建一个捕获文件
- -w /tmp/cap_%s.pcap:文件名中的 %s 会被替换为当前秒级时间戳(如 1746102360)
- 组合起来就是:sudo tcpdump -i eth0 -G 60 -w /tmp/cap_%s.pcap port 80
这样每分钟生成一个新 pcap 文件(如 cap_1746102360.pcap、cap_1746102420.pcap),旧文件不会被覆盖,便于归档或清理。
搭配 -C 防止单文件过大(双重保险)
仅靠 -G 还不够——如果某分钟内流量极大,单个 pcap 文件仍可能暴涨到几 GB。建议叠加 -C 选项限制单文件大小(单位 KB):
- -C 100000:单个文件达到 100MB(100×1024KB)即切割
- 与 -G 同时使用时,满足任一条件(时间到 或 大小到)就触发轮转
- 示例:sudo tcpdump -i ens33 -G 300 -C 50000 -w /var/log/pkt_%s.pcap host 192.168.1.100
自动清理过期文件避免磁盘占满
切分只是第一步,长期运行必须配套清理策略。推荐用 find + 定时任务 删除 N 天前的抓包文件:
- 保留最近 7 天的抓包文件:find /var/log/ -name "pkt_*.pcap" -mtime +7 -delete
- 加入 crontab 每天凌晨执行:0 2 * * * find /var/log/ -name "pkt_*.pcap" -mtime +7 -delete
- 更稳妥可先压缩再删:find /var/log/ -name "pkt_*.pcap" -mtime +3 -exec gzip {} \;
补充:验证与调试技巧
首次部署建议加 -v 和 -tt 确认时间戳是否正常,同时用 -c 限包数快速测试:
- 试运行 10 个包,看文件是否生成:sudo tcpdump -i lo -G 10 -w /tmp/test_%s.pcap -c 10 icmp
- 检查文件时间戳是否递增:ls -lt /tmp/test_*.pcap
- 用 tcpdump -r 文件名 随机读一个确认内容可用


















