![可以在标准输出上写入,但不能在文件中写入](https://linux22.com/image/1286618/%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%A0%87%E5%87%86%E8%BE%93%E5%87%BA%E4%B8%8A%E5%86%99%E5%85%A5%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E5%86%99%E5%85%A5.png)
我想保留我访问过的 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
。