Я пытаюсь написать сценарий bash для получения порта Ethernet интерфейса, IP-адрес которого я знаю. Мне нужно получить это из ifconfig, но я не могу понять, как это сделать. Любые идеи?
Спасибо.
Я пытаюсь написать сценарий bash для получения порта Ethernet интерфейса, IP-адрес которого я знаю. Мне нужно получить это из ifconfig, но я не могу понять, как это сделать. Любые идеи?
Спасибо.
Немного грязно, но должно работать:
/sbin/ifconfig | grep -B1 1.2.3.4 | awk '{print $1; exit}'
При желании вы можете использовать команду ip, которая при использовании с параметром -o|-oneline
является разобрать намного проще. Например
ip -o addr | awk '/1.2.3.4/{print $2}'
Замените 127.0.0.1 на IP-адрес, для которого вы хотите получить информацию об интерфейсе.
ifconfig | grep 127.0.0.1 -B1 | grep Link | cut -f 1 '-d '
Если вы также хотите определить физический порт на машине, запустите
ethtool -p $OUTPUT_OF_FIRST_COMMAND
Он будет мигать на сетевой карте, связанной с этим интерфейсом.
Внезапно я мог бы использовать grep:
ifconfig |grep -B1 '127.0.0.1' |grep -o '^[a-zA-Z0-9]*'
Где «127.0.0.1» — это адрес, который вы ищете.
-B1 устанавливает количество строк, предшествующих совпадению, которое нужно вернуть.
-o устанавливает, что второй grep возвращает только соответствующий сегмент, а не всю строку.
'^[a-zA-Z0-9]*' соответствует любым буквенно-цифровым символам, начинающимся в начале строки.
Поскольку ifconfig делает отступ во всех строках, кроме строки имени интерфейса, он будет соответствовать только имени интерфейса.
Это быстро и грязно, но должно работать.