Imprimir endereço mac em arquivo

8

Com um script bash, posso ler o endereço mac do meu eth0 e imprimi-lo em um arquivo?

michelemarcon
fonte

Respostas:

15

ifconfig produzirá informações sobre suas interfaces, incluindo o endereço MAC:

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:289748093 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232688719 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3264330708 (3.0 GiB)  TX bytes:4137701627 (3.8 GiB)
          Interrupt:17 

O HWaddré o que você deseja, então você pode usá awk-lo para filtrá-lo:

$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55

Redirecione para um arquivo:

$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
Michael Mrozek
fonte
2
Você também pode usar th ipcomando: /sbin/ip link show eth0.
18711 Keith
2
@ Michael No Linux de qualquer maneira, é a ferramenta preferida . Na verdade, você deve usar para configurar alguns recursos avançados. Mas ifconfig vive ...
Keith
3
A abordagem internacional é que LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', porque a saída pode estar localizada, não corresponde a 'HWaddr'. LC_ALL = C usa o padrão internacional.
usuário desconhecido
2
@ usuário Ah, legal. Até onde eu sei, sempre será a primeira linha, para que você possa se safar awk '{print $NF; exit}'também
Michael Mrozek
1
Sim, se você é do tipo AWK. Eu sou do tipo sed, mas aqui preferiria um | head -n 1então.
usuário desconhecido
8

Aqui está um método Linux moderno:

ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'

É moderno em que ifconfigtem longa foi preterido em favor de ipdo iproute2pacote, e que greptem a -Popção de expressões regulares perl para o de largura zero olhar-behind afirmação positiva .

grep -oé bom para extração de texto. sedé tradicionalmente usado para isso, mas acho as asserções de largura zero no estilo perl mais claras do que um comando de substituição sed.

Na verdade, você não precisa da -oopção (on-line) ip, mas prefiro usá-la ao extrair informações da rede, pois acho mais limpo ter um registro por linha. Se você estiver fazendo correspondências ou extrações mais complicadas (geralmente com awk), -oé essencial para um script limpo, portanto, por uma questão de consistência e um padrão comum, eu sempre o uso.

camh
fonte
1
@michelemarcon: Isso não usa perl. Ele usa o GNU grep recente e o grep tem uma opção para usar expressões regulares no estilo perl.
Camh
Tenho busybox grep, no entanto, obrigado pelo esclarecimento. 1
michelemarcon
5
#! /bin/sh

/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file

Existem outras ferramentas que poderiam cortar o endereço MAC da ifconfigsaída de, é claro. Eu apenas gosto do Perl.

cjm
fonte
1
Eu não tenho perl no meu sistema ... :( No entanto, +1
michelemarcon
0

Usar ip -br link show eth0imprimirá algo como isto:

$ ip -br link show eth0 
eth0             UP             85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>

Você só precisa da 3ª coluna, portanto:

$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file
annahri
fonte