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.