Secara default ifconfig
akan menunjukkan semua antarmuka yang tersedia, tetapi bagaimana jika saya hanya ingin menampilkannya active
? Seperti, en0
hanya di bawah.
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**
Pemberitahuan ifconfig en0
tidak akan memuaskan, en0
tidak selalu yang aktif;)
Saya menjalankan Mac OS X.
command-line
networking
osx
interface
qweruiop
sumber
sumber
ifconfig
implementasinya bervariasi. Juga, mengapa penggunaanifconfig
merupakan persyaratan? Apa tujuan akhir Anda?Jawaban:
Untuk mendapatkan deskripsi lengkap tentang semua layanan aktif, coba:
Regex sederhana ini hanya akan memfilter antarmuka aktif dan semua informasinya. Saya sarankan Anda meletakkan alias untuk ini di file ~ / .profile atau ~ / .bash_profile Anda (mungkin ifactive?)
Untuk mendapatkan nama antarmuka (berguna untuk skrip), gunakan:
Anda harus menginstal pcregrep agar ini berfungsi. Ada di macports dalam paket pcre. Atau, ini harus bekerja dengan GNU grep menggunakan
grep -Pzo
bukanpcregrep -M -o
tetapi dengan sisanya sama, tapi saya belum menguji ini.sumber
Jika Anda hanya ingin mencetak "entri" jika berisi
status: active
, maka Anda dapat menggunakan sesuatu seperti program awk ini sebagai filter ke keluaran ifconfig :Ketika setiap "entri" dimulai (baris kosong atau tidak dimulai dengan Tab), mulai menyimpan entri dalam buffer. Tambahkan ke buffer ini setiap baris berikutnya yang dimulai dengan Tab. Perhatikan string ajaib
status: active
; jika garis seperti itu terlihat, cetak buffer ("entri" sebelumnya) ketika "entri" baru dimulai (atau input berakhir).Simpan teks program di atas dalam file dan gunakan seperti ini:
Atau, jika Anda
chmod +x
file, maka Anda dapat menyederhanakannya sedikit:sumber
Jika Anda tidak menentang beberapa skrip bash, Anda dapat melakukan ini:
Itu akan menampilkan antarmuka jaringan yang aktif. Diuji pada Mac OS X 10.13.
Yang menyenangkan adalah Anda tidak perlu menginstal apa pun. Jalankan saja di atas dalam Terminal.
sumber
ifconfig -lu
tidak akan bekerja pada debian. Tetapi OP menggunakan MacOS, jadi solusi ini akan bekerja pada sistem dengan BSDifconfig
. Saya memposting jawaban lain di bawah ini yang melakukan hal yang sama tanpa menggunakanifconfig -lu
Membaca komentar dan pertanyaan Anda, sepertinya Anda benar-benar hanya ingin mendapatkan antarmuka yang memiliki alamat IP yang ditugaskan untuk mereka.
Anda dapat melakukan ini dengan cepat dengan
ifconfig
dangrep
.Menjalankan perintah:
Harus menghasilkan sesuatu yang mirip dengan:
Ini akan menunjukkan setiap baris dengan nama antarmuka dan dan IP jika ada.
Beberapa sihir REGEX yang lebih spesifik mungkin memberi Anda apa yang Anda butuhkan.
sumber
active
pertimbangannya?Saya berharap pertanyaannya sedikit lebih jelas. Dengan anggapan bahwa
Active interface only
, Anda bermaksud menunjukkan nama antarmuka aktif saja (Dalam kasusUP
danRUNNING
status sayaactive
) tanpa detail lainnya. Kemudian coba ini:Outputnya akan terlihat seperti:
Sesuaikan
grep -v
bidang dan tambahkan lebih banyak antarmuka yang tidak diinginkan sepertiloopback
->lo
dll, jika perlu.Sekarang, jika Anda mau dan Anda perlu memeriksa apakah antarmuka yang ditemukan aktif saat ini. Maka kita bisa dengan mudah mengirimkannya sebagai argumen untuk
ifconfig <interface>
seperti yang ditunjukkan di bawah ini:[[ $(ifconfig en0 | grep -w active) ]] && echo "en0 is active"
Menyederhanakan ini lebih lanjut dan mengimplementasikannya dalam suatu fungsi:
Menjalankan fungsi ini hanya akan mengembalikan antarmuka yang aktif. Dalam kasus saya:
sumber
Mengikuti akan mencetak hanya antarmuka yang dikonfigurasikan untuk memiliki IP
sumber
Dapatkan antarmuka MAC ACTIVE saja:
sumber
ip
secara default; Anda perlu HomeBrew untuk itu, lalu jalankanbrew install iproute2mac
sekali. Kode sumbernya adaBagaimana itu bekerja:
sumber
Ini akan menunjukkan status koneksi ethernet en0
sumber