La mejor solución específica de Linux es usar sysfs:
$ IFACE=eth0
$ read MAC </sys/class/net/$IFACE/address
$ echo $IFACE $MAC
eth0 00:ab:cd:12:34:56
Este método es extremadamente limpio en comparación con los demás y no genera procesos adicionales desde read
es un comando integrado para shells POSIX, incluidos los shells que no son BASH. Sin embargo, si necesita portabilidad a OS X, tendrá que usar ifconfig
y sed
métodos, ya que OS X no tiene una interfaz de sistema de archivos virtual como sysfs.
Puedes hacer lo siguiente
ifconfig <Interface ex:eth0,eth1> | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
También puede obtener MAC para todas las interfaces de la siguiente manera
cat /sys/class/net/*/address
Para una interfaz particular como eth0
cat /sys/class/net/eth0/address