Question Est-il possible d'annuler une commande d'installation apt-get?


J'ai installé Carpadio sur mon installation Xubuntu (un Live USB), qui a ensuite pris plus de 50 paquets, je suppose, du côté Ubuntu du dépôt. Maintenant, je voudrais annuler cela. Cependant, pour toute ma chasse, je ne trouve rien de plus utile que Comment puis-je inverser sudo apt get command command, qui suggère simplement apt-get purge. Ce n'est pas utile car tout ce qu'il fait est de supprimer 2 paquets (carpadio et carpadio-gnomepanel).

/var/log/apt/history.log a une liste de tous les paquets qui ont été installés avec cette commande. Je me demandais donc s'il y avait un moyen facile de les supprimer tous? Sinon, je peux simplement réinstaller, c'était une toute nouvelle installation, mais je suis curieux.

Un petit échantillon du journal de l'historique (1 / 5-1 / 10 de la liste complète)

Ligne de commande: apt-get install cardapio-gnomepanel
  Installation: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automatique), python-packagekit: amd64 (0.7.2-4ubuntu3, automatique), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, automatique) , geoclue: amd64 (0.12.0-1ubuntu12, automatique), unité: amd64 (5.18.0-0ubuntu1, automatique), indicateurs-imprimantes: amd64 (0.1.6-0ubuntu1, automatique), libevolution: amd64 (3.2.3- 0ubuntu6, automatique), libqt4-declarative: amd64 (4.8.1-0ubuntu4.3, automatique), libmtp9: amd64 (1.1.3-1ubuntu0.1, automatique), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 , automatique), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, automatique), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, automatique), gnome-media: amd64 (3.4.0- 0ubuntu3.1, automatique), métacité: amd64 (2.34.1-1ubuntu11, automatique), nautilus: amd64 (3.4.2-0ubuntu6, automatique), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, automatique), compiz- plugins-default: amd64 (0.9.7.12-0ubuntu1, automatique), libunistring0: amd64 (0.9.3-5, automatique), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, automatic), ubuntu-docs: amd64 (12.04.6, automatique), python-mako: amd64 (0.5.0-1, automatique),

A tous ceux qui ont suggéré autoremove: Je ne sais pas pourquoi, mais je n'ai eu qu'un autre paquetage lié à python (python-keybinder ou quelque chose comme ça) comme étant "inutile" et c'est tout ce que autoremove a pu supprimer.

Entre l'installation et la désinstallation, seule une modification majeure était en cours d'installation. xubuntu-restricted-extras.


62
2018-01-25 17:03


origine


Il est un peu tard pour être utile dans ce cas, mais la prochaine fois que vous voudrez installer quelque chose, envisagez de faire une simulation en premier. Courir sudo apt-get install -s package où -s dénote une simulation et package sera remplacé par le nom du logiciel approprié.
@ vasa1 Oui, je m'en vante. apt-get demande [Y / n] aussi, ça aurait dû être mon sort .. - Karthik T
Je n'ai eu qu'un autre paquet lié à Python (python-keybinder ou summat) comme étant "inutile" Avez-vous réellement enlevé le cardapio-gnomepanel paquet? - gertvdijk
@gertvdijk oui, apt-get remove carpadio pris celui-là aussi. - Karthik T
@KarthikT Puis je suis complètement perdu quant à pourquoi autoremove ne travaille pas pour vous Soit vous avez en quelque sorte marqué tous les paquets comme installés manuellement maintenant ou il y a un malentendu clair. C'est très simple: apt-get autoremove supprime simplement tous les paquets marqués installés automatiquement sans aucune raison de les avoir maintenant. Si cela ne fonctionne pas pour vous, je pense que vous avez changé quelque chose sur votre système dont vous ne parliez pas dans votre question. - gertvdijk


Réponses:


Fondamentalement, vous devrez à la fois apt-get remove (ou apt-get purge) le paquet et courir apt-get autoremove après cela, le faire rétablir l'installation de package-one.

Regardons tout le processus:

  • sudo apt-get install package-one  installe 50 dépendances marquées "automatique" comme on peut le voir dans l'extrait de journal de votre question

  • sudo apt-get purge package-one  supprime (purges) un seul, mais faire lance ça!

    Toutes les actions d'installation suivantes (si vous en exécutez) produiront un message d'information avec les packages inutiles:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Cette liste est simplement une liste de tous les paquets marqués comme "automatiques" sans dépendance inverse de ceux-ci. En d'autres termes, il n'y a aucune raison de les installer en ce qui concerne la gestion des paquets.

    Note: Aucune installation n'est nécessaire! C'est juste pour démontrer qu'APT est intelligent pour vous parler de vos paquets inutiles!

  • sudo apt-get autoremove --purge  supprime ces (purges)

Plus d'information


71
2018-01-25 17:13



Dans cette OP a tiré l'unité et tous ses amis. Je doute que la purge de cardapio enlève l'Unité etc. même après la suppression automatique.
@ vasa1 Pourquoi? Les paquets sont marqués comme "installés automatiquement" (comme on peut le voir dans la question) et si aucune raison ne peut être trouvée pour ceux à installer sur le système, ils seront suggérés pour la suppression en utilisant autoremove. - gertvdijk
Oui, je m'interrogeais sur le "automatique". Si cela sert à indiquer une ré-autorisation, c'est bien. OP ne devrait alors avoir aucun problème.
@gertvdijk bonne capture par @ vasa1, pls voir mon édition. autoremove n'a pas aidé. - Karthik T
@gertvdijk, pour "Actions d’installation ultérieures", un sudo apt-get update être suffisant?


Lorsque vous souhaitez supprimer un package et ses dépendances installées à ce moment-là, vous devez utiliser:

sudo apt-get purge package
sudo apt-get --purge autoremove

mais pour défaire apt actions, vous pouvez utiliser apt-undo scénario. C'est un script simple qui peut défaire le apt actions effectuées dans Ubuntu. Il est à noter que ce script ne peut fonctionner que si vous l’utilisez au lieu de apt-get pour installer / mettre à niveau / supprimer / purger / rétrograder vos paquets.

À installer apt-undo dans Ubuntu, exécutez les commandes suivantes dans le terminal:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

usage:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Pour annuler, le ci-dessus aptitude les actions s'exécutent à la suite des commandes du terminal:

apt-undo undo

18
2018-01-25 17:15



Merci, je suis tombé sur cela, et cela ressemblait exactement à ce que le médecin a commandé, jusqu'à ce que je voie la mise en garde que j'avais besoin de l'utiliser pour installer, pour pouvoir annuler .. - Karthik T
Belle prise. Syntaxe très confuse, cependant. Et je n'aime vraiment pas utiliser des alternatives à l'application APT de base bien testée. Toujours +1! - gertvdijk


Utilisez le pouvoir d'Unix. Prenez la ligne du fichier journal que vous avez et construisez une commande qui annulera ce que fit apt. Par exemple:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Ainsi, vous pouvez utiliser cette purge pour tous les paquets que vous avez installés accidentellement, à partir de la ligne appropriée de votre fichier journal:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(J'ai utilisé perl au lieu de sed car sed utilise un type d'expression régulière qui ne supporte pas les correspondances non gourmandes, ce qui était le moyen le plus simple de construire ce dont j'avais besoin)


7
2018-01-25 17:46



Joli script, mais il ne devrait vraiment s'agir que d'une séquence de commandes dont les gens peuvent se souvenir. - gertvdijk
Merci, script intimidant, mais j'avais peur que cela revienne à ça - Karthik T
J'ai utilisé un code très similaire pour résoudre mon problème très similaire. Je l'ai fait en plusieurs étapes juste pour être plus sûr de ce qui se passait. J'ai d'abord copié le bloc de texte pertinent de la apt Connectez-vous à un nouveau fichier, puis appliquez-le: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log  Ensuite, tout ce que j'ai fait était de préparer cette sortie avec sudo apt-get remove et j'étais bon pour y aller! - Insperatus


Après avoir supprimé le package, vous pouvez le supprimer en ajoutant --purge, for, apt-get remove --purge <package>, il devrait vous donner un message indiquant que les paquets de bibliothèque qu’il a extraits ont été installés automatiquement et ne sont plus nécessaires, à quel point vous pouvez les exécuter apt-get autoremove pour les enlever.


1
2018-01-25 17:12



Merci, mais autoremove s'est avéré être insuffisant dans ce cas. S'il vous plaît voir mon édition. - Karthik T


Suivre la sudo apt-get purge packagename avec

sudo apt-get autoremove. 

À moins que ce soit en méta-paquet, cela devrait en prendre soin.

Voir aussi la faq à Comment puis-je supprimer manuellement tout Fichiers Cardapio?.


1
2018-01-25 17:13



Merci, mais autoremove s'est avéré être insuffisant dans ce cas. S'il vous plaît voir mon édition. Merci pour le lien FAQ, très utile! - Karthik T
Certains de ces paquets peuvent être nécessaires à d'autres choses et ne pas être marqués comme pouvant être supprimés. Avez-vous regardé les instructions sur le lien? Comment sont ceux? - chaskes
Les instructions sur le lien sont plutôt orthogonales au problème principal et, en l’occurrence, je me tourne vers la réinstallation de mon système. Merci quand même. - Karthik T


  1. Collez la longue liste des paquets indésirables du journal apt dans un new_file.txt
  2. Exécuter perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Copie la sortie de la dernière commande dans le presse-papiers ou le canaliser là en premier lieu.
  4. Exécuter sudo apt-get remove [collez le contenu du presse-papiers ici]

Terminé.

Fondamentalement, nous devons formater la liste des paquets à partir du journal apt dans quelque chose que apt-get peut comprendre. La parenthèse, les mots entre les deux et les virgules doivent disparaître pour que le perl entre en jeu. Oui, il y a de meilleures façons (plus efficaces) - mais je l'ai fait, c'est facile à comprendre et ça marche.


1
2018-02-02 09:59



+1 pour l'expérience personnelle et l'explication, mais comme je l'ai mentionné plus tôt, j'ai déjà réinitialisé mon Live USB - Karthik T


Si vous venez d'ajouter un ppa et que vous voulez revenir, vous devez suivre les étapes décrites ci-dessous. Comprenez que cela peut échouer lorsque vous avez installé d'autres packages que vous ne souhaitez pas désinstaller. Je suis sûr que cela peut être fait avec un script. Personnellement, je pense que cela devrait faire partie d'apt, et il devrait y avoir une meilleure administration des paquets qui sont installés à cause des dépendances et qui sont installés à la demande de l'utilisateur.

1) supprimer le ppa de /etc/apt/sources.list Rappelez-vous l'heure à laquelle vous avez ajouté le ppa. Si vous avez de la chance, vous n'avez pas besoin d'être précis.

2) faire une liste de ce qu'il faut réinstaller, à partir du moment où vous avez installé le PPA: cat /var/log/dpkg.log | grep 'upgrade'

3) faire une liste des éléments à supprimer, à partir du moment où vous avez installé le PPA: cat /var/log/dpkg.log | grep 'installer'

4) supprimer tous les paquets de l’étape 3: sudo apt-get remove {liste des paquets de l'étape 3}

5) réinstaller tous les paquets de l’étape 2: sudo apt-get install --reinstall {liste des paquets de l'étape 2}

6) Si les choses ont mal tourné et que vous ne pouvez pas penser à une solution, remettez le PPA en place et réinstallez tous les packages des deux listes.


0
2017-08-20 16:24





Je sais que c'est une question assez ancienne mais je suis venu ici pour chercher de l'aide et peut-être que je peux aider quelqu'un. J'ai eu une situation similaire à celle de @ Karthik-T après l'installation unity8-desktop-session-mir. Je sais que c'est un gros. Il a tiré 233 paquets avec lui.

En utilisant autoremove Je ne suis enlevé que 34 d'entre eux. Le fait est que pendant unity8-desktop-session-mir installation, il a supprimé deux paquets (python3-aptdaemon.pkcompat et evolution-data-server-online-accounts). C'est indiqué dans /var/log/apt/history.log, après le Install section.

Pour annuler complètement l'installation d'Unity 8, j'ai publié les éléments suivants:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (il a supprimé 8 paquets liés à Unity 8)
  4. sudo apt-get --purge autoremove

Cela ne supprimera absolument pas tout ce que vous avez déjà installé, mais dans certains cas, cela suffit.

PS: peut-être le autoremove à l'étape deux n'est pas nécessaire, comme je l'ai à nouveau publié à l'étape quatre.


0
2017-08-03 10:47





Techniquement, les opérations "supprimer" ou "supprimer automatiquement" ne sont pas "défaites", bien que la plupart du temps, on puisse faire le travail assez bien.

Par défaut, apt-get laissera des paquets à moins que vous ne spécifiiez -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

Il est plus fiable de jeter un coup d’œil à l’apt history.log et désinstaller tous les packages installés. J'ai créé un petit script basé sur un nœud pour faciliter le processus:

https://github.com/rolfen/apt-history

En outre, voici une autre approche, plus manuelle, pour "revenir en arrière" sur les changements:

https://unix.stackexchange.com/a/236711


0
2018-05-12 10:22