能夠在標準輸出上寫入,但不能在檔案中寫入

能夠在標準輸出上寫入,但不能在檔案中寫入

我想追蹤我訪問的 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

相關內容