Capaz de escribir en stdout pero no en un archivo

Capaz de escribir en stdout pero no en un archivo

Quiero mantener un rastro de la URL que visito, así que uso una línea de comando como esta:

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

Está funcionando bien, una URL por línea. Pero si lo hago

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

(observe el final >> /tmp/out) ¡Entonces el archivo está vacío! ¿Sabes por qué? Es totalmente ilógico para mí.

También intenté redirigir stdout y stderr a /tmp/out, todavía está vacío. El archivo tiene acceso de escritura. No tengo idea de qué puede ser. ¿Hay algo más que stdout y stderr?

para cualquier ayuda.

Respuesta1

Puede querer decir que ha intentado esto cuando dice "También intenté redirigir stdout y stderr a /tmp/out", pero parece ser el problema más probable: intente agregar 2>&1 al final.

De lo contrario, para ayudar a depurar, intente agregar 2>/dev/null a su primer comando y vea si aún obtiene resultados.

Además, ¿puedes simplificar el comando para realizar pruebas? Por ejemplo, ¿funciona esto?

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

Respuesta2

Tuve el mismo problema hace apenas unos días. Intente usar la -wopción para escribir los paquetes en un archivo. Para más información, ver man tcpdump.

información relacionada