Печать интерфейса-ipaddress с помощью одной команды (по каналам)

ifconfig дает следующий результат:

eth0 Link encap:Ethernet HWaddr 4c:87:0e:z3:e7:11 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:35767 errors:0 dropped:0 overruns:0 frame:0 TX packets:35767 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5053027 (5.0 MB) TX bytes:5053027 (5.0 MB) vmnet1 Link encap:Ethernet HWaddr 60:80:66:m0:00:01 inet addr:192.168.139.1 Bcast:192.168.139.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:70 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

Мне сейчас нужен вывод, как

 eth0 wlan0 127.0.0.1 vmnet1 192.168.139.1 

поэтому я запускаю команду

 ifconfig | awk '/encap|inet addr/{ print }' 

но я застрял сейчас, так как мне нужно объединить 2 строки в зависимости от погоды, следующая строка содержит шаблон ipaddress. Хотя скрипт оболочки может сделать трюк, но мне нужно просто одно командное решение. Любая помощь будет оценена. Хотя для циклов есть awk, но вперед, глядя в следующую строку, сопоставление, а затем печать на консоли – вызов для меня.

или существует простая команда / флаг для достижения такой цели?

команда маршрута, похоже, выполняет трюк (извлечение awk-поля !!), но в нем не перечисляются неактивные интерфейсы.

4 Solutions collect form web for “Печать интерфейса-ipaddress с помощью одной команды (по каналам)”

наконец нашел решение на основе ifconfig!

 String s="ifconfig | awk -F '[ :]' '/encap|inet addr/{ if($1 != \"\" ){ print $1 \":\" $13 } else print $13 }'| awk -F \":\" '{print $1}'| awk '{ curr=$1 ; if(!system(\"echo \"$1\"|grep ^[0-9]>/dev/null\")) {print prev \"\\t : \" curr;prev=\"\"} else { if(prev!=\"\") {print prev \"\\t : not assigned\" }; prev=$1 } }'" 

объяснение:

 root$ ifconfig | awk -F '[ :]' '/encap|inet addr/{ if($1 != "" ){ print $1 ":" $13 } else print $13 }'| awk -F ":" '{print $1}' eth0 lo 127.0.0.1 vmnet1 192.168.139.1 vmnet8 192.168.152.1 wlan0 10.208.7.86 

поэтому, я передал вышеприведенный вывод в другую команду awk:

 | awk '{ curr=$1 ; if(!system("echo "$1"|grep ^[0-9]>/dev/null")) {print prev "\t : " curr;prev=""} else { if(prev!="") {print prev "\t : not assigned" }; prev=$1 } }' 

здесь, если я нахожу два последовательных имени интерфейса, тогда я печатаю имя предыдущего интерфейса с пользовательским сообщением « не назначено » .if Я получаю числовой шаблон в строке, тогда печатается текущая строка (ipaddress) вместе с предыдущим именем интерфейса!

Если вы используете GNU / Linux:

 for DEV in /sys/class/net/*; do printf "%-10s %s\n" ${DEV##*/} $(ip addr show ${DEV##*/} | \ sed -rne '/inet/s:\s+inet\s+([0-9.]+).*:\1:gp'); done 

или if ifconfig – это требование:

 for DEV in /sys/class/net/*; do printf "%-10s %s\n" ${DEV##*/} $(ifconfig ${DEV##*/} | \ sed -rne '/inet adr/s/\s+inet adr:([0-9.]+).*/\1/gp'); done 

это дает

 eth0 192.168.10.34 eth1 lo 127.0.0.1 ... 

Требуется iproute2 .

ifconfig -a | awk '/ Link / {n = $ 1} / addr / {print n, substr ($ 2, index ($ 2, ":") + 1))}'

Просто, возьмите имя, затем, когда появится адрес, напечатайте имя и адрес, который следует за двоеточием.

Другая возможность с помощью ifconfig и awk . Должен работать и для интерфейсов с интерфейсом aliased (eth0: 1) и vlan (eth0.1):

 ifconfig | awk 'BEGIN {RS="\n\n"; } { if ($7 != "addr:") {print $1,$7} }' 

Параметр RS в awk является разделителем записи, и мы устанавливаем его на две строки. Это заставляет awk объединять всю информацию об каждом интерфейсе в одну строку. Я также подавляю интерфейсы печати, у которых нет настроенного IPv4-адреса.

Я использую эту команду, чтобы показать для каждого интерфейса свой IP-адрес, а также его разрешенное имя хоста:

 ifconfig | awk 'BEGIN {RS="\n\n"; } { if ($7 != "addr:") {print $1,$7} }' | sed 's/addr://g' | while read iface ip; do echo $iface $ip $(getent hosts | awk '/^'$ip'/ {print $2}'); done 

Результат выглядит так:

 bond0 10.126.226.102 deh137.abc.biz. bond0:1 10.126.227.10 aeudi64.abc.biz. bond0:7 10.126.226.141 rtlci22.abc.biz. bond1.625 10.126.216.142 bond1.654 10.126.228.102 deh137s.abc.biz. 

EDIT: Обновлена ​​последняя команда для работы как с DNS, так и с разрешениями на / etc / hosts.

  • Настройка беспроводной сети на FreeBSD: маршрутизатор показывает, что беспроводное устройство подключено, но не может выполнить пинг
  • Как получить свой IP-адрес из командной строки?
  • где ifconfig на suse studio
  • Настройка сетевых интерфейсов с использованием linux sysfiles
  • Как получить имя сетевого интерфейса, который не работает
  • ifconfig показывает неверный IP-адрес
  • Невозможно перечислить сетевые интерфейсы в подсистеме Windows для Linux
  • команда ifconfig не найдена
  • Не удалось разрешить IP-адрес для eth1 в Vagrant VM
  • Что такое «сетевая» линия в / etc / network / interfaces?
  • сетевая маска по умолчанию в Solaris
  • Как я могу настроить систему, не отвечающую на эхо-запросы ICMPv6, отправленные на широковещательный адрес
  • Interesting Posts

    Запросить подтверждение для каждой команды

    Чистый сценарий apt-mirror не удаляет ничего

    Почему я не могу загрузиться с моего компакт-диска с обновлением Debian?

    find + grep для соответствия точных ключевых слов в файле

    Экран GNU запрещает сообщение «Width x chars too small» на выходе («Ca C- \»)

    Автозаполнение имен хостов при использовании SSH в файле истории

    Установите приложение по умолчанию на основе имени файла, а не mimetype

    Нумерованное музыкальное нотное письменное программное обеспечение

    как уловить приостановку резюме из сценария bash

    2 дистрибутива / 1 ПК: могу ли я приостановить один из них, а затем загрузиться во второй?

    MySQL Workbench Не удается запустить диспетчер туннелей SSH

    Regex длинный список чисел

    Что подразумевается под «поддержанием открытой трубы»?

    Использование цвета терминала не остается

    Могут ли процессы с интенсивным использованием процессора с наименьшим приоритетом (19) оказывать неблагоприятное воздействие?

    Linux и Unix - лучшая ОС в мире.