ifconfig
vypíše informace o vašich rozhraních, včetně MAC adresy:
$ 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
HWaddr
je to, co chcete, takže můžete použít awk
pro filtrování:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Přesměrujte to do souboru:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
Zde je moderní metoda Linuxu:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
V té ifconfig
je to moderní již dlouho není podporován ve prospěch ip
z iproute2
balíček a to grep
má -P
volba pro regulární výrazy perlu pro kladné tvrzení o nulové šířce.
grep -o
je dobré pro extrakci textu. sed
se k tomu tradičně používá, ale tvrzení o nulové šířce ve stylu perl považuji za jasnější než substituční příkaz sed.
Ve skutečnosti nepotřebujete -o
(jeden řádek) na ip
, ale raději jej používám při extrahování síťových informací, protože mi připadá čistší, protože má jeden záznam na řádek. Pokud provádíte složitější shody nebo extrakce (obvykle pomocí awk
), -o
je nezbytný pro čistý skript, takže v zájmu konzistence a společného vzoru jej vždy používám.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Existují další nástroje, které by mohly odstranit MAC adresu z ifconfig
výstup, samozřejmě. Mám prostě rád Perl.