Capaz de escrever em stdout, mas não em um arquivo

Capaz de escrever em stdout, mas não em um arquivo

Quero manter um rastreamento do URL que visito, então uso uma linha de comando como esta:

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

Está funcionando bem, um URL por linha. Mas se eu fizer

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

(observe o final >> /tmp/out) Então o arquivo está vazio! Você sabe por quê? É totalmente ilógico para mim.

Também tentei redirecionar stdout e stderr para/tmp/out, ainda está vazio. O arquivo tem acesso de gravação. Não tenho ideia do que pode ser. Existe algo além de stdout e stderr?

para qualquer ajuda.

Responder1

Você pode querer dizer que já tentou isso quando diz "Eu também tentei redirecionar stdout e stderr para /tmp/out" - mas parece ser o problema mais provável: então tente adicionar 2>&1 ao final.

Caso contrário, para ajudar na depuração, tente adicionar 2>/dev/null ao seu primeiro comando e veja se você ainda obtém saída.

Além disso, você pode simplificar o comando para teste? Por exemplo, isso funciona:

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

Responder2

Eu tive o mesmo problema há apenas alguns dias. Tente usar a -wopção de gravar os pacotes em um arquivo. Para mais informações, veja man tcpdump.

informação relacionada