Отображение IP-адреса на интерфейсе eth0

Вы можете использовать VirtualBox.

VirtualBox - это бесплатное решение для виртуализации x86, позволяющее работать в системе Linux в широком диапазоне операционных систем x86, таких как Windows, DOS, BSD или Linux.

Чтобы установить VirtualBox под Ubuntu 13.04, просто нажмите Ctrl + Alt + T на клавиатуре, чтобы открыть терминал. Когда он откроется, запустите следующие команды:

sudo apt-get install virtualbox

Как только он завершит установку, продолжите работу и создайте новую виртуальную машину

Тип во имя. Убедитесь, что вы выбрали правильный тип и версию ОС, находящейся в VHD.

enter image description here

Выберите использование существующего файла виртуального жесткого диска, и найдите свой файл VHD, а затем нажмите кнопку create.

1
задан 12 December 2014 в 02:56

14 ответов

Для обеспечения другого варианта вы можете использовать команду ip addr таким образом, чтобы получить IP-адрес:

ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1
ip addr show eth0 показывает только информацию о eth0 grep "inet\b" показывает строку с адресом IPv4 (если вам нужен адрес IPv6, измените его на "inet6\b") awk '{print $2}' печатает во втором поле, которое имеет ipaddress / mask, например 172.20.20.15/25 cut -d/ -f1 принимает только IP-адрес адресная часть.

В скрипте:

#!/bin/bash
theIPaddress=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
16
ответ дан 24 May 2018 в 01:05

Взято из https://stackoverflow.com/a/14910952/1695680

hostname -i

Однако это может вернуть локальный IP-адрес (127.0.0.1), поэтому вам, возможно, придется использовать и filter:

hostname -I

Из man-файлов hostname:

-i, --ip-address Отображает сетевой адрес (имена) имени хоста. Обратите внимание, что это работает, только если имя хоста может быть разрешено. Избегайте использования этой опции; вместо этого используйте имя хоста --all-ip-addresses. -I, --all-ip-addresses Показать все сетевые адреса хоста. Эта опция перечисляет все настроенные адреса на всех сетевых интерфейсах. Интерфейс loopback и локальные адреса ссылок IPv6 опущены. В отличие от опции -i, этот параметр не зависит от разрешения имен. Не делайте никаких предположений о порядке вывода.
13
ответ дан 24 May 2018 в 01:05

Вот некоторые oneliners .....

Функция Awk

ifconfig eth0 | awk '/inet addr/{split($2,a,":"); print a[2]}'

split в вышеупомянутой команде awk разделяет второй столбец на основе разделителя : и сохраняет разделенное значение в ассоциативный массив a. Таким образом, a[2] содержит значение второй части.

Awk

ifconfig eth0 | sed -n '/inet addr/s/.*inet addr: *\([^[:space:]]\+\).*/\1/p'

В базовом sed \(...\) называется захватной группой, которая используется для захвата символов. Мы могли бы отсылать этих захваченных символов через обратную ссылку. \([^[:space:]]\+\) захватывает любой символ, но не пробел один или несколько раз.

grep

ifconfig eth0 | grep -oP 'inet addr:\K\S+'

\K отбрасывает ранее согласованные символы от печати в финальном и \S+ матчах один или несколько непространственных символов.

grep

ifconfig eth0 | perl -lane 'print $1 if /inet addr:(\S+)/'

Один или несколько непространственных символов, которые находятся рядом с строкой inet addr:, являются и, наконец, мы печатаем только те захваченные символы.

4
ответ дан 24 May 2018 в 01:05
  • 1
    @edwardtorvalds добавил некоторое объяснение. Я думаю, что это будет полезно для будущих читателей. Не стесняйтесь задавать любые вопросы из приведенных выше команд ... :) – Avinash Raj 12 December 2014 в 12:07

Ответ @ markus-lindberg - мой любимый. Если вы добавите -o -4 к флагам ip, тогда вы получите гораздо более легко анализируемый (и последовательный) вывод:

ip -o -4 a | awk '$2 == "eth0" { gsub(/\/.*/, "", $4); print $4 }'

-o означает --oneline, что должно помочь именно в этом вид ситуаций. [F5] добавляется для ограничения адреса IPv4, что и подразумевает все остальные ответы.

4
ответ дан 24 May 2018 в 01:05
  • 1
    Полюбуйте флаги ip. Использование cut, а не расширенное awk wizardry: ip -o -4 addr show eth0 scope global | awk '{print $4;}' | cut -d/ -f 1 – DuffJ 16 December 2016 в 18:03
  • 2
    @ DuffJ, вероятно, это зависит от личного вкуса. I "обнаружено" cut после того, как я узнал о awk, и мне нравится минимизировать количество команд на моих конвейерах. Хорошее предложение в любом случае. – Amos Shapira 17 December 2016 в 10:55
  • 3
    Я полностью согласен, Амос. Спасибо за ваше решение! – DuffJ 19 December 2016 в 16:34

Я предлагаю использовать библиотеку python, такую ​​как netifaces, которая специально предназначена для этой цели.

sudo pip install netifaces
python -c "import netifaces; print netifaces.ifaddresses('eth0')[netifaces.AF_INET][0]['addr']"

Чтобы получить используемый сетевой интерфейс по умолчанию.

default_inf = netifaces.gateways()['default'][netifaces.AF_INET][1]
1
ответ дан 24 May 2018 в 01:05
ip addr|awk '/eth0/ && /inet/ {gsub(/\/[0-9][0-9]/,""); print $2}'

Используется только ip addr, который заменяет ifconfig и awk в сочетании с подстановкой (gsub).

Прекратите использовать слишком много процессов для простых задач

1
ответ дан 24 May 2018 в 01:05

Еще один вариант, который может быть полезен, если у вас нет awk (как это имеет место в некоторых встроенных устройствах):

ip addr show dev eth0 scope global | grep "inet\b" | cut -d/ -f 1 | egrep -o "([[:digit:]]{1,3}[.]{1}){3}[[:digit:]]{1,3}"
1
ответ дан 24 May 2018 в 01:05

Вот хороший, использует grep только как вторичную команду:

ip addr show eth0 | grep -oP 'inet \ K \ S [0-9.] +'

Я не понимаю, почему вы должны использовать больше команд, чем необходимо

1
ответ дан 24 May 2018 в 01:05
ifconfig eth0|grep 'inet '|awk '{print $2}'

1
ответ дан 24 May 2018 в 01:05

здесь для IPv4:

ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"

здесь для IPv4 & amp; конкретный dev (eth0):

ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"

для dev :

ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"

1
ответ дан 24 May 2018 в 01:05

это можно использовать и с обычным пользователем.

ip addr show eth0 | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
0
ответ дан 24 May 2018 в 01:05
  • 1
    он просит eth0, эта версия вашего скрипта может помочь (также показать loopback tho) ip addr show | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6 – TiloBunt 25 March 2017 в 21:01
  • 2
    Это почти тот же ответ, что и askubuntu.com/a/560466/367990 , только используя cut дважды вместо комбинации awk и cut для синтаксического анализа вывода. В следующий раз вы должны сначала проверить все остальные ответы и убедиться, что вы не отправляете дублирующее решение. В этом случае здесь, я думаю, что это спорно, является ли это дубликат или просто похожи, поэтому, пожалуйста, принять его как общий намек. Благодарю. – Byte Commander 7 July 2017 в 22:49

Это самый короткий способ, который я смог найти:

ip -f inet addr show $1 | grep -Po 'inet \K[\d.]+'

Заменить $1 на ваш сетевой интерфейс.

ip -f inet сообщает ip чтобы возвращать значения для семейства inet (ipv4).

grep -Po сообщает grep, чтобы перевести следующее значение в perl-regex и распечатать только соответствующие значения.

regex \K[\d.]+ говорит: «Отбросьте все до этой точки (\ K) и сопоставьте столько числовых значений, сколько следует за точкой в ​​строке». Следовательно, это будет соответствовать только IP-адресу и игнорировать все после него, включая маску подсети shortform \ XX.

0
ответ дан 24 May 2018 в 01:05

в эти дни с множественными интерфейсами (например, если вы используете докер), а интерфейс именования ETH уже не является нормами

Я использую эту команду для извлечения IP / Mask:

[ f1]

Итак, независимо от того, сколько интерфейсов у меня будет и какое бы имя они ни были, GREP только захватит первый, имеющий параметр MULTICAST.

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

IP=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6|cut -d'/' -f1)

Я использую эту команду для разных BDS & amp; NIX никогда не терпит неудачу;)

0
ответ дан 24 May 2018 в 01:05
  • 1
    Если вы собираетесь проанализировать вывод ip, используйте параметр -o. – muru 26 October 2017 в 11:31

В моем сценарии я использую что-то вроде этого:

re="inet[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
if [[ $(ip addr show eth0) =~ $re ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Cannot determin IP" 1>&2
fi

Он не порождает никакого процесса.

0
ответ дан 24 May 2018 в 01:05

Другие вопросы по тегам:

Похожие вопросы: