'Надлежащий' способ получить ТОЛЬКО мою eth0 сетевую маску через CLI в Ubuntu 18.04 на VPS?

Согласно этому ответу и многим другим учебным руководствам всюду по сети, ifconfig перечислит большую захватывающую и полезную информацию. И, который кажется стандартным способом узнать материал как моя сетевая маска.

Но для сценариев мне нужна только сама сетевая маска для eth0; и man ifconfig было бесполезно с этим вопросом.

Я использую VPS, таким образом, я не имею контроля над своей сетевой маской; я должен узнать то, на что это было установлено.

(Примечание: В то время как мне нужно eth0, некоторые машины могли бы иметь другого, сказать eth1 или ens3, который также был бы полезен.)

  • Мне не нужна вся строка, в которой находится сетевая маска:

inet 111.222.333.444 netmask 255.255.255.0 broadcast 111.222.555.666

  • Я хочу избежать "hackdoor" метода, как получение netmask 255.255.255.0 затем выполнение sed "s/netmask //" потому что материал может измениться — если эксперт не говорит так
2
задан 2 December 2018 в 17:32

1 ответ

Вероятно, это - то, в чем Вы нуждаетесь (обратите внимание, что это не будет работать над Ubuntu 16.04):

#!/bin/bash
IFACE='eth0'
ifconfig | grep -A 7 "$IFACE" | sed -nr 's/^.*netmask\s([0-9\.]+)\s\sbroadcast.*$/\1/p'

В первой строке название сетевого интерфейса назначено значением переменной $IFACE - это полезно для сценариев, иначе можно использовать grep -A 7 'eth0'.

На второй строке вывод команды ifconfig будет передан по каналу к grep команда, где опция -A 7 произведет следующие 7 строк после строки с совпавшей строкой/regexp. Вывод той команды будет передан по каналу к sed.

В sed команда:

  • регулярное выражение ^.*netmask\s(.*)\s\sbroadcast.*$ будет соответствовать к целой строке, с начала ^ в конец $, это содержит некоторые символы .* и "ключевые слова" netmask\space, [0-9\.]+ и \s\sbroadcast в том точном порядке;

  • той строкой заменят (s/old/new/) с содержанием первой группы получения [(.*)->\1], где regexp [0-9\.]+ будет соответствовать к строкам, которые состоятся из точек конца цифр;

  • опция -r (или -E) включит расширенные регулярные выражения, которые, в этом случае, позволят нам использовать круглые скобки свободно;

  • опция -n с комбинацией флага p с выводом только подобранная строка и сохранит остальных вывод sed.


Вот расширенный пример, который проанализирует названия всех сетевых интерфейсов и сделает подобный как вышеупомянутая команда для каждого из них:

for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do \
    echo -en "${IFACE}:\t"; ifconfig | \
    grep -A 7 "$IFACE" | \
    sed 's/  broadcast.*$//' | \
    sed -rn 's/^.*netmask (.*)$/\1/p'; \
done

Демонстрационный вывод вышеупомянутой команды, выполняемой на виртуальной машине с Ubuntu 18.04:

$ for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do echo -en "${IFACE}:\t"; ifconfig | grep -A 7 "$IFACE" | sed 's/..broadcast.*$//' | sed -rn 's/^.*netmask (.*)$/\1/p'; done
ens33:  255.255.255.0
lo:     255.0.0.0
2
ответ дан 2 December 2019 в 03:30

Другие вопросы по тегам:

Похожие вопросы: