Imprimir la dirección mac en el archivo

Respuestas:

15

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 HWaddres lo que quieres, así que puedes usarlo awkpara 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
Michael Mrozek
fuente
2
También puede utilizar º ipcomando: /sbin/ip link show eth0.
Keith
2
@Michael En Linux de todos modos, es la herramienta preferida . De hecho, debe usar para configurar algunas funciones avanzadas. Pero ifconfig sigue vivo ...
Keith
3
El enfoque internacional es 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.
usuario desconocido el
2
@usuario Ah, genial. Por lo que yo sé que siempre será la primera línea, por lo que sólo podría salirse con awk '{print $NF; exit}'demasiado
Michael Mrozek
1
Sí, si eres del tipo AWK. Soy del tipo sed, pero aquí preferiría un | head -n 1entonces.
usuario desconocido el
8

Aquí hay un método moderno de Linux:

ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'

Es moderno en el que ifconfigha sido durante mucho tiempo en desuso a favor de la ipdel iproute2paquete, y que greptiene la -Popción de expresiones regulares de Perl para la anchura cero positivo de observación detrás de la afirmación .

grep -oEs bueno para la extracción de texto. sedse 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 -oopció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), -oes esencial para un script limpio, por lo que, en aras de la coherencia y un patrón común, siempre lo uso.

camh
fuente
1
@michelemarcon: Esto no usa perl. Utiliza grep reciente de GNU y grep tiene una opción para usar expresiones regulares de estilo perl.
camh
Tengo busybox grep, gracias por la aclaración. +1
michelemarcon
5
#! /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 ifconfigla salida, por supuesto. Simplemente me gusta Perl.

cjm
fuente
1
No tengo perl en mi sistema ... :( Sin embargo, +1
michelemarcon
0

El uso ip -br link show eth0imprimirá 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
annahri
fuente