Dengan skrip bash, dapatkah saya membaca alamat mac eth0 saya dan mencetaknya ke file?
Dengan skrip bash, dapatkah saya membaca alamat mac eth0 saya dan mencetaknya ke file?
Jawaban:
ifconfig akan menampilkan informasi tentang antarmuka Anda, termasuk alamat 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
Ini HWaddradalah apa yang Anda inginkan, sehingga Anda dapat menggunakannya awkuntuk memfilternya:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Arahkan itu ke file:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', karena output mungkin dilokalisasi, tidak cocok dengan 'HWaddr'. LC_ALL = C menggunakan standar internasional.
awk '{print $NF; exit}'begitu saja
| head -n 1kemudian.
Inilah metode Linux modern:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Ini modern di yang ifconfigtelah lama ditinggalkan dalam mendukung ipdari iproute2paket, dan bahwa grepmemiliki -Ppilihan untuk ekspresi reguler perl untuk nol-lebar positif tampilan-balik penegasan .
grep -obagus untuk ekstraksi teks. sedsecara tradisional digunakan untuk itu tetapi saya menemukan pernyataan lebar nol gaya perl lebih jelas dari perintah substitusi sed.
Anda sebenarnya tidak memerlukan opsi -o(oneline) ip, tetapi saya lebih suka menggunakannya ketika mengekstraksi informasi jaringan karena saya merasa lebih bersih memiliki satu catatan per baris. Jika Anda melakukan pencocokan atau ekstraksi yang lebih rumit (biasanya dengan awk), -osangat penting untuk skrip bersih, jadi demi konsistensi dan pola umum, saya selalu menggunakannya.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Ada alat lain yang bisa memotong alamat MAC dari ifconfigoutput, tentu saja. Saya suka Perl.
Menggunakan ip -br link show eth0akan mencetak sesuatu seperti ini:
$ ip -br link show eth0
eth0 UP 85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
Anda hanya perlu kolom ke-3, jadi:
$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file
ipperintah:/sbin/ip link show eth0.