Je suis dans openSUSE, distribution basée sur le système de paquets rpm. J'ai installé un programme dont je ne veux plus.
La commande
sudo zypper remove -u nom-du-programme
va désinstaller le programme en question et toutes les dépendances venues avec lui et qui sont maintenant inutiles.
Très bien, mais si j'ai effectué de nombreuses installations et que je veux revenir en arrière?
La commande
rpm -qa --last | more
permet de lister les derniers programmes installés, mais elle n'est pas très pratique ne serait-ce que pour en extraire le nom des paquets.
Il est préférable d'utiliser la commande suivante:
rpm -qa --queryformat "%{INSTALLTIME} %{INSTALLTIME:date} %{NAME}\n" | sort -r | awk '{print NR,$0}' | more
Le premier INSTALLTIME est nécessaire pour le tri (commande sort). La date (et l'heure) aident à déterminer quels sont les paquets à désinstaller. La géniale commande awk permet d'afficher un numéro de ligne. On peut donc déterminer que les paquets à désinstaller se trouve entre un numéro NR minimum (par exemple 6) et un numéro maximum (par exemple 58);
Il reste à procéder:
rpm -qa --queryformat "%{INSTALLTIME} %{NAME}\n" | sort -r | awk 'NR==6,NR==58 {print $2}' | xargs sudo zypper remove
La première partie de la commande (avant | xargs) donne simplement la liste des paquets qui vont être désinstallés. En effet la ligne reçue par awk (désignée par $0) comprend deux champs ($1 et $2 séparés par un espace). xargs transmet cette liste de paquets à zypper, en tant qu'arguments.
Après le lancement de la commande, il est encore possible de refuser la changement:
il est important de vérifier le nombre de paquets qui vont être supprimés. Certains paquets sont peut-être devenus indispensables pour d'autres paquets installés ultérieurement: dans ce cas, ceux-ci seront aussi supprimés.
A part zypper, toutes les autres commandes sont indépendantes de la distribution, pourvu qu'elle utilise le système de paquets rpm.
Ainsi par exemple pour Fedora la commande serait:
rpm -qa --queryformat "%{INSTALLTIME} %{NAME}\n" | sort -r | awk 'NR==6,NR==58 {print $2}' | xargs -o sudo dnf remove
Cependant pour Fedora, il est de loin préférable de travailler autrement. Chaque ensemble d'installations correspond à une transaction.
dnf history list
permet de repérer le ou les numéros des transactions à défaire.
dnf history info numéro
affiche les détails d’une transaction.
dnf history undo numéro
désinstalle les paquets installés lors de la transaction.