85 votes

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

J'ai installé Carpadio sur mon installation Xubuntu (une Live USB), qui a ensuite tiré plus de 50 paquets de, je suppose, la partie Ubuntu du dépôt. Maintenant, je voudrais défaire cela. Cependant, malgré toutes mes recherches, je n'ai rien trouvé de plus utile que Comment inverser la commande sudo apt get install ce qui suggère simplement apt-get purge . Ce n'est pas utile puisque cela ne fait que 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 simple de les retirer tous. ? Sinon, je peux simplement réinstaller, c'était une nouvelle installation de toute façon, mais je suis curieux.

Un petit échantillon du journal historique (1/5-1/10 de la liste entière)

Ligne de commande : apt-get install cardapio-gnomepanel
Installer : 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), unity:amd64 (5.18.0-0ubuntu1, automatique), indicator-printers: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), metacity: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, automatique), ubuntu-docs:amd64 (12.04.6, automatique), Python-mako:amd64 (0.5.0-1, automatique),

À tous ceux qui ont suggéré autoremove : Je ne sais pas trop pourquoi, mais j'ai obtenu un seul autre paquet lié à Python (Python-keybinder ou quelque chose comme ça) comme "inutile" et c'est tout ce que autoremove a pu supprimer.

Entre l'installation et la désinstallation, le seul changement majeur a été d'installer xubuntu-restricted-extras .

96voto

RN. Points 559

En gros, vous devrez à la fois apt-get remove (ou apt-get purge) le paquet y exécuter apt-get autoremove après cela, pour qu'il rétablisse l'installation de package-one .

Examinons l'ensemble du processus :

  • sudo apt-get install package-one installe 50 dépendances avec la mention "automatique", comme le montre également l'extrait de journal de votre question

  • sudo apt-get purge package-one en supprime (purge) un seul, mais faire Exécutez ça !

    Toutes les actions d'installation suivantes (si vous en exécutez) produiront un message d'information avec les paquets qui ne sont plus nécessaires :

    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 en fait juste une liste de tous les paquets marqués comme "automatiques" sans dépendance inverse. En d'autres termes, il n'y a aucune raison pour qu'ils soient installés 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 et vous avertit de vos paquets inutiles !

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

Plus d'informations

21voto

Ramin Omrani Points 1114

Lorsque vous voulez supprimer un paquet et ses dépendances qui étaient installés à ce moment-là, vous devez utiliser :

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

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

Pour 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

l'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 ce qui précède aptitude actions exécuter les commandes suivantes dans le terminal :

apt-undo undo

7voto

Robie Basak Points 14936

Utilisez la puissance d'Unix. Prenez la ligne du fichier journal que vous avez, et construisez une commande qui annulera ce qu'apt a fait. 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

Vous pouvez donc utiliser cette purge de tous les paquets que vous avez installés accidentellement, en donnant 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 parce que 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)

3voto

T.K Points 33

Pour annuler la dernière installation d'apt, vous pouvez également utiliser ceci :

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ")

Cela permettra de récupérer la dernière installation d'apt dans l'historique et de proposer de purger les paquets correspondants. apt vous affichera une liste de tous les paquets en question qui doivent être confirmés, afin que vous gardiez le contrôle sur ce qui se passe.

Vous pouvez créer une fonction appelée "aptpurgelastinstall" en exécutant cette commande :

echo -e "\n# undo the last apt installation with aptpurgelastinstall" >> ~/.bashrc && echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ") ; }' >> ~/.bashrc && . ~/.bashrc

Maintenant, il vous suffit de taper aptpurgelastinstall dans un Shell pour annuler la dernière installation.


Si vous voulez spécifier combien d'installations précédentes doivent être purgées (en une seule étape), changez le 1 du code en 1 $.

Vous pouvez alors taper par exemple aptpurgelastinstall 3 dans le Shell et les trois dernières installations seront complètement purgées.

2voto

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

C'est fait.

En gros, nous devons formater la liste des paquets du journal apt en quelque chose qu'apt-get peut comprendre. Les parenthèses, les mots entre eux et les virgules doivent disparaître, et c'est là que le perl entre en jeu. Oui, il existe de meilleures méthodes (plus efficaces), mais je l'ai fait, c'est facile à comprendre et ça marche.

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