GNU/Linux >> Tutoriels Linux >  >> Linux

Comment capturer la première adresse IP à partir d'une commande ifconfig ?

Il vaut mieux éviter d'utiliser ifconfig pour obtenir une adresse IP dans un script car elle est obsolète dans certaines distributions (par exemple CentOS et autres, ne l'installez plus par défaut).

Dans d'autres systèmes, la sortie de ifconfig varie en fonction de la version de la distribution (par exemple, la sortie/l'espacement/les champs de ifconfig diffère de Debian 8 à Debian 9, par exemple).

Pour obtenir l'adresse IP avec ip , de la même manière que vous demandez :

ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '

Ou mieux encore :

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249

Ou, comme vous le demandez "IP="

#!/bin/bash
echo -n "IP="
ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '

Adaptant sans vergogne l'idée de @Roman

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } ' 
IP=192.168.1.249

Sortie normale :

 $ 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

À partir de man ip :

-o, -oneline
sortir chaque enregistrement sur une seule ligne, en remplaçant les sauts de ligne par le caractère '\'. C'est pratique lorsque vous voulez compter les enregistrements avec wc(1) ou grep(1) la sortie.

Voir un exemple de pourquoi ifconfig n'est pas conseillé :BBB :`bbb-conf --check` affichant les adresses IP comme `inet` - ifconfig woes

Pour comprendre pourquoi ifconfig est sur le point de disparaître, voir Différence entre les commandes 'ifconfig' et 'ip'

ifconfig vient de net-tools, qui n'a pas été en mesure de suivre complètement la pile réseau Linux depuis longtemps. Il utilise également toujours ioctl pour la configuration réseau, qui est une manière laide et moins puissante d'interagir avec le noyau.

Vers 2005, un nouveau mécanisme de contrôle de la pile réseau a été introduit - les sockets netlink.

Pour configurer l'interface réseau iproute2 utilise ce mécanisme de socket netlink en duplex intégral, tandis que ifconfig s'appuie sur l'appel système anioctl.


Awk solution :

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

Exemple de sortie :

IP=10.0.2.15

Linux
  1. Comment arrêter la commande de recherche après la première correspondance ?

  2. Comment redémarrer Icewm depuis la ligne de commande ?

  3. Comment définir une variable égale à la sortie d'une commande dans Grub2 ?

  4. Comment le caractère générique * est-il interprété comme une commande ?

  5. Comment couper le son depuis la ligne de commande ?

Comment installer un logiciel à partir de la ligne de commande Linux

Comment rechercher des fichiers à partir du terminal sous Linux

Comment trouver une adresse IP publique à partir de la ligne de commande sous Linux

Comment redémarrer Ubuntu à partir du terminal

Comment capturer la sortie d'une commande top dans un fichier sous Linux ?

Comment changer rapidement le premier mot d'une commande Bash ?