61 votes

Le meilleur moyen d'extraire l'adresse mac de la commande ifconfig sortie?

Je veux savoir le meilleur moyen d'extraire l'Adresse MAC à partir d' ifconfig de la production.

bash-3.00# ifconfig eth0        
eth0      Link encap:Ethernet  HWaddr 1F:2E:19:10:3B:52    
          inet addr:127.0.0.66  Bcast:127.255.255.255  Mask:255.0.0.0    
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ....
          ....

Dois-je utiliser cut, awk ou quoi que ce soit d'autre, et quels sont les avantages et les inconvénients d'une méthode par rapport à l'autre.

109voto

Michalis Points 476

Vous pouvez faire un chat en vertu de l' /sys/class/

cat /sys/class/net/*/address

Spécifiquement pour eth0

cat /sys/class/net/eth0/address

70voto

Robert Gamble Points 41984

Je voudrais utiliser:

ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

Le -o sera la cause de grep pour imprimer uniquement la partie de la ligne qui correspond à l'expression. [[:xdigit:]]{1,2} correspondra à 1 ou 2 chiffres en hexadécimal de la (Solaris n'est pas sortie de zéros).

23voto

Jerub Points 17488

J'ai comme l'utilisation de /sbin/ip pour ce genre de tâches, car il est beaucoup plus facile à analyser:

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff

Vous pouvez trivialement obtenir l'adresse mac de cette sortie avec awk:

$ ip link show eth0 | awk '/ether/ {print $2}'
00:0c:29:30:21:48

Si vous voulez mettre un peu plus d'effort, et d'analyser plus de données, je vous recommandons d'utiliser l'-en ligne argument de la propriété intellectuelle de commande, ce qui vous permettra de traiter chaque ligne comme un nouvel appareil:

$ ip -o link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue \    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:52 brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100\    link/[65534] 
5: sit0: <NOARP> mtu 1480 qdisc noop \    link/sit 0.0.0.0 brd 0.0.0.0

11voto

albertb Points 1662

Pas sûr de savoir si vraiment il y a des avantages, mais vous pouvez tout simplement utiliser awk:

ifconfig eth0 | awk '/HWaddr/ {print $5}'

4voto

xebeche Points 128

Depuis l'OP de l'exemple se réfère à Bash, voici un moyen d'extraire des domaines tels que HWaddr sans l'utilisation d'outils supplémentaires:

x=$(ifconfig eth0) && x=${x#*HWaddr } && echo ${x%% *}

Dans la 1ère étape de cette assigne la sortie de ifconfig pour x. La 2ème étape supprime tout ce qui est avant "HWaddr ". Dans l'étape finale de tout ce qui suit "" (l'espace derrière le MAC) est supprimée.

Référence: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X