2009-08-07 7 views
7

Скажем, у меня есть список IP-адресов, входящих в журнал, который я хвостохранилища:Pass STDIN в хост Unix или рыть команду

1.1.1.1 
1.1.1.2 
1.1.1.3 

я хотел бы легко разрешить их имена хостов. Я хотел был бы быть в состоянии

tail -f access.log | host - 

Что не удается, поскольку хост не понимает входные данные из stdin таким образом. Каков самый простой способ сделать это без необходимости писать статический файл или резервное копирование в perl/python/etc.?

ответ

19

Использование xargs -l:

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

Это будет фактически икота, поскольку хост фактически будет запущен с хостом 1.1.1.1 1.1.1.2 Вызов поиска DNS на недействительном DNS-сервере. Установка «-d» \ n '', похоже, не помогает. – tomasz

+6

Используйте «xargs -l» (или «xargs -L 1»), чтобы гарантировать, что команда выполняется для каждой строки. –

4

Вы можете также использовать read:

встроенная команда
tail -f access.log | while read line; do host $line; done 
3

В приведенных ниже команд, замените cat с tail -f и т.д., если это необходимо.

Использование 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. 

Использование :

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

Обратите внимание, что -i вариант xargs подразумевает возможность -L 1.

Чтобы получить IP-адреса своего хоста, см. this answer.