2009-08-07 13 views
7

kopać Powiedzmy mam listę adresów IP, wchodzących w dzienniku, że mam osadowych:Przełęcz stdin do hosta Unix lub polecenia

1.1.1.1 
1.1.1.2 
1.1.1.3 

chciałbym łatwo rozwiązać je na nazwy hostów. Chciałbym móc być w stanie:

tail -f access.log | host - 

Który nie działa tak, jak host nie rozpoznaje wejścia ze standardowego wejścia w ten sposób. Jaki jest najłatwiejszy sposób na zrobienie bez konieczności zapisu statycznego pliku lub powrotu do perl/python/etc.?

Odpowiedz

19

Zastosowanie xargs -l:

tail -f access.log | xargs -l host 
+0

Spowoduje to czkawkę, ponieważ host będzie faktycznie uruchomiony z hostem host 1.1.1.1 1.1.1.2 Powoduje wyszukiwanie dns na niepoprawnym serwerze DNS. Ustawienie "-d" \ n "" nie pomaga. – tomasz

+6

Użyj "xargs -l" (lub "xargs -L 1"), aby upewnić się, że polecenie jest uruchamiane dla każdej linii. –

4

Można również użyć read polecenie wbudowane:

tail -f access.log | while read line; do host $line; done 
3

w poniższych poleceń zastąpić cat z tail -f itd razie potrzeby.

Korzystanie host:

$ cat my_ips | xargs -i host {} 
1.1.1.1.in-addr.arpa domain name pointer myhost1.mydomain.com. 
1.1.1.2.in-addr.arpa domain name pointer myhost2.mydomain.com. 

Korzystanie :

$ cat my_ips | xargs -i dig -x {} +short 
myhost1.mydomain.com. 
myhost2.mydomain.com. 

Uwaga że opcja xargs-i implikuje opcję -L 1.

Aby uzyskać adresy IP hosta, zobacz this answer.

Powiązane problemy