【发布时间】:2010-11-17 19:45:59
【问题描述】:
假设我有一个 IP 列表进入我正在跟踪的日志:
1.1.1.1
1.1.1.2
1.1.1.3
我想轻松地将它们解析为主机名。我希望能够
tail -f access.log | host -
由于主机不以这种方式理解来自标准输入的输入而失败。无需编写静态文件或回退到 perl/python/etc.,最简单的方法是什么?
【问题讨论】:
假设我有一个 IP 列表进入我正在跟踪的日志:
1.1.1.1
1.1.1.2
1.1.1.3
我想轻松地将它们解析为主机名。我希望能够
tail -f access.log | host -
由于主机不以这种方式理解来自标准输入的输入而失败。无需编写静态文件或回退到 perl/python/etc.,最简单的方法是什么?
【问题讨论】:
使用xargs -l:
tail -f access.log | xargs -l host
【讨论】:
您也可以使用 read 内置函数:
tail -f access.log | while read line; do host $line; done
【讨论】:
在下面的命令中,如果需要,将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.
请注意,xargs 的 -i 选项隐含了 -L 1 选项。
要首先获取主机的 IP,请参阅 this answer。
【讨论】:
在 bash 中你可以这样做:
stdout | (dig -f <(cat))
示例程序:
(
cat <<EOF
asdf.com
ibm.com
microsoft.com
nonexisting.domain
EOF
) | (dig -f <(cat))
这样你只调用一次'dig'。
【讨论】: