![什么影响“主机名 -I” IP 顺序](https://linux22.com/image/733163/%E4%BB%80%E4%B9%88%E5%BD%B1%E5%93%8D%E2%80%9C%E4%B8%BB%E6%9C%BA%E5%90%8D%20-I%E2%80%9D%20IP%20%E9%A1%BA%E5%BA%8F.png)
的手册页hostname
告诉我们该选项-I
:“不要对输出的顺序做任何假设。”。
无论如何,我们的服务器总是首先返回外部 IP,然后返回本地网络 IP。不幸的是,许多遗留代码都是基于此假设运行的,同时用于hostname -I | cut -d' ' -f1
获取外部 IP。上周末,情况发生了变化。现在,首先显示内部 IP,然后显示外部 IP。这是多年后出现的新情况,我想知道是什么影响了这种变化。
有什么假设吗?
操作系统:Ubuntu 14.04.3 LTS
内核:Linux 4.4.110-x86_64-jb1
答案1
有多种方法可以实现您需要的相同结果。除了使用 /proc 或“ip a”或“ss”之外,还有一种方法可以使用 SALT 或任何其他管理工具来提取数据。
我不太清楚“主机名”如何提取其数据,但我至少可以为您提供另一种方法来检查您需要的内容。
仅适用于 IPv4:
ip -4 a show dev eth0 | grep inet | cut -d " " -f6 | cut -d "/" -f1
如果你在同一个接口上有辅助 IP,并且需要主 IP,那么:
ip -4 a show dev eth0:0 | grep inet | cut -d " " -f6 | cut -d "/" -f1
仅适用于 IPv6:
ip -6 a show dev eth0 | grep inet | cut -d " " -f6 | cut -d "/" -f1
如果您需要子网掩码,请忽略我使用的最后一个“cut”命令。您可能希望用实际拥有的接口替换 eth0,至少该信息不会改变。