J'ai une liste de paquets sur mon système, qui ont été installés et supprimés à nouveau, mais non purgés, c'est-à-dire qu'il y a encore beaucoup de conffiles, etc.
La sortie de dpkg --get-selections | grep deinstall
répertorie environ 85 paquets différents dont je n’ai pas besoin et que je veux purger entièrement.
Donc, ma courte question, que j'ai finalement décidé de poser après des expériences, a abouti à ce problème , c'est:
Comment puis-je complètement purger les paquetages déjà installés qui ont déjà été supprimés?
Réinstaller puis purger n'est pas une option, bien sûr.
Je viens de trouver la commande suivante qui a fonctionné:
Sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}')
dpkg --get-selections | grep deinstall
produit une liste de noms de packages avec le mot "deinstall
":
$ dpkg --get-selections | grep deinstall
account-plugin-windows-live deinstall
debarchiver deinstall
flashplugin-installer deinstall
...
En demandant à awk
de n'imprimer que le premier champ, nous obtenons:
$ dpkg --get-selections | awk '$2 == "deinstall" {print $1}'
account-plugin-windows-live
debarchiver
flashplugin-installer
...
Maintenant que nous avons la liste des paquets, xargs
nous permettra d’alimenter la liste des paquets en une commande (ou des commandes, si la liste est assez longue):
dpkg --get-selections | awk '$2 == "deinstall" {print $1}' | xargs Sudo apt-get purge --dry-run
Lorsque vous êtes satisfait des résultats simulés, supprimez --dry-run
de la commande apt-get
.
Lis:
for i in awk xargs apt-get ; do
man $i
done
Si vous souhaitez simplement purger toute la liste, vous pouvez utiliser cette commande; il effectuera un essai, au cas où des paquets essentiels seraient supprimés, ce que vous ne voulez probablement pas faire:
dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs Sudo apt-get --dry-run purge
Si aucun paquet essentiel ne va être supprimé, vous pouvez exécuter la commande réelle en toute sécurité:
dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs Sudo apt-get --yes purge
sed -n 's/\tdeinstall$//p'
: imprime uniquement les lignes de stdin
où une tabulation suivie d'une chaîne deinstall
pourrait être supprimée à la fin de la ligne; ceci a pour effet d'imprimer uniquement les lignes contenant une tabulation suivie d'une chaîne deinstall
_ à la fin de la ligne sans la tabulation réelle suivie de la chaîne deinstall
à la fin de la lignexargs Sudo apt-get --yes purge
: passe chaque ligne dans stdin
en tant qu'argument pour Sudo apt-get --yes purge
Mes cinquante cents, un simple oneliner:
Premier test avec
dpkg --get-selections | awk '$2=="deinstall" {system("Sudo apt-get --dry-run purge "$1)}'
et au revoir
dpkg --get-selections | awk '$2=="deinstall" {system("Sudo apt-get -y purge "$1)}'
Exemple
% dpkg --get-selections | grep deinstall
nginx-common deinstall
% dpkg --get-selections | awk '$2=="deinstall" {system("Sudo apt-get -y purge "$1)}'
% dpkg --get-selections | grep deinstall
[no output]
Je me suis posé la question moi-même il y a quelques jours. Est venu avec
apt-get purge $(dpkg -l | awk 'BEGIN{ORS=" "} /^rc/{ print $2}')
Les packages supprimés mais non purgés apparaissent dans le résultat de dpkg -l
avec rc
au début. awk
choisit la deuxième colonne, à savoir le nom du paquet, et les affiche séparés par des espaces.