Avec un script bash, puis-je lire l'adresse mac de mon eth0 et l'imprimer dans un fichier?
Avec un script bash, puis-je lire l'adresse mac de mon eth0 et l'imprimer dans un fichier?
Réponses:
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
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.
awk '{print $NF; exit}'aussi
| head -n 1alors.
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.
#! /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.
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
ipcommande:/sbin/ip link show eth0.