Lebih baik hindari menggunakan ifconfig
untuk mendapatkan alamat IP dalam skrip karena sudah ditinggalkan di beberapa distribusi (misalnya CentOS dan yang lainnya, jangan menginstalnya secara default lagi).
Dalam sistem lain, output ifconfig bervariasi sesuai dengan rilis distribusi (misalnya output / spasi / bidang ifconfig
berbeda dari Debian 8 ke Debian 9, misalnya).
Untuk mendapatkan alamat IP 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, saat Anda bertanya "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
Output 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
output setiap record pada satu baris, mengganti feed baris dengan karakter '\'. Ini nyaman ketika Anda ingin menghitung catatan dengan wc (1) atau untuk grep (1) output.
Lihat satu contoh mengapa ifconfig
tidak disarankan: BBB: `bbb-conf --check` menampilkan alamat IP sebagai` inet` - ifconfig kesengsaraan
Untuk memahami mengapa ifconfig
ada di jalan keluar, lihat Perbedaan antara perintah 'ifconfig' dan 'ip'
ifconfig
berasal 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 jelek dan kurang kuat untuk berinteraksi dengan kernel.
Sekitar 2005, sebuah mekanisme baru untuk mengendalikan tumpukan jaringan diperkenalkan - soket netlink.
Untuk mengkonfigurasi antarmuka jaringan, iproute2
gunakan mekanisme soket netlink dupleks penuh itu, sambil ifconfig
mengandalkan panggilan sistem ioctl.