LINUX.ORG.RU
решено ФорумAdmin

Как эффективно выяснить на шелле имена и IPv4-адреса всех поднятых интерфейсов?


0

0

Результат нужен в скрипточитаемом виде.

Мне пока что ничего, окроме

for i in `ifconfig -s | tail -n+2 | awk '{print $1;}'`; do echo -n "$i "; ifconfig "$i" | grep 'inet addr:' | perl -ne '/addr:([^\s]+)\s/; print $1."\n";'; done

в голову не приходит. Ну и не нравится, что perl, да, я не осилил sed.

★★★★★

Ответ на: комментарий от GotF

/proc/net/dev не канает (там вообще все, а не только поднятые), других не вижу.

shimon ★★★★★
() автор топика

попробуй, мож тебе будет проще парсить ip a

VladimirMalyk ★★★★★
()
Ответ на: комментарий от shimon

незачто :)

вот те ещё маленький update: печатает только UP интерфейсы с указанным адрессом:

ifconfig |awk '!/^ / { iff=$1 } /inet addr/ { addr=substr($2,6) } /UP/ { if (addr) print iff,addr }'
beastie ★★★★★
()

ip addr

Малоизвестная и не очень приятная особенность ifconfig - обрезать имя интерфейса до 9 символов. Лучше использовать ip.

Вариант, корректно показывающий длинные имена и интерфейсы в бонде(loopback не показываем):

alias ips='ip addr show | awk '\''$1 == "inet" && $6 == "global" {if ($7 == "secondary"){print $8" "$2} else {print $7" "$2}}'\'' | column -t'

Пример работы:

# ips                                                                 
base0             10.0.2.15/24
base0:1           192.168.0.1/27
base0:managment   10.23.98.15/24
vlan666           10.1.57.18/30
vlan666:service   192.168.100.1/24

zolden ★★★★★
()
Ответ на: ip addr от zolden

А мне нужен loopback, и вот для чего. Основное назначение — создать конфиг для upstart, который будет плевать события «подняли хотя бы один сетевой интерфейс» и «погасили последний интерфейс». Соответственно, все зависимые от этого сервисы должны запускаться и гаситься соответственно.

shimon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.