Вопрос или проблема
Если я хочу отобразить 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
, может оказаться незаменимым.
Таким образом, выбор инструмента и метода зависит от специфики вашей операционной системы, вашего окружения и требований к вашей задаче. Будьте внимательны к деталям и всегда адаптируйте предложенные методы под свою конкретную среду.