ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"
Untuk mendapatkan alamat IP Anda:
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
Ini akan memberi Anda alamat IP eth0.
Sunting:Karena perubahan nama antarmuka di versi terbaru Ubuntu, ini tidak berfungsi lagi. Sebagai gantinya, Anda bisa menggunakan ini:
hostname --all-ip-addresses
atau hostname -I
, yang melakukan hal yang sama (memberi Anda SEMUA alamat IP host).
Jika tujuannya adalah untuk menemukan alamat IP terhubung ke internet, maka ini harus menjadi solusi yang baik.
Sunting 2021:Menambahkan versi "sed" dan "grep" dan versi "awk" baru (beberapa gnu)
Untuk mengetahui IP adder apa saja yang digunakan untuk terhubung ke internet, kita dapat menggunakan ip route
memerintah. Dengan versi Linux yang lebih baru, Anda mendapatkan lebih banyak informasi dengan keluaran tipikal seperti ini:
ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
cache
jadi untuk mendapatkan IP Anda perlu menemukan IP setelah src , menggunakan awk , sed atau grep
ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?src (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150
dan jika Anda menyukai antarmuka nama menggunakan awk , sed atau grep
ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?dev (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192
ip route
tidak membuka koneksi apa pun, itu hanya menunjukkan rute yang diperlukan untuk sampai ke 8.8.8.8
. 8.8.8.8
adalah DNS Google.
Jika Anda ingin menyimpan ini ke dalam variabel, lakukan:
my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')
Mengapa solusi lain mungkin gagal:
ifconfig eth0
- Jika antarmuka yang Anda miliki memiliki nama lain (eno1, wifi, venet0 dll)
- Jika Anda memiliki lebih dari satu antarmuka
- Arah sambungan IP bukan yang pertama dalam daftar lebih dari satu JIKA
Hostname -I
- Mungkin hanya mendapatkan 127.0.1.1
- Tidak berfungsi di semua sistem.
- Berikan semua IP tidak hanya yang terhubung ke internet. -I, --all-ip-addresses semua alamat untuk host
Jika Anda ingin mendapatkan daftar IP Anda yang dipisahkan oleh spasi, Anda dapat menggunakan hostname
perintah dengan --all-ip-addresses
(pendek -I
) bendera
hostname -I
seperti yang dijelaskan di sini:Menempatkan Alamat IP ke dalam variabel bash. Apakah ada cara yang lebih baik?