По умолчанию ifconfig
покажет мне все доступные интерфейсы, но что если я хочу отобразить только активные
? Например, только en0
, как показано ниже.
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 14:10:9f:e0:eb:c9
inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4
inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
nd6 options=1<PERFORMNUD>
media: autoselect
**status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 32:00:14:e7:4f:80
media: autoselect <full-duplex>
**status: inactive**
Заметьте, ifconfig en0
не удовлетворит, en0
не всегда активен ;)
Я использую Mac OS X.
Если вы хотите выводить "запись" только в том случае, если она содержит status: active
, то вы можете использовать что-то вроде этой программы awk в качестве фильтра для вывода ifconfig:
#!/usr/bin/awk -f
BEGIN { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/ { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/ { buffer = buffer "\n" $0 }
END { if(print_it) print buffer }
Когда начинается каждая "запись" (строка пуста или не начинается с Tab), начните сохранять запись в буфер. Добавьте в этот буфер все последующие строки, начинающиеся с Tab. Следите за магической строкой status: active
; если такая строка была замечена, выведите буфер (предыдущую "запись"), когда начнется новая "запись" (или закончится ввод).
Сохраните приведенный выше текст программы в файл и используйте его следующим образом:
ifconfig -a | awk -f /path/to/file
Или, если вы chmod +x
файл, то вы можете немного упростить его:
ifconfig -a | /path/to/file
Читая ваши комментарии и вопрос, кажется, что вы хотите получить только те интерфейсы, которым назначен IP-адрес.
Это можно быстро сделать с помощью ifconfig
и grep
.
Выполняем команду:
ifconfig | grep 'Link\|inet'
Должно получиться что-то похожее:
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55 eth1 Link encap:Ethernet HWaddr 00:11:22:33:44:66 inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0
Это покажет каждую строку с именем интерфейса и IP, если он есть.
Некоторые более специфические REGEX могут дать вам именно то, что вам нужно.
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2
Как это работает: