Con un script bash, ¿puedo leer la dirección mac de mi eth0 e imprimirlo en un archivo?
Con un script bash, ¿puedo leer la dirección mac de mi eth0 e imprimirlo en un archivo?
Respuestas:
ifconfig
generará información sobre sus interfaces, incluida la dirección 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
Esto HWaddr
es lo que quieres, así que puedes usarlo awk
para filtrarlo:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Redirigir eso a un archivo:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}'
, porque la salida podría estar localizada, no coincidir con 'HWaddr'. LC_ALL = C usa el estándar internacional.
awk '{print $NF; exit}'
demasiado
| head -n 1
entonces.
Aquí hay un método moderno de Linux:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Es moderno en el que ifconfig
ha sido durante mucho tiempo en desuso a favor de la ip
del iproute2
paquete, y que grep
tiene la -P
opción de expresiones regulares de Perl para la anchura cero positivo de observación detrás de la afirmación .
grep -o
Es bueno para la extracción de texto. sed
se usa tradicionalmente para eso, pero las afirmaciones de ancho cero de estilo perl me parecen más claras que un comando de sustitución de sed.
En realidad, no necesita la -o
opción (en línea) ip
, pero prefiero usarla al extraer información de red, ya que me parece más limpio tener un registro por línea. Si está haciendo coincidencias o extracciones más complicadas (generalmente con awk
), -o
es esencial para un script limpio, por lo que, en aras de la coherencia y un patrón común, siempre lo uso.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Hay otras herramientas que podrían cortar la dirección MAC de ifconfig
la salida, por supuesto. Simplemente me gusta Perl.
El uso ip -br link show eth0
imprimirá algo como esto:
$ ip -br link show eth0
eth0 UP 85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
Solo necesita la tercera columna, así que:
$ 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
.