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 06/05/2020, à 10:40

bruno

[Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Bonjour,

Suite à cette discussion, je remarque une différence de comportement de apt avec glob sur Ubuntu 20.04.

Avant 20.04 :

# apt purge truc*

propose de supprimer tous les paquet dont le nom commence par toto. C'est conforme à ce qu décrit la page de man :

man apt a écrit :

       install, remove, purge (apt-get(8))
           La commande réalise l'action requise sur un ou plusieurs paquets spécifiés avec regex(7), glob(7) ou avec la
           correspondance exacte.

Sur 20.04 :

# apt purge toto*
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
E: Impossible de trouver le paquet toto*

Pour que cela fonctionne il faut passer par une regexp :

# apt purge '^toto*'

ou plus simplement :

# apt purge ^toto

Je n'arrive pas à trouver d'où vient cette différence de comportement, sachant que sur les deux machines testées les options du shell sont les mêmes

--
Résolu par Kamaris en #6

Dernière modification par bruno (Le 08/05/2020, à 13:00)

#2 Le 06/05/2020, à 10:50

pingouinux

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Bonjour,
Il y a peut-être un cas où, dans le répertoire d'où tu lances la commande, le nom de certains fichiers commence par toto.

Dernière modification par pingouinux (Le 06/05/2020, à 10:51)

Hors ligne

#3 Le 06/05/2020, à 11:41

bruno

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Non, ce n'est pas le cas et la commande a été testée avec différents noms de paquets (c'est sans risque, il suffit de répondre N à la question posée)

#4 Le 06/05/2020, à 14:01

pingouinux

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Est-ce que, dans les 2 cas, cette commande retourne la même chose ?

shopt nullglob

Hors ligne

#5 Le 06/05/2020, à 14:13

bruno

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Oui j'ai précisé dans le premier message que les options du shell étaient strictement les mêmes. C'est la première chose que j'ai vérifiée.
nullglob est sur off et surtout extglob sur on

#6 Le 08/05/2020, à 12:25

kamaris

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Je pense que l'explication se trouve dans le man de apt-get de focal :

https://manpages.ubuntu.com/manpages/focal/en/man8/apt-get.8.html a écrit :

Fallback to regular expressions is deprecated in APT 2.0, has been removed in apt(8), except for anchored expressions, and will be removed from apt-get(8) in a future version. Use apt-patterns(5) instead.

Mention qui n'apparait pas dans le man de apt-get de eoan (https://manpages.ubuntu.com/manpages/eo … get.8.html), car apt y est en version < 2.0 :
https://packages.ubuntu.com/eoan/apt : 1.9.4
https://packages.ubuntu.com/focal/apt : 2.0.2

Hors ligne

#7 Le 08/05/2020, à 12:44

marcus68

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Bonjour,

bruno  a écrit :

Avant 20.04 :

# apt purge truc*

propose de supprimer tous les paquet dont le nom commence par toto.

je me rappelle pas qu'un jour cette commande avait cet effet.

truc*

ça n'allais pas chercher les paquets commençant par truc, mais ceux qui contiennent tru avec aucun, un ou plusieurs c.

Sauf si un fichier s'appelle truc quelque chose dans le dossier ou la commande a été exécuté bien sûr.

Tu m'as mis le doute, mais après essai (apt 1.9.4) c'est bien ça :

sudo apt purge bcde*
Lecture des listes de paquets…
Construction de l'arbre des dépendances…
Lecture des informations d'état…
Le paquet « libcdebconf-dev » n'est pas installé, et ne peut donc être supprimé
Le paquet « libcdd-test » n'est pas installé, et ne peut donc être supprimé
...

Dernière modification par marcus68 (Le 08/05/2020, à 12:47)

Hors ligne

#8 Le 08/05/2020, à 12:59

bruno

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Merci kamaris !
Je n'avais pas vu la page de man de apt-get de focal. C'est effectivement l'explication de ce changement de comportement. Par contre la page de man de apt n'est pas à jour puisqu'elle continue de faire référence à regexp et à glob.
Je note donc l'utilisation directe de caractères jokers ou d'expressions régulières est appelée à disparaître et qu'il faudra désormais utiliser apt-patterns avec une syntaxe similaire à celle d'aptitude, ce qui est plutôt une bonne chose.

#9 Le 04/11/2020, à 14:23

krodelabestiole

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

bruno a écrit :

Merci kamaris !
Je n'avais pas vu la page de man de apt-get de focal. C'est effectivement l'explication de ce changement de comportement. Par contre la page de man de apt n'est pas à jour puisqu'elle continue de faire référence à regexp et à glob.
Je note donc l'utilisation directe de caractères jokers ou d'expressions régulières est appelée à disparaître et qu'il faudra désormais utiliser apt-patterns avec une syntaxe similaire à celle d'aptitude, ce qui est plutôt une bonne chose.

effectivement !
j'ai mis à jour la doc d'apt : https://doc.ubuntu-fr.org/apt-cli#patterns

mais pour la doc mysql ça m'étonne un peu que tu utilises la regex direct...
chez moi

apt list ^mysql-server ^mariadb-server

ne retourne rien par ex.

par contre pas de problème pour

apt list ~n^mysql-server ~n^mariadb-server

(~n = ~name)

sinon d'après cette réponse le wildcard * aurait été restauré avec apt 2.1.0 (et backporté sur 2.0.3)

mais étonnamment

apt list mysql-server\* mariadb-server\*

fonctionne toujours correctement sur mon apt 2.0.2 (focal)

Hors ligne

#10 Le 04/11/2020, à 15:48

bruno

Re : [Résolu] Comportement de apt avec * différent sous 20.4 et précédentes

Bah le comportement de apt n'est pas cohérent hmm

$ apt --version
apt 2.0.2ubuntu0.1 (amd64)

Avec apt list cela fonctionne mais pas avec apt remove ou purge.

$ sudo apt purge mysql-server\* mariadb-server\*
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
E: Impossible de trouver le paquet mysql-server*
E: Impossible de trouver le paquet mariadb-server*

La syntaxe que j'ai utilisé dans la doc MySQL fonctionne quelle que soit la version d'apt. Enfin jusqu'à présent, mais cela pourrait ne plus fonctionner dans le futur. J'ai donc modifié la doc mysql pour préciser les commandes suivant les versions d'Ubuntu utilisées.

Dernière modification par bruno (Le 04/11/2020, à 16:05)