在 Bash 脚本中将主机名解析为 IP 地址的最简洁方法是什么?我在用着架构Linux。
答案1
您可以使用getent
,它附带glibc
(所以您几乎肯定在 Linux 上有它)。这可以使用 gethostbyaddr/gethostbyname2 解决,因此还将检查/etc/hosts
/NIS/etc:
getent hosts unix.stackexchange.com | awk '{ print $1 }'
或者,正如 Heinzi 下面所说,您可以使用dig
参数+short
(直接查询 DNS 服务器,不查看/etc/hosts
/NSS/etc):
dig +short unix.stackexchange.com
如果dig +short
不可用,则以下任何一项都应该有效。所有这些都直接查询DNS并忽略其他解析方式:
host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'
如果只想打印一个IP,则将该exit
命令添加到awk
的工作流程中。
dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'
答案2
与host
从dnsutils包裹:
$ host unix.stackexchange.com
unix.stackexchange.com has address 64.34.119.12
(已更正包名根据注释。请注意,其他发行版有host
不同的软件包:Debian/Ubuntu绑定9主机, 开放SUSE绑定实用程序, 节俭软件绑定.)
答案3
我的机器上有一个工具似乎可以完成这项工作。手册页显示它似乎与 mysql 一起提供...以下是如何使用它:
resolveip -s unix.stackexchange.com
64.34.119.12
如果无法解析主机名,则该工具的返回值不同于 0:
resolveip -s unix.stackexchange.coma
resolveip: Unable to find hostid for 'unix.stackexchange.coma': host not found
exit 2
更新 在 Fedora 上,它带有 mysql-server :
yum provides "*/resolveip"
mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files
Dépôt : fedora
Correspondance depuis :
Nom de fichier : /usr/bin/resolveip
我想这会给你的脚本创建一个奇怪的依赖关系......
答案4
getent hosts unix.stackexchange.com | cut -d' ' -f1