Sebaiknya hindari penggunaan ifconfig
untuk mendapatkan alamat IP dalam skrip karena sudah tidak digunakan lagi di beberapa distribusi (mis. CentOS dan lainnya, jangan instal lagi secara default).
Di sistem lain, output ifconfig bervariasi sesuai dengan rilis distribusi (mis. output/spacing/fields dari ifconfig
berbeda dari Debian 8 ke Debian 9, misalnya).
Untuk mendapatkan alamat IP dengan ip
, dengan cara yang sama Anda bertanya:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Atau lebih baik lagi:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Atau, seperti yang Anda tanyakan "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Mengadaptasi ide dari @Roman tanpa malu-malu
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Keluaran normal:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Dari man ip
:
-o, -oneline
keluarkan setiap catatan pada satu baris, ganti umpan baris dengan karakter '\'. Ini nyaman ketika Anda ingin menghitung catatan dengan wc(1) atau untuk grep(1) hasilnya.
Lihat salah satu contoh mengapa ifconfig
tidak disarankan:BBB:`bbb-conf --check` menampilkan alamat IP sebagai `inet` - kesengsaraan ifconfig
Untuk memahami mengapa ifconfig
sedang dalam perjalanan keluar, lihat Perbedaan antara perintah 'ifconfig' dan 'ip'
ifconfig
adalah dari net-tools, yang belum dapat sepenuhnya mengikuti tumpukan jaringan Linux untuk waktu yang lama. Itu juga masih menggunakan ioctl untuk konfigurasi jaringan, yang merupakan cara yang jelek dan kurang kuat untuk berinteraksi dengan kernel.Sekitar tahun 2005 mekanisme baru untuk mengontrol tumpukan jaringan diperkenalkan - soket netlink.
Untuk mengonfigurasi antarmuka jaringan
iproute2
memanfaatkan mekanisme soket netlink full-duplex, sedangkanifconfig
bergantung pada panggilan sistem anioctl.
Awk
solusi:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
Keluaran sampel:
IP=10.0.2.15