可以在标准输出上写入,但不能在文件中写入

可以在标准输出上写入,但不能在文件中写入

我想保留我访问过的 URL 的踪迹,因此我使用如下命令行:

tcpdump -ien1 -v -X'tcp 端口 80'| sed -nl's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....主机:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL"

每行一个 URL 就够了。但如果我

tcpdump -ien1 -v -X'tcp 端口 80'| sed -nl's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....主机:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL">> /tmp/输出

(注意结尾 >> /tmp/out)然后文件是空的!你知道为什么吗?这对我来说完全不合逻辑。

我还尝试将 stdout 和 stderr 重定向到 /tmp/out,但它仍然是空的。该文件具有写访问权限。我不知道它是什么。除了 stdout 和 stderr 之外还有其他东西吗?

寻求任何帮助。

答案1

当您说“我也尝试将 stdout 和 stderr 重定向到 /tmp/out”时,您可能意味着您已经尝试过这样做 - 但这似乎是最可能的问题:因此请尝试在末尾添加 2>&1。

如果没有,那么为了帮助调试,请尝试将 2>/dev/null 添加到您的第一个命令中,看看是否仍然得到输出。

另外,您可以简化测试命令吗?例如,这有效吗:

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out

答案2

几天前我也遇到过同样的问题。尝试使用选项-w将数据包写入文件。有关更多信息,请参阅man tcpdump

相关内容