ifconfig
gibt Informationen über Ihre 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
Die HWaddr
ist, was Sie wollen, also können Sie awk
verwenden um es zu filtern:
$ 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
Hier ist eine moderne Linux-Methode:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Es ist modern in dieser ifconfig
wurde lange zugunsten von ip
verworfen aus dem iproute2
Paket, und das grep
hat den -P
Option für reguläre Perl-Ausdrücke für die positive Look-Behind-Assertion mit Nullbreite.
grep -o
ist gut für die Textextraktion. sed
wird traditionell dafür verwendet, aber ich finde die Zusicherungen mit Nullbreite im Perl-Stil klarer als ein sed-Ersetzungsbefehl.
Sie brauchen den -o
nicht wirklich (einzeilige) Option zu ip
, aber ich ziehe es vor, es beim Extrahieren von Netzwerkinformationen zu verwenden, da ich es sauberer finde, einen Datensatz pro Zeile zu haben. Wenn Sie kompliziertere Übereinstimmungen oder Extraktionen durchführen (normalerweise mit awk
), -o
ist für ein sauberes Skript unerlässlich, daher verwende ich es aus Gründen der Konsistenz und eines gemeinsamen Musters immer.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Es gibt andere Tools, die die MAC-Adresse aus ifconfig
herausschneiden könnten natürlich die Ausgabe von . Ich mag Perl einfach.