obtém interface e mac na linha de comando

2

se eu executar o seguinte comando no Ubuntu 18.04, recebo esta saída:

ip link | awk '{print $2}'

lo:
00:00:00:00:00:00
wlp1s0:
2c:6e:85:bf:01:00
enp2s0:
14:18:77:a3:01:02

Eu quero que você mostre assim (sem "lo")

wlp1s0: 2c:6e:85:bf:01:00
enp2s0: 14:18:77:a3:01:02

Como faço para obtê-lo. Obrigado

    
por ajcg 25.05.2018 / 03:01

3 respostas

3

Se você está no Ubuntu, você pode obter o endereço MAC de /sys/class/net/<dev>/address :

$ cat /sys/class/net/enp0s3/address
08:00:27:15:dc:fd

Então, algo como:

find /sys/class/net -mindepth 1 -maxdepth 1 ! -name lo -printf "%P: " -execdir cat {}/address \;

Me dá:

enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33

Ou, usando o modo de uma linha de ip , que é conveniente para scripts:

$ ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}'
enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33
    
por 25.05.2018 / 07:54
1

Eu fiz um forro hacky feio:

 ip link | awk -F' ' '{print $2 $17}' | paste -d " "  - - | grep -v lo:

Se você contar os campos usando espaço como separadores, verá os campos de que precisa em 2º e 17º.

Mas eles serão impressos um sob o outro, o colar coloca as linhas adjacentes como colunas. A pasta conserta a colocação de linhas adjacentes lado a lado em uma linha. Eu não consegui encontrar uma maneira inteligente de evitar a linha de lo, então eu apenas excluí-lo antes de imprimir com o grep

Teste aqui:

ip link | awk -F' ' '{print $2 $17}' | paste -d " "  - - | grep -v lo:
enp2s0: 50:9a:4c:b5:af:ea
wlp3s0: e8:9e:b4:66:e3:ea
    
por 25.05.2018 / 03:59
1

Usando o ip link

ip -o link | grep ether | awk '{ print $2" : "$17 }'
  • em que -o fornece um resultado on-line para cada interface.
  • grep ether filtra apenas a interface que tem um endereço Ethernet atribuído a ela.
  • E awk simplesmente imprime o segundo & 17 coluna das linhas com dois pontos no meio.

OR

ip -br link | grep -v LOOPBACK | awk '{ print $1 " : " $3 }'

onde

  • -br fornece as informações de brief das interfaces.
  • grep -v LOOPBACK ignora a palavra LOOPBACK que está presente apenas na interface lo .
  • E awk imprime primeiro & 3a coluna.

Usando o ifconfig

ifconfig | grep HW | awk '{ print $1" : "$5 }'

onde grep HW filtra apenas as interfaces que têm um endereço de hardware atribuído a ele.

O Hack

grep HW ou grep ether na verdade ignora lo porque

Loopback interface that doesn't have a HW Address assigned to it.

    
por 25.05.2018 / 13:03