2009-08-07 13 views
7

scavare Diciamo che ho una lista di indirizzi IP che entrano in un registro che sto tailing:Passo stdin in host Unix o comando

1.1.1.1 
1.1.1.2 
1.1.1.3 

mi piacerebbe risolvere facilmente ad ospitare nomi. Mi piacerebbe essere in grado di

tail -f access.log | host - 

Quale non riesce come host non capisce input da stdin in questo modo. Qual è il modo più semplice per farlo senza dover scrivere un file statico o fallback in perl/python/etc.?

risposta

19

Uso xargs -l:

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

Questo sarà effettivamente singhiozzo come ospite sarà effettivamente essere effettuate con ospite 1.1.1.1 1.1.1.2 Causando una ricerca DNS su un server DNS non valido. L'impostazione "-d" \ n "" non sembra aiutarla. – tomasz

+6

Utilizzare "xargs -l" (o "xargs -L 1") per garantire che il comando venga eseguito per ogni riga. –

4

Si potrebbe anche utilizzare il read integrato:

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

Nei comandi seguenti, sostituire cat con tail -f, ecc, se necessario.

Utilizzando 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. 

Utilizzando :

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

Si noti che l'opzione -i al xargs implica l'opzione -L 1.

Per ottenere gli IP del proprio host, vedere this answer.