Potrafi pisać na standardowe wyjście, ale nie w pliku

0

Chcę zachować ślad adresu URL, który odwiedzam, więc używam wiersza polecenia w ten sposób:

tcpdump -ien1 -v -X 'port 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-] ) ../ ”   „.localtime ().”: http: // 3 $ 2 $ 2 n / / ge | grep „^ BEGURL”

Działa dobrze, jeden adres URL na linię. Ale jeśli to zrobię

tcpdump -ien1 -v -X 'port 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-] ) ../ ”   „.localtime ().”: http: // 3 $ 2 $ 2 n / / ge | grep „^ BEGURL” & gt; / tmp / out

(zauważ koniec & gt; & gt; / tmp / out) Wtedy plik jest pusty! Wiesz dlaczego? To dla mnie całkowicie nielogiczne.

Próbowałem też przekierować stdout i stderr do / tmp / out, to wciąż jest puste. Plik ma dostęp do zapisu. Nie mam pojęcia, co to może być. Czy jest coś innego niż stdout i stderr ??

za wszelką pomoc.

studiohack
źródło

Odpowiedzi:

0

Możesz powiedzieć, że próbowałeś tego, kiedy powiesz „Próbowałem także przekierować stdout i stderr do / tmp / out” - ale wydaje się, że jest to najbardziej prawdopodobny problem: spróbuj dodać 2 & gt;

Jeśli nie, to aby pomóc w debugowaniu, spróbuj dodać 2 & gt; / dev / null do pierwszego polecenia i sprawdź, czy nadal otrzymujesz dane wyjściowe.

Czy możesz uprościć polecenie do testowania? Na przykład, czy to działa:

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out
ed.
źródło
0

Miałem ten sam problem zaledwie kilka dni temu. Spróbuj użyć -w opcja, aby zapisać pakiety do pliku. Aby uzyskać więcej informacji, zobacz man tcpdump.

Nornagest
źródło