Cetak alamat mac ke file

8

Dengan skrip bash, dapatkah saya membaca alamat mac eth0 saya dan mencetaknya ke file?

michelemarcon
sumber

Jawaban:

15

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
Michael Mrozek
sumber
2
Anda juga dapat menggunakan th ipperintah: /sbin/ip link show eth0.
Keith
2
@Michael Di Linux, itu adalah alat yang disukai . Bahkan Anda harus menggunakan untuk mengkonfigurasi beberapa fitur canggih. Tetapi ifconfig tetap hidup ...
Keith
3
Pendekatan internasional adalah LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', karena output mungkin dilokalisasi, tidak cocok dengan 'HWaddr'. LC_ALL = C menggunakan standar internasional.
pengguna tidak diketahui
2
@ pengguna Ah, keren. Sejauh yang saya tahu itu akan selalu menjadi baris pertama, sehingga Anda bisa lolos awk '{print $NF; exit}'begitu saja
Michael Mrozek
1
Ya, jika Anda tipe AWK. Saya tipe sed, tapi di sini lebih suka | head -n 1kemudian.
pengguna tidak diketahui
8

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.

camh
sumber
1
@michelemarcon: Ini tidak menggunakan perl. Menggunakan GNU grep dan grep baru-baru ini memiliki opsi untuk menggunakan ekspresi reguler perl-style.
camh
Saya punya busybox grep, terima kasih atas klarifikasi. +1
michelemarcon
5
#! /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.

cjm
sumber
1
Saya tidak memiliki perl pada sistem saya ... :( Namun, +1
michelemarcon
0

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
annahri
sumber