假设我有一个列入我正在拖尾的日志的IP列表:
1.1.1.1
1.1.1.2
1.1.1.3
我想轻松地将它们解析为主机名。我希望能够
tail -f access.log | host -
哪个失败,因为主机不会以这种方式理解来自stdin的输入。无需编写静态文件或回退到perl / python / etc,最简单的方法是什么?
答案 0 :(得分:19)
使用xargs -l
:
tail -f access.log | xargs -l host
答案 1 :(得分:4)
你也可以使用read内置:
tail -f access.log | while read line; do host $line; done
答案 2 :(得分: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.
使用dig
:
$ cat my_ips | xargs -i dig -x {} +short
myhost1.mydomain.com.
myhost2.mydomain.com.
请注意,-i
的{{1}}选项意味着xargs
选项。
要首先获取某个主机的IP,请参阅this answer。
答案 3 :(得分:0)
在bash中,您可以执行以下操作:
stdout | (dig -f <(cat))
示例程序:
(
cat <<EOF
asdf.com
ibm.com
microsoft.com
nonexisting.domain
EOF
) | (dig -f <(cat))
这样,您只需调用一次“ dig”。