Com um script bash, posso ler o endereço mac do meu eth0 e imprimi-lo em um arquivo?
Com um script bash, posso ler o endereço mac do meu eth0 e imprimi-lo em um arquivo?
Respostas:
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
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.
awk '{print $NF; exit}'
também
| head -n 1
então.
Aqui está um método Linux moderno:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
É moderno em que ifconfig
tem longa foi preterido em favor de ip
do iproute2
pacote, e que grep
tem a -P
opçã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 -o
opçã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.
#! /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 ifconfig
saída de, é claro. Eu apenas gosto do Perl.
Usar ip -br link show eth0
imprimirá 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
ip
comando:/sbin/ip link show eth0
.