Kann auf Standardausgabe schreiben, aber nicht in eine Datei

Kann auf Standardausgabe schreiben, aber nicht in eine Datei

Ich möchte die von mir besuchten URLs protokollieren und verwende daher eine Befehlszeile wie diese:

tcpdump -ien1 -v -X 'TCP-Port 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"

Es funktioniert gut, eine URL pro Zeile. Aber wenn ich

tcpdump -ien1 -v -X 'TCP-Port 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/aus

(beachten Sie das Ende >> /tmp/out) Dann ist die Datei leer! Wissen Sie, warum? Für mich ist das völlig unlogisch.

Ich habe auch versucht, stdout und stderr nach /tmp/out umzuleiten, es ist immer noch leer. Die Datei hat Schreibzugriff. Ich habe keine Ahnung, was es sein kann. Gibt es noch etwas anderes als stdout und stderr??

für jede Hilfe.

Antwort1

Sie meinen vielleicht, dass Sie dies versucht haben, wenn Sie sagen „Ich habe auch versucht, stdout und stderr nach /tmp/out umzuleiten“ – aber das scheint das wahrscheinlichste Problem zu sein: Versuchen Sie also, am Ende 2>&1 hinzuzufügen.

Wenn nicht, versuchen Sie zur Unterstützung des Debuggens, Ihrem ersten Befehl 2>/dev/null hinzuzufügen, und prüfen Sie, ob Sie immer noch eine Ausgabe erhalten.

Können Sie den Befehl zum Testen auch vereinfachen? Funktioniert beispielsweise Folgendes:

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

Antwort2

Ich hatte vor ein paar Tagen das gleiche Problem. Versuchen Sie, die -wOption zu verwenden, um die Pakete in eine Datei zu schreiben. Weitere Informationen finden Sie unter man tcpdump.

verwandte Informationen