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

0

Eu quero manter um traço da URL que eu visito, então eu uso uma linha de comando como esta:

tcpdump -ien1 -v -X 'tcp port 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$//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 'tcp port 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$//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/out

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

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

para qualquer ajuda.

    
por studiohack 16.08.2011 / 23:23

2 respostas

0

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

Se não, então ajude a depurar tente adicionar 2 > / dev / null ao seu primeiro comando e veja se você ainda obtém a saída.

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

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out
    
por 10.09.2011 / 18:43
0

Eu tive o mesmo problema há poucos dias. Tente usar a opção -w para gravar os pacotes em um arquivo. Para mais informações, consulte man tcpdump .

    
por 10.09.2011 / 18:47