Kann ich mit einem Bash-Skript die Mac-Adresse meines eth0 lesen und in eine Datei drucken?
Kann ich mit einem Bash-Skript die Mac-Adresse meines eth0 lesen und in eine Datei drucken?
Antworten:
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 HWaddr
ist, was Sie wollen, damit Sie awk
es 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
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.
awk '{print $NF; exit}'
auch
| head -n 1
dann bevorzugen .
Hier ist eine moderne Linux-Methode:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Es ist modern, dass ifconfig
hat mich lange als veraltet zu Gunsten ip
von dem iproute2
Paket, und das grep
hat die -P
Option für Perl reguläre Ausdrücke für die Null-Breite positiven Blick hinter Behauptung .
grep -o
ist schön für die Textextraktion. sed
wird 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, -o
ist dies für ein sauberes Skript unerlässlich. Aus Gründen der Konsistenz und eines gemeinsamen Musters verwende ich es immer.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Es gibt ifconfig
natürlich auch andere Tools, die die MAC-Adresse aus der Ausgabe herausschneiden könnten . Ich mag nur Perl.
Mit ip -br link show eth0
wird 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
ip
Befehl verwenden :/sbin/ip link show eth0
.