Secara default ifconfig
akan menampilkan semua interface yang tersedia, tetapi bagaimana jika saya hanya ingin menampilkan interface yang aktif
? Seperti, en0
hanya di bawah ini.
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 14:10:9f:e0:eb:c9
inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4
inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
nd6 options=1<PERFORMNUD>
media: autoselect
**status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 32:00:14:e7:4f:80
media: autoselect <full-duplex>
**status: inactive**
Perhatikan ifconfig en0
tidak akan memuaskan, en0
tidak selalu yang aktif ;)
Saya menjalankan Mac OS X.
Jika anda hanya ingin mencetak "entry" jika mengandung status: active
, maka anda bisa menggunakan sesuatu seperti program awk ini sebagai filter untuk output ifconfig:
#!/usr/bin/awk -f
BEGIN { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/ { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/ { buffer = buffer "\n" $0 }
END { if(print_it) print buffer }
Ketika setiap "entri" dimulai (baris kosong atau tidak dimulai dengan Tab), mulailah menyimpan entri dalam buffer. Tambahkan ke buffer ini setiap baris berikutnya yang dimulai dengan Tab. Perhatikan string ajaib status: active
; jika baris seperti itu terlihat, cetak buffer ("entri" sebelumnya) ketika "entri" baru dimulai (atau input berakhir).
Simpan teks program di atas dalam sebuah file dan gunakan seperti ini:
ifconfig -a | awk -f /path/to/file
Atau, jika Anda chmod +x
file tersebut, maka Anda dapat menyederhanakannya sedikit:
ifconfig -a | /path/to/file
Membaca komentar dan pertanyaan Anda, tampaknya Anda sebenarnya hanya ingin mendapatkan interface yang memiliki alamat IP yang ditetapkan padanya.
Anda dapat melakukan ini dengan cepat dengan ifconfig
dan grep
.
Menjalankan perintah:
ifconfig | grep 'Link\|inet'
Seharusnya menghasilkan sesuatu yang mirip dengan:
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55 eth1 Link encap:Ethernet HWaddr 00:11:22:33:44:66 inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0 lo Tautan encap:Loopback Lokal inet addr:127.0.0.0.1 Mask:255.0.0.0
Ini akan menampilkan setiap baris dengan nama antarmuka dan dan IP jika mereka memilikinya.
Beberapa keajaiban REGEX yang lebih spesifik mungkin akan memberikan apa yang anda butuhkan.
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2
Bagaimana cara kerjanya: