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
El HWaddr
es lo que quieres, así que puedes usar 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
Aquí hay un método moderno de Linux:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Es moderno en ese ifconfig
ha sido obsoleto durante mucho tiempo a favor de ip
del iproute2
paquete, y que grep
tiene el -P
opción para expresiones regulares de Perl para la aserción de búsqueda posterior positiva de ancho cero.
grep -o
es bueno para la extracción de texto. sed
se usa tradicionalmente para eso, pero creo que las aserciones de ancho cero estilo perl son más claras que un comando de sustitución sed.
En realidad no necesitas el -o
(una línea) opción a ip
, pero prefiero usarlo cuando extraigo información de la red ya que lo encuentro más limpio al tener un registro por línea. Si está haciendo coincidencias o extracciones más complicadas (generalmente con awk
), -o
es esencial para un guión 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 eliminar la dirección MAC de ifconfig
La salida, por supuesto. Simplemente me gusta Perl.