38 votes

Comment purger les paquets qui n'ont été retirés que précédemment ?

J'ai une liste de paquets sur mon système, qui ont été installés et supprimés à nouveau, mais pas purgés, c'est-à-dire qu'il y a encore beaucoup de conffiles etc. qui traînent.

La sortie de dpkg --get-selections | grep deinstall énumère environ 85 paquets différents dont je n'ai pas besoin et que je veux supprimer entièrement.

Ainsi, ma petite question, que j'ai décidé de poser finalement après avoir fait des essais, a abouti à ce qui suit ce problème c'est :

Comment puis-je complètement purger les paquets précédemment installés qui ont déjà été supprimés ?

Réinstaller puis purger n'est pas une option, bien sûr.

49voto

Byte Commander Points 99026

Je viens de trouver la commande suivante qui a fonctionné :

sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}')

24voto

waltinator Points 32821

dpkg --get-selections | grep deinstall produit une liste de noms de paquets avec le mot " deinstall " :

$ dpkg  --get-selections | grep deinstall
account-plugin-windows-live         deinstall
debarchiver                         deinstall
flashplugin-installer               deinstall
    ...

En demandant awk pour n'imprimer que le premier champ obtenu :

$ 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 de transmettre la liste des paquets à une commande (ou à des commandes, si la liste est suffisamment 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, remplacez --dry-run con -y en el apt-get mando.

Documentation pertinente :

man dpkg awk xargs apt-get

3voto

ieplugin Points 216

Si vous souhaitez simplement purger toute la liste, vous pouvez utiliser cette commande ; elle effectuera un essai à blanc, au cas où des paquets essentiels seraient supprimés, ce que vous ne souhaitez probablement pas :

dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --dry-run purge

Si aucun paquet essentiel ne doit être supprimé, il est prudent d'exécuter la commande actuelle :

dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --yes purge
  • sed -n 's/\tdeinstall$//p' : n'imprime que les lignes dans stdin où une tabulation suivie d'une deinstall pourrait être supprimée de la fin de la ligne ; cela 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 proprement dite, suivie de la chaîne de caractères deinstall chaîne de caractères à la fin de la ligne
  • xargs sudo apt-get --yes purge : passe chaque ligne dans stdin en tant qu'argument pour sudo apt-get --yes purge

3voto

A.B. Points 84870

Mes 50 cents, un simple oneliner :

Premier test avec

dpkg --get-selections | awk '$2=="deinstall" {system("sudo apt-get --dry-run purge "$1)}'

et bye bye

dpkg --get-selections | awk '$2=="deinstall" {system("sudo apt-get -y purge "$1)}'

Ejemplo

% 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]

1voto

Nephente Points 5045

J'ai moi-même posé cette question il y a quelques jours. J'ai trouvé

apt-get purge $(dpkg -l | awk 'BEGIN{ORS=" "} /^rc/{ print $2}')

Les paquets supprimés mais non purgés apparaissent dans la sortie de dpkg -l con rc au début. awk sélectionne la deuxième colonne, c'est-à-dire le nom du paquet, et les imprime en les séparant par des espaces.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X