ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"
Pour obtenir simplement votre adresse IP :
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
Cela vous donnera l'adresse IP de eth0.
Edit :En raison des changements de nom des interfaces dans les versions récentes d'Ubuntu, cela ne fonctionne plus. À la place, vous pouvez simplement utiliser ceci :
hostname --all-ip-addresses
ou hostname -I
, qui fait la même chose (vous donne TOUTES les adresses IP de l'hôte).
Si l'objectif est de trouver l'adresse IP connecté en direction d'Internet, cela devrait être une bonne solution.
Edit 2021 :Ajout des versions "sed" et "grep" et des nouvelles versions "awk" (certaines sont gnu)
Pour trouver quels adders IP sont utilisés connectés à Internet, nous pouvons utiliser le ip route
commande. Avec la nouvelle version de Linux, vous obtenez plus d'informations avec une sortie typique comme celle-ci :
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
donc pour obtenir IP vous devez trouver l'IP après src , en utilisant awk , sed ou 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
et si vous aimez l'interface nom en utilisant awk , sed ou 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
n'ouvre aucune connexion, il montre simplement l'itinéraire nécessaire pour se rendre à 8.8.8.8
. 8.8.8.8
est le DNS de Google.
Si vous souhaitez stocker ceci dans une variable, faites :
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]}')
Pourquoi une autre solution peut échouer :
ifconfig eth0
- Si l'interface que vous avez a un autre nom (eno1, wifi, venet0 etc)
- Si vous avez plusieurs interfaces
- Le sens de connexion IP n'est pas le premier dans une liste de plusieurs IF
Hostname -I
- Peut obtenir uniquement le 127.0.1.1
- Ne fonctionne pas sur tous les systèmes.
- Donnez à toutes les adresses IP, pas seulement à celles connectées à Internet. -I, --all-ip-addresses toutes les adresses de l'hôte
Si vous souhaitez obtenir une liste de vos adresses IP séparées par des espaces, vous pouvez utiliser le hostname
commande avec le --all-ip-addresses
(court -I
) drapeau
hostname -I
comme décrit ici :Mettre l'adresse IP dans la variable bash. Existe-t-il un meilleur moyen ?