GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menangkap alamat IP pertama dari perintah ifconfig?

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, sedangkan ifconfig 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

Linux
  1. Bagaimana Menghentikan Perintah Temukan Setelah Pertandingan Pertama?

  2. Bagaimana Cara Membisukan Dari Baris Perintah?

  3. Bagaimana cara Mengirim Email dari Baris Perintah?

  1. Bagaimana cara menangkap output dari perintah teratas dalam file di linux?

  2. Bagaimana cara menjalankan perintah Vim dari shell?

  3. Bagaimana cara memunculkan antarmuka wi-fi dari baris perintah?

  1. Bagaimana Cara Memulai Ulang Icewm Dari Baris Perintah?

  2. Bagaimana Cara Mengatur Variabel Sama Dengan Output Dari Perintah Di Grub2?

  3. Bagaimana Wildcard * Diinterpretasikan Sebagai Perintah?