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 awkper 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 1allora.
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 ipdal iproute2pacchetto, e che grepha la -Ppossibilità 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 -odell'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 ifconfigovviamente escludere l'indirizzo MAC dall'output dell'output. Mi piace solo Perl.
Utilizzando ip -br link show eth0verrà 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
ipcomando:/sbin/ip link show eth0.