На странице руководства имя хоста
указано для параметра -I
: ] «Не делайте предположений о порядке вывода.» .
В любом случае, наши серверы всегда возвращали внешний IP-адрес в первую очередь и IP-адрес локальной сети во вторую. К сожалению, большая часть устаревшего кода выполняется на этом предположении при использовании hostname -I | cut -d '' -f1
, чтобы получить внешний IP. За выходные что-то изменилось. Теперь внутренний IP-адрес отображается первым, а внешний - вторым. Спустя годы это новая ситуация, и мне интересно, что могло повлиять на это изменение.
Есть предположения?
Операционная система: Ubuntu 14.04.3 LTS
Ядро: Linux 4.4.110-x86_64-jb1
Существует множество способов достижения одного и того же результата. Кроме использования /proc или "ip a" или "ss" существует способ извлечения данных с помощью SALT или любого другого инструмента управления.
Я не совсем уверен, как "имя хоста" подтягивает данные, но я могу, по крайней мере, дать вам другой способ проверить, что вам нужно.
Только для ipv4:
ip -4 a show dev eth0 | grep inet | cut -d " " -f6 | cut -d "/" -f1
В случае, если у вас есть вторичный 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 на реальный интерфейс, по крайней мере, эта информация не изменится.