web-dev-qa-db-fra.com

Comment purger uniquement les paquets précédemment supprimés?

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.

17
Byte Commander

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

Sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}')
26
Byte Commander

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
15
waltinator

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 stdinoù une tabulation suivie d'une chaîne deinstallpourrait ê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 ligne
  • xargs Sudo apt-get --yes purge: passe chaque ligne dans stdinen tant qu'argument pour Sudo apt-get --yes purge
3
kos

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]
2
A.B.

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.

1
Nephente