Imprimer l'adresse mac dans un fichier

8

Avec un script bash, puis-je lire l'adresse mac de mon eth0 et l'imprimer dans un fichier?

michelemarcon
la source

Réponses:

15

ifconfig affichera des informations sur vos interfaces, y compris l'adresse 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 

C'est HWaddrce que vous voulez, vous pouvez donc l'utiliser awkpour le filtrer:

$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55

Redirigez cela dans un fichier:

$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
Michael Mrozek
la source
2
Vous pouvez également utiliser th ipcommande: /sbin/ip link show eth0.
Keith
2
@Michael Sous Linux de toute façon, c'est l' outil préféré . En fait, vous devez utiliser pour configurer certaines fonctionnalités avancées. Mais ifconfig vit toujours ...
Keith
3
L'approche internationale est LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', car la sortie peut être localisée, ne correspondant pas à «HWaddr». LC_ALL = C utilise la norme internationale.
utilisateur inconnu
2
@user Ah, cool. Pour autant que je sache, ce sera toujours la première ligne, vous pouvez donc vous en sortir awk '{print $NF; exit}'aussi
Michael Mrozek
1
Oui, si vous êtes du type AWK. Je suis du type sed, mais préférerais ici un | head -n 1alors.
utilisateur inconnu
8

Voici une méthode Linux moderne:

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

Il est moderne qui ifconfiga été dépréciés en faveur ipdu iproute2paquet, et qui grepa la -Ppossibilité pour les expressions régulières Perl pour le positif zéro largeur regarder en arrière affirmation .

grep -oest agréable pour l'extraction de texte. sedest traditionnellement utilisé pour cela, mais je trouve les assertions de largeur nulle de style perl plus claires qu'une commande de substitution sed.

Vous n'avez pas vraiment besoin de l' -ooption (en ligne) ip, mais je préfère l'utiliser lors de l'extraction des informations réseau car je trouve plus propre d'avoir un enregistrement par ligne. Si vous effectuez des correspondances ou des extractions plus compliquées (généralement avec awk), -oest essentiel pour un script propre, donc par souci de cohérence et d'un modèle commun, je l'utilise toujours.

camh
la source
1
@michelemarcon: Cela n'utilise pas perl. Il utilise GNU grep récent et grep a une option pour utiliser des expressions régulières de style perl.
camh
J'ai occupébox grep, merci cependant pour la clarification. +1
michelemarcon
5
#! /bin/sh

/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file

Il existe ifconfigbien sûr d' autres outils qui pourraient couper l'adresse MAC de la sortie de. J'aime juste Perl.

cjm
la source
1
Je n'ai pas de perl sur mon système ... :( Cependant, +1
michelemarcon
0

L'utilisation ip -br link show eth0imprimera quelque chose comme ceci:

$ ip -br link show eth0 
eth0             UP             85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>

Vous n'avez besoin que de la 3e colonne, donc:

$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file
annahri
la source