ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"
Per ottenere solo il tuo indirizzo IP:
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
Questo ti darà l'indirizzo IP di eth0.
Modifica:a causa dei cambi di nome delle interfacce nelle versioni recenti di Ubuntu, questo non funziona più. Invece, potresti semplicemente usare questo:
hostname --all-ip-addresses
o hostname -I
, che fa la stessa cosa (ti fornisce TUTTI gli indirizzi IP dell'host).
Se l'obiettivo è trovare l'indirizzo IP connesso in direzione di Internet, questa dovrebbe essere una buona soluzione.
Modifica 2021:Aggiunte versioni "sed" e "grep" e nuove versioni "awk" (alcune sono gnu)
Per trovare quale sommatore IP viene utilizzato connesso a Internet, possiamo usare ip route
comando. Con la versione più recente di Linux ottieni maggiori informazioni con un output tipico come questo:
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
quindi per ottenere IP devi trovare l'IP dopo src , utilizzando awk , sed o 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
e se ti piace l'interfaccia name utilizzando awk , sed o 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
non apre alcuna connessione, mostra solo il percorso necessario per arrivare a 8.8.8.8
. 8.8.8.8
è il DNS di Google.
Se ti piace memorizzarlo in una variabile, fai:
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]}')
Perché un'altra soluzione potrebbe non funzionare:
ifconfig eth0
- Se l'interfaccia che hai ha un altro nome (eno1, wifi, venet0 ecc.)
- Se hai più di un'interfaccia
- La direzione di connessione IP non è la prima in un elenco di più di un IF
Hostname -I
- Potrebbe ricevere solo 127.0.1.1
- Non funziona su tutti i sistemi.
- Dai a tutti gli IP non solo quelli connessi a internet. -I, --all-ip-addresses tutti gli indirizzi per l'host
Se vuoi ottenere un elenco separato da spazi dei tuoi IP, puoi usare hostname
comando con --all-ip-addresses
(breve -I
) flag
hostname -I
come descritto qui:Inserimento dell'indirizzo IP nella variabile bash. C'è un modo migliore?