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 HWaddr
adalah apa yang Anda inginkan, sehingga Anda dapat menggunakannya awk
untuk 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 1
kemudian.
Inilah metode Linux modern:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Ini modern di yang ifconfig
telah lama ditinggalkan dalam mendukung ip
dari iproute2
paket, dan bahwa grep
memiliki -P
pilihan untuk ekspresi reguler perl untuk nol-lebar positif tampilan-balik penegasan .
grep -o
bagus untuk ekstraksi teks. sed
secara 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
), -o
sangat 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 ifconfig
output, tentu saja. Saya suka Perl.
Menggunakan ip -br link show eth0
akan 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
ip
perintah:/sbin/ip link show eth0
.