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 1então.
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.
#! /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.
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
ipcomando:/sbin/ip link show eth0.