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 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
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 1dann bevorzugen .
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.
#! /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.
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
ipBefehl verwenden :/sbin/ip link show eth0.