Con uno script bash, posso leggere l'indirizzo mac del mio eth0 e stamparlo su un file?
Con uno script bash, posso leggere l'indirizzo mac del mio eth0 e stamparlo su un file?
Risposte:
ifconfig
produrrà informazioni sulle tue interfacce, incluso l'indirizzo MAC:
$ 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
L' HWaddr
è quello che volete, in modo da poter utilizzare awk
per filtrare:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Reindirizzalo in un file:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}'
perché l'output potrebbe essere localizzato, non corrispondente a "HWaddr". LC_ALL = C utilizza lo standard internazionale.
awk '{print $NF; exit}'
anche
| head -n 1
allora.
Ecco un moderno metodo Linux:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
E 'moderno, che ifconfig
è da tempo deprecato a favore del ip
dal iproute2
pacchetto, e che grep
ha la -P
possibilità per le espressioni regolari Perl per la larghezza zero positivi look-dietro asserzione .
grep -o
è bello per l'estrazione del testo. sed
è tradizionalmente usato per questo, ma trovo le asserzioni di larghezza zero in stile perl più chiare di un comando di sostituzione sed.
In realtà non hai bisogno -o
dell'opzione (online) ip
, ma preferisco usarlo quando estraggo le informazioni di rete poiché trovo più pulito avere un record per riga. Se stai facendo corrispondenze o estrazioni più complicate (di solito con awk
), -o
è essenziale per uno script pulito, quindi per motivi di coerenza e uno schema comune, lo uso sempre.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Ci sono altri strumenti che potrebbero ifconfig
ovviamente escludere l'indirizzo MAC dall'output dell'output. Mi piace solo Perl.
Utilizzando ip -br link show eth0
verrà stampato qualcosa del genere:
$ ip -br link show eth0
eth0 UP 85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
Hai solo bisogno della terza colonna, quindi:
$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file
ip
comando:/sbin/ip link show eth0
.