Как я могу отобразить IP-адрес интерфейса?

Вопрос или проблема

Если я хочу отобразить IP-адрес, который назначен eth1, как я могу сделать это в Bash?

Попробуйте это (Linux)

/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2| cut -d' ' -f1

или это (Linux)

/sbin/ifconfig eth0 | awk -F ' *|:' '/inet addr/{print $4}'

или это (*BSD)

ifconfig bge0 | grep 'inet' | cut -d' ' -f2

или это (Solaris 10)

ifconfig e1000g0 | awk '/inet / {print $6}'

Очевидно, измените название интерфейса, чтобы он соответствовал тому, от которого вы хотите получить информацию.

Как упомянул @Manuel, ifconfig устарел, и в дальнейшем рекомендуется использовать ip.

ip -f inet addr show eth1

и использовать sed от @bleater или awk от @Jason H. для фильтрации вывода (в зависимости от того, нужна ли вам маска)

ip -f inet addr show eth1 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'

ip -f inet addr show eth1 | awk '/inet / {print $2}'

ip -br addr show dev eth1 |awk '{print $3}'

На системе Linux:

hostname --all-ip-addresses

выведет только IP-адрес.

На системе Solaris используйте:

ifconfig e1000g0 | awk '/inet / {print $2}'

Для получения как IPv4, так и IPv6 IP-адресов с сетевыми масками просто попробуйте:

ip a l eth1 | awk '/inet/ {print $2}'

Или без сетевых масок (не могу представить, зачем нужен IP-адрес без маски):

ip a l eth1 | awk '/inet/ {print $2}' | cut -d/ -f1

Лучший способ: получить IP-адрес с помощью команды “ip”, потому что “ifconfig” устарел. В противном случае у вас возникнут проблемы с использованием “ifconfig”, так как вывод ifconfig зависит от языка.

Я использую эту команду для получения всех IP (IPv4):

ip addr show | grep -o "inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"

Хорошо работает на различных версиях Linux:

ip -brief address show eth0 | awk '{print $3}' | awk -F/ '{print $1}'

на Ubuntu 20.04

$ sudo apt install moreutils
$ ifdata -pa eth0
192.168.1.152

На новых версиях ОС и инструментов также должен работать интерфейс JSON, например:

 ip -json addr show docker0 \
 | jq '.[].addr_info[] | select(.family == "inet").local'

Что на моей машине выводит:

 "172.17.0.1"

может быть, это поможет

ifconfig eth1

ip addr show dev eth0 если вы хотите увидеть все адреса одного интерфейса

Одна строка с sed:

ifconfig wlan0 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'

Замените wlan0 желаемым интерфейсом.

Я попробовал принятое решение на CentOS 7, но оно не работает.

/sbin/ifconfig eth0 | grep 'inet ' | tr -s ' ' | cut -d" " -f3

работает у меня, на случай, если кто-то еще столкнется с той же проблемой.

Это то, что я использую:

ip r s | awk '/eth0/ {print $7}'

выведет, например: 192.168.0.1

На MacOS я использую ipconfig getifaddr <interface-name>
Команда указана в Руководстве системного менеджера BSD.

Ответ или решение

Вопрос о том, как отобразить IP-адрес, назначенный определенному сетевому интерфейсу, например, eth1, часто возникает как у новых, так и у опытных пользователей Linux и других операционных систем на базе Unix. Понимание того, как извлечь эту информацию, является фундаментальной частью администрирования системы и решения сетевых проблем. Давайте рассмотрим несколько методов и инструментов, которые можно использовать для выполнения этой задачи.

Теоретическая часть

Для отображения IP-адресов сетевых интерфейсов в большинстве Unix-систем традиционно использовалась утилита ifconfig. Однако с течением времени ifconfig стала считаться устаревшей, особенно в Linux, где ее постепенно заменяет утилита ip из пакета iproute2. Утилита ip предлагает более мощный, гибкий и масштабируемый функционал, что делает ее предпочтительным выбором для современных систем. Тем не менее, ifconfig все еще может быть полезна для выполнения базовых операций в некоторых средах и на старых системах.

Однако стоит понимать, что в зависимости от системы и используемого дистрибутива команды и их синтаксис могут различаться. Важно учитывать версии утилит и специфику платформы при использовании предложенных ниже команд.

Примеры использования

Использование ifconfig

На системах, где ifconfig все еще актуальна, вы можете выполнить следующую команду для вывода IP-адреса интерфейса eth1:

/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1

Эта команда сначала извлекает строку с IP-адресом с помощью grep, после чего выполняет разбивку строки и извлечение самого адреса с помощью cut.

Другой вариант использования ifconfig для извлечения IP-адреса:

/sbin/ifconfig eth0 | awk -F ' *|:' '/inet addr/{print $4}'

Здесь используется мощь awk для разбивки строки на части и выбора нужной информации.

Использование ip

Для более современных систем настоятельно рекомендуется использовать утилиту ip. Простейший способ получить IP-адрес с помощью этой утилиты:

ip -f inet addr show eth1 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'

Или с использованием awk:

ip -f inet addr show eth1 | awk '/inet / {print $2}'

Использование других утилит и подходов

На системах, таких как BSD или Solaris, подходы могут варьироваться. Например, для BSD можно использовать:

ifconfig bge0 | grep 'inet' | cut -d' ' -f2

А для Solaris:

ifconfig e1000g0 | awk '/inet / {print $6}'

Для отображения IP-адресов всех интерфейсов на Linux:

hostname --all-ip-addresses

А для получения как IPv4, так и IPv6 адресов:

ip a l eth1 | awk '/inet/ {print $2}'

Применение этого на практике

Знание того, как получить IP-адрес сетевого интерфейса, может быть полезно в различных сценариях. Например, в процессе проверки сетевого подключения, диагностики проблемы или при конфигурировании сетевых служб. Важно помнить, что администратор системы должен быть готов справиться с набором инструментов, доступных на его платформе. Если ваш дистрибутив поддерживает ip, лучше всего сразу обращаться к этой утилите за ее более продвинутым функционалом. Если же вы имеете дело с устаревшими или специализированными системами, знание традиционных утилит, таких как ifconfig, может оказаться незаменимым.

Таким образом, выбор инструмента и метода зависит от специфики вашей операционной системы, вашего окружения и требований к вашей задаче. Будьте внимательны к деталям и всегда адаптируйте предложенные методы под свою конкретную среду.

Оцените материал
Добавить комментарий

Капча загружается...