При Добавлении дюйм/с с ifconfig eth:xx, как, я в одной строке нахожу самый высокий eth:xx

Пока Вы не работали iptables save команда, все, что Вам придется сделать, перезапустить или перезагрузить iptables сервис. Или, можно сделать то, что сказал Bonsi Scott, и удалите правила - с протестом. Первый показ:

#iptables -L -n -v --line-numbers

для получения числа правила затем все, что необходимо было бы сделать, удаляют правило числом с:

#iptables -D INPUT <rule number>
2
20.10.2013, 06:39
2 ответа

ifconfig

Если я понимаю то, что Вы просите, Вы хотели бы одну команду строки, которая возьмет вывод от ifconfig и возвратите следующее eth:xx устройство для использования.

Таким образом, если у нас есть eth0:0, eth0:1, и eth0:2 используемый, команда должна возвратиться 3?

Пример

Команда, такая как этот должна сделать то, что Вы хотите.

$ if (ifconfig | grep -q "^eth"); then \
      echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
      else echo 0;fi

Таким образом, если у нас есть одно устройство Ethernet:

$ ifconfig | grep eth
eth0:0      Link encap:Ethernet  HWaddr F0:DE:F1:2F:7D:4E  

Наша команда возвратила бы 1:

$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
1

Если у нас не будет устройств Ethernet, то мы возвратим 0:

$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
0

Подробнее

Хорошо казалось бы, что существует большое продолжение здесь, но это довольно просто.

  1. если оператор - первоначально мы должны знать, существуют ли какие-либо устройства Ethernet, таким образом, мы работаем ifconfig и grep вывод, ища один. Если мы находим тот затем, мы продолжаем работать ifconfig снова, и синтаксический анализ это.
  2. 2-й ifconfig - Здесь мы на самом деле анализируем вывод теперь. Мы используем grepсредство PCRE (-P) искать строки, которые запускаются с ethXX:. -o переключатель возвратит цифру, которая происходит после ethXX:.
  3. вид - Мы затем sort результаты численно, в случае, если у нас есть несколько ethXX:YY устройств.
  4. хвост - возвращает последний, это будет, самое высокое оценило ethXX:YY устройство.
  5. Мы затем увеличиваем это число через $(( $(ifconfig ...) + 1 )). Таким образом, если ethXX:YY будет 0, то мы доберемся 0 + 1 получающийся в a 1.
  6. эхо - мы затем echo результаты шага 5.
  7. Если нет никакого eth устройства, существующего в ifconfig вывод, затем возвратитесь 0, так как это будет первым.

IP addr

Если требуется использовать ip addr вместо этого можно использовать эту форму решения, предоставленного выше, чтобы сделать так.

$ if (ip addr | grep -q "eth"); then \
      echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
      else echo 0;fi

Пример

Используя Ваши демонстрационные данные:

inet xx.182.137.90/29 brd xxx.182.137.95 scope global eth0
inet xxx.182.137.91/24 brd xxx.182.137.255 scope global eth0:1
inet xxx.182.137.92/24 brd xxx.182.137.255 scope global secondary eth0:2
inet xxx.182.137.93/24 brd xxx.182.137.255 scope global secondary eth0:3
inet xxx.182.137.94/24 brd xxx.182.137.255 scope global secondary eth0:4

Эта команда возвратила бы 5:

$ if (ip addr | grep -q "eth"); then echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
5
0
27.01.2020, 23:02
  • 1
    я думаю, что он имеет в виду, имеет ли он eth0:0 и eth0:1, то, что он хочет добраться eth0:2. –  Patrick 18.10.2013, 15:17
  • 2
    @Patrick - хм. Позвольте нам просящий, чтобы он разъяснился, что я обеспечил, мог быть изменен довольно легко, чтобы сделать это также.Спасибо. –  slm♦ 18.10.2013, 15:32
  • 3
    @user2864066 - это приближалось к работе для Вас затем? –  slm♦ 19.10.2013, 03:13
  • 4
    На самом деле после некоторого тестирования, это не то, что я искал. Я разъяснюсь рассматриваемый выше. Спасибо до сих пор за Вашу справку. –  Arian 20.10.2013, 06:07
  • 5
    @user2864066 - это - изменение, о котором я спросил Вас вчера. –  slm♦ 20.10.2013, 06:18

Это не прямой ответ на Ваш вопрос, но больше альтернативного решения.

Альтернативное решение состоит в том, чтобы использовать iproute2 утилиты. ifconfig является древним и медленно удерживает от использования. Это является несоответствующим и не является способным к полностью управлению сетевым стеком Linux.

Например, поскольку Вы знаете с ifconfig, необходимо создать интерфейс псевдонима (eth0:0, eth0:1, и т.д.) для каждого IP Вы хотите присвоить той машине. Это - проблема, поскольку у Вас может только быть 255 интерфейсных псевдонимов. С ip команда от iproute2, можно присвоить столько дюйм/с, сколько Вы хотите к единственному интерфейсу.

Использование в качестве примера:

# ip addr show dev enp5s0
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:97:5a:4e:d5:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.20/24 brd 192.168.0.255 scope global enp5s0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba97:5aff:fe4e:d54e/64 scope link 
       valid_lft forever preferred_lft forever

# ip addr add 10.0.0.1/24 dev enp5s0

# ip addr show dev enp5s0
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:97:5a:4e:d5:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.20/24 brd 192.168.0.255 scope global enp5s0
       valid_lft forever preferred_lft forever
    inet 10.0.0.1/24 scope global enp5s0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba97:5aff:fe4e:d54e/64 scope link 
       valid_lft forever preferred_lft forever

Вы ничего не должны знать о текущей конфигурации интерфейса кроме, он - имя. Нет имея необходимость вычислить следующее неиспользованное интерфейсное число псевдонима.

0
27.01.2020, 23:02
  • 1
    Спасибо за Ваш ответ, я понимаю, куда Вы происходите из. Однако ifconfig работает с нашими туннелями gre, и я вынужден использовать его или ifcfg. IP addr не всегда выводит arp, объявляют... –  Arian 20.10.2013, 06:01

Теги

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