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 HWaddr
ce que vous voulez, vous pouvez donc l'utiliser awk
pour 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 1
alors.
Voici une méthode Linux moderne:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Il est moderne qui ifconfig
a été dépréciés en faveur ip
du iproute2
paquet, et qui grep
a la -P
possibilité pour les expressions régulières Perl pour le positif zéro largeur regarder en arrière affirmation .
grep -o
est agréable pour l'extraction de texte. sed
est 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' -o
option (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
), -o
est 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 ifconfig
bien 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 eth0
imprimera 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
ip
commande:/sbin/ip link show eth0
.