Я надеюсь создавать сценарий удара, который я могу использовать с живой Ubuntu 16. Я работаю в заводе с несколькими, другой тип изготовителей плат и много наших клиентов запрашивают MAC-адреса их системы, прежде чем это пошлет. Это могло быть где угодно от 1 до 10 Сетевых интерфейсов, и сумма систем где угодно от 1 к сотням.
Как был бы iIcreate сценарий для выставления этой информации в порядке сетевых интерфейсов, таких как:
LAN1 MAC | LAN2 MAC | LAN3 MAC | и т.д. и т.д.
До сих пор я записал простой сценарий, который перечислит все MAC-адреса для всех интерфейсов, но как я могу поместить их в порядок, который я хочу и удостоверяюсь, что сценарий знает для запуска в LAN1, затем перемещаются в LAN2...?
#!/bin/bash
MAC1=$(ip a |awk '/ether/ {print $2}')
echo "$MAC"
#end
Спасибо за помощь!
Как упоминалось в xhienne, достаточно использовать ip link
с несколькими методами фильтрации. Лично я использую awk
.
$ ip -o link | awk '{print $2,$(NF-2)}'
lo: 00:00:00:00:00:00
eth3: f0:76:1c:8c:6d:f7
wlan7: d0:53:49:3d:53:fd
docker0: 02:42:bc:cd:0b:4d
При желании это можно сделать и на любом другом языке, например python
:
$ cat get_iface_mac.py
#!/usr/bin/env python
from __future__ import print_function
import netifaces as ni
for iface in ni.interfaces():
print(iface + " " + ni.ifaddresses(iface)[ni.AF_LINK][0]['addr'])
$ ./get_iface_mac.py
lo 00:00:00:00:00:00
eth3 f0:76:1c:8c:6d:f7
wlan7 d0:53:49:3d:53:fd
docker0 02:42:bc:cd:0b:4d
. Предполагая, что lan1..., lanN являются названиями сетевого интерфейса как eth0, это должно решить Вашу проблему:
ip link \
| sed -z 's,\n\s*link/\S*,:,g;' \
| cut -d : -f 2,4- \
| cut -d" " -f2,3 \
| sort
ip link
списки команд сетевые интерфейсы; (GNU) sed
в основном строки соединений; два cut
извлечение, что необходимо; и финал sort
делает Ваш алфавитный вид на именах интерфейса.