Печать интерфейса-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.

  • ifconfig-изменения не сохраняются после перезагрузки
  • Стабильная команда для анализа eth0 IP на jessie и растяжке
  • linux + однопользовательский режим и сеть
  • Понимание сетевых псевдонимов в Linux
  • Fedora Core 4 не получит адрес IPV4
  • Does FreeBSD Изменяет MAC-адреса интерфейсов?
  • MAC id eth0 и wlan0 для серверов flexlm
  • команда ifconfig не найдена
  • Как просмотреть MAC-адрес вашего компьютера с помощью «ifconfig»?
  • Как получить свой IP-адрес из командной строки?
  • команда ifconfig, отображающая внутренний IP-адрес
  • Linux и Unix - лучшая ОС в мире.