Mac-Adresse in Datei drucken

8

Kann ich mit einem Bash-Skript die Mac-Adresse meines eth0 lesen und in eine Datei drucken?

michelemarcon
quelle

Antworten:

15

ifconfig gibt Informationen zu Ihren Schnittstellen aus, einschließlich der MAC-Adresse:

$ 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 

Das HWaddrist, was Sie wollen, damit Sie awkes filtern können:

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

Leiten Sie das in eine Datei um:

$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
Michael Mrozek
quelle
2
Sie können auch den folgenden ipBefehl verwenden : /sbin/ip link show eth0.
Keith
2
@ Michael Unter Linux ist es sowieso das bevorzugte Tool . In der Tat müssen Sie einige erweiterte Funktionen konfigurieren. Aber ifconfig lebt weiter ...
Keith
3
Der internationale Ansatz besteht darin LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', dass die Ausgabe möglicherweise lokalisiert ist und nicht mit 'HWaddr' übereinstimmt. LC_ALL = C verwendet den internationalen Standard.
Benutzer unbekannt
2
@user Ah, cool. Soweit ich weiß , es wird immer die erste Zeile, so dass Sie nur mit wegkommen könnten awk '{print $NF; exit}'auch
Michael Mrozek
1
Ja, wenn Sie der AWK-Typ sind. Ich bin der Sed-Typ, würde hier aber einen | head -n 1dann bevorzugen .
Benutzer unbekannt
8

Hier ist eine moderne Linux-Methode:

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

Es ist modern, dass ifconfighat mich lange als veraltet zu Gunsten ipvon dem iproute2Paket, und das grephat die -POption für Perl reguläre Ausdrücke für die Null-Breite positiven Blick hinter Behauptung .

grep -oist schön für die Textextraktion. sedwird traditionell dafür verwendet, aber ich finde die Behauptungen im Perl-Stil mit der Nullbreite klarer als einen sed-Substitutionsbefehl.

Sie brauchen die -o(Online-) Option eigentlich nicht ip, aber ich bevorzuge es, sie beim Extrahieren von Netzwerkinformationen zu verwenden, da ich finde, dass sie sauberer ist und einen Datensatz pro Zeile enthält. Wenn Sie kompliziertere Übereinstimmungen oder Extraktionen (normalerweise mit awk) durchführen, -oist dies für ein sauberes Skript unerlässlich. Aus Gründen der Konsistenz und eines gemeinsamen Musters verwende ich es immer.

camh
quelle
1
@michelemarcon: Dies verwendet kein Perl. Es verwendet das aktuelle GNU-Grep und grep bietet eine Option für die Verwendung von regulären Ausdrücken im Perl-Stil.
Camh
Ich habe Busybox Grep, danke aber für die Klarstellung. +1
Michelemarcon
5
#! /bin/sh

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

Es gibt ifconfignatürlich auch andere Tools, die die MAC-Adresse aus der Ausgabe herausschneiden könnten . Ich mag nur Perl.

cjm
quelle
1
Ich habe kein Perl auf meinem System ... :( Allerdings +1
michelemarcon
0

Mit ip -br link show eth0wird so etwas gedruckt:

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

Sie brauchen nur die 3. Spalte, also:

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