Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/01/2022, à 15:24

hr

Récupérer l’id d’une interface ethernet [RÉSOLU]

Bonjour à vous
J’ai un petit problème que j’ai résolu mais je trouve ma solution un peu trop bidouilleuse…

Dans un script, j’ai besoin de récupérer l’id de l’interface ethernet, classiquement eth0 ou enp2s0 et parfois d’autres noms plus ésotérique du genre enx80438d0d1ab5.
Comme je veux utiliser le même script qui est distribué sur toutes mes machines, j’ai essayé de trouver une commande simple qui me donne cette info et que je puisse inclure dans le script.
Je mets l’id dans une variable que je peux utiliser ensuite. De cette façon je n’ai pas besoin d’avoir un script spécifique à chaque machine.

Comme commande, j’ai juste trouvé ifconfig mais comme sa sortie me donne un pavé d’info, je filtre la sortie en faisant :

ideth=$(ifconfig | grep "^e.*:" | cut -d":" -f1)

et, tant que j’y suis, pour les machines ayant aussi une interface wifi :

idwifi=$(ifconfig | grep "^w.*:" | cut -d":" -f1)

Ça marche très bien mais je trouve ça bien lourdingue.
Est-il possible de trouver cette info directement?

Dernière modification par hr (Le 07/01/2022, à 20:41)


Un PC de bureau de  2018, deux PC de bureau anciens (2006 et 2008) et un petit portable Asus E200HA (cpu cherry trail). Tout ce petit monde en Ubuntu 20.04 avec le bureau Unity.

Hors ligne

#2 Le 07/01/2022, à 15:27

xubu1957

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Bonjour,

Et avec :

ip a

?

Pour info :

Le 01/07/2019, bruno a écrit :

Hors-sujet.
Au passage les commandes ifconfig sont obsolètes. Il serait préférable d'aider les demandeurs avec les commandes ip:
#3 : remplacer par ip a (ou ip address show)
#4 : remplacer par ip link set enp4s0 up|down


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#3 Le 07/01/2022, à 16:00

MicP

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Bonjour

Pour assigner comme valeur à la variable nommée firstActivNetDevName
le nom de la première interface par laquelle la machine est connecté a un réseau,
qu'elle soit WiFi ou par cordon RJ45 :

firstActivNetDevName=$(ip link | awk -F': ' '/state UP/{print $2;exit}')
echo $firstActivNetDevName

Sinon, tu as aussi :

ethDevName=$(ip link | awk -F': ' '$2 ~ /^e/ {print $2}')
echo $ethDevName
wifiDevName=$(ip link | awk -F': ' '$2 ~ /^w/ {print $2}')
echo $wifiDevName

et aussi :

activEthDevName=$(ip link | awk -F': ' '$2 ~ /^e/ && /state UP/ {print $2}')
echo $activEthDevName
activWifiDevName=$(ip link | awk -F': ' '$2 ~ /^w/ && /state UP/ {print $2}')
echo $activWifiDevName

Dernière modification par MicP (Le 07/01/2022, à 16:41)

Hors ligne

#4 Le 07/01/2022, à 18:51

Watael

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

on peut "variabiliser" :

$ ip -br -o l | awk -v type="$type" 'BEGIN{t=substr(type,1,1)}/^/t && $2=="UP"{print $1}'

$type étant "ethernet" ou "wifi".


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 07/01/2022, à 19:17

MicP

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Bonjour, effectivement le retour de la commande ip avec ces options là est beaucoup plus court et clair,
mais j'utilise aussi des machines virtuelles QEMU/KVM avec un bridge activé,
ce qui donne :

michel@debbull:~$ # connecté à ma box par RJ45 :
michel@debbull:~$ ip -br -o l | awk -v type="ethernet" 'BEGIN{t=substr(type,1,1)}/^/t && $2=="UP"{print $1}'
enp0s25
virbr0
michel@debbull:~$ ip -br -o l | awk -v type="wifi" 'BEGIN{t=substr(type,1,1)}/^/t && $2=="UP"{print $1}'
enp0s25
virbr0
michel@debbull:~$ 
michel@debbull:~$ # connecté à ma box par WiFi :
michel@debbull:~$ ip -br -o l | awk -v type="wifi" 'BEGIN{t=substr(type,1,1)}/^/t && $2=="UP"{print $1}'
wlp3s0
virbr0
michel@debbull:~$ ip -br -o l | awk -v type="ethernet" 'BEGIN{t=substr(type,1,1)}/^/t && $2=="UP"{print $1}'
wlp3s0
virbr0
michel@debbull:~$ 

C'est peut-être parce que je suis sous debian avec gawk plutôt qu'awk

=======
Sous Ubuntu, c'est mawk qui est appelé au bout des liens,
mais le retour est le même que je mettes wifi ou ethernet dans la variable type de la ligne de commande awk

Dernière modification par MicP (Le 07/01/2022, à 19:29)

Hors ligne

#6 Le 07/01/2022, à 19:28

Watael

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

en effet, avec une machine virtuelle démarrée, on voit que ça ne fonctionne pas.
mais pourquoi ? ...

ip -br -o l | awk -v type="ethernet" 'BEGIN{t=substr(type,1,1)}$1~"^"t && $2=="UP"{print $1}'

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 07/01/2022, à 19:35

MicP

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Impec ! big_smile

Merci Watael, avec ta ligne de commandes ça fonctionne maintenant parfaitement
même avec ma machine virtuelle activée :

michel@debbull:~$ # connecté à ma box par WiFi :
michel@debbull:~$ ip -br -o l | awk -v type="wifi" 'BEGIN{t=substr(type,1,1)}$1~"^"t && $2=="UP"{print $1}'
wlp3s0
michel@debbull:~$ ip -br -o l | awk -v type="ethernet" 'BEGIN{t=substr(type,1,1)}$1~"^"t && $2=="UP"{print $1}'
michel@debbull:~$ 
michel@debbull:~$ # connecté à ma box par RJ45 :
michel@debbull:~$ ip -br -o l | awk -v type="ethernet" 'BEGIN{t=substr(type,1,1)}$1~"^"t && $2=="UP"{print $1}'
enp0s25
michel@debbull:~$ ip -br -o l | awk -v type="wifi" 'BEGIN{t=substr(type,1,1)}$1~"^"t && $2=="UP"{print $1}'
michel@debbull:~$ 

Dernière modification par MicP (Le 07/01/2022, à 19:44)

Hors ligne

#8 Le 07/01/2022, à 20:15

hr

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

xubu1957 a écrit :

Et avec :

ip a

?

Ah ben merci beaucoup pour cette avalanche de réponses pour une question que je pensais simple!

Alors oui, avec ip a on trouve aussi l’id mais, comme pour ipconfig, c’est noyé aussi dans un pavé d’info dont il faut que j’extraie l’indice, ce qui ne simplifie pas la commande. Par contre si ipconfig est destiné à disparaître de la circulation, il peut en effet être intéressant de mettre mon script à jour en utilisant ip.
Bon, c’est un point.

Dernière modification par hr (Le 07/01/2022, à 20:30)


Un PC de bureau de  2018, deux PC de bureau anciens (2006 et 2008) et un petit portable Asus E200HA (cpu cherry trail). Tout ce petit monde en Ubuntu 20.04 avec le bureau Unity.

Hors ligne

#9 Le 07/01/2022, à 20:39

hr

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

hr a écrit :
xubu1957 a écrit :

Et avec :

ip a

?

Ah ben merci beaucoup pour cette avalanche de réponses pour une question que je pensais simple!

Alors oui, avec ip a on trouve aussi l’id mais, comme pour ipconfig, c’est noyé aussi dans un pavé d’info dont il faut que j’extraie l’indice, ce qui ne simplifie pas la commande. Par contre si ipconfig est destiné à disparaître de la circulation, il peut en effet être intéressant de mettre mon script à jour en utilisant ip.
Bon, c’est un point.

MicP a écrit :
firstActivNetDevName=$(ip link | awk -F': ' '/state UP/{print $2;exit}')
echo $firstActivNetDevName

[…]

Merci aussi pour ces exemples de filtrage de la réponse d’ip link.
Je vois que mon idée de départ n’était pas aussi absurde que je le pensais : il faut dans tous les cas extraire ce qu’on cherche dans un flot d’informations, l’id n’est pas accessible directement. Soit.
Je vais me débrouiller avec ça. Merci !


Un PC de bureau de  2018, deux PC de bureau anciens (2006 et 2008) et un petit portable Asus E200HA (cpu cherry trail). Tout ce petit monde en Ubuntu 20.04 avec le bureau Unity.

Hors ligne

#10 Le 08/01/2022, à 00:59

MicP

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

On peut obtenir le même résultat plus simplement :

En utilisant les options de la commande ip proposées par Watael et en modifiant un peu le premier motif de recherche,
pour ne sélectionner que l'interface active dont le nom commence par la lettre e ou w

Ce qui donnerait :

activeNetDevName=$(ip -br -o l | awk '/^[ew]/ && $2=="UP"{print $1}')
echo  $activeNetDevName

Hors ligne

#11 Le 08/01/2022, à 03:06

hr

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Pas mal. Merci pour ça aussi !


Un PC de bureau de  2018, deux PC de bureau anciens (2006 et 2008) et un petit portable Asus E200HA (cpu cherry trail). Tout ce petit monde en Ubuntu 20.04 avec le bureau Unity.

Hors ligne

#12 Le 29/01/2022, à 12:36

lynn

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Bonjour,

Si j'éteins la connexion internet active en utilisant le menu en haut à droite
1643452032.png

le résultat de cette commande indique toujours que la connexion eno1 est active

lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
eno1             UP             f4:6d:04:96:aa:29 <BROADCAST,MULTICAST,UP,LOWER_UP> 
virbr0           DOWN           52:54:00:fc:91:a7 <NO-CARRIER,BROADCAST,MULTICAST,UP> 
vboxnet0         DOWN           0a:00:27:00:00:00 <BROADCAST,MULTICAST> 

C'est normal ?


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#13 Le 29/01/2022, à 12:44

Watael

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

cette commande

laquelle ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 29/01/2022, à 12:47

lynn

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Ah pardon, j'ai zappé la commande lol

ip -br -o l

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#15 Le 29/01/2022, à 12:48

lynn

Re : Récupérer l’id d’une interface ethernet [RÉSOLU]

Par contre, la commande suivante renvoie (ou non) l'état de la connexion

nmcli con show --active

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne