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
Le HWaddr
est ce que vous voulez, vous pouvez donc utiliser awk
pour le filtrer :
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Redirigez-le dans un fichier :
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
Voici une méthode Linux moderne :
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
C'est moderne dans ce ifconfig
a longtemps été obsolète au profit de ip
du iproute2
package, et que grep
a le -P
option pour les expressions régulières perl pour l'assertion positive de largeur nulle.
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 réellement besoin du -o
(une ligne) à ip
, mais je préfère l'utiliser lors de l'extraction d'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 d'autres outils qui pourraient réduire l'adresse MAC de ifconfig
's de sortie, bien sûr. J'aime tout simplement Perl.