Quelle est la bonne façon de supprimer complètement une application?

546

J'ai cherché de telles informations sur le net et trouvé différentes lignes de commande, comme celles-ci:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Alors, quelle est la bonne façon? Est-il nécessaire d'utiliser ce "*"?

Après cela, j'ai aussi trouvé ces commandes:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
utilisateur48949
la source
1
Il est possible que vous répondiez à certaines de vos questions dans cet article: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate
8
application*peut parfois donner des résultats inattendus - par exemple, si vous avez un fichier nommé dans le répertoire courant application_information, le shell le développerait avant de le transmettre à apt-get. Si cela se produit et que vous voulez un astérisque littéral, vous pouvez utiliser application\*ou'application*'
Izkata
6
application*est encore plus dangereux lorsqu'il n'y a pas de fichiers dans le répertoire en cours: apt-getutilise des expressions régulières, pas de modèles globaux. Les gens ont presque effacé tout le système en essayant de le supprimer wine*.
Andrea Corbellini
3
Pouvez-vous accepter une réponse? Être reconnaissant aux personnes qui vous ont répondu.
m-ric
Ni est application*ni application\*sûr! Citant *avec \ou ' 'seulement augmente le risque ASSURANT *est passé en-est de apt-get(il est généralement de toute façon!), Fait apt-getd'interpréter l'argument comme une expression régulière. Dans une expression rationnelle *signifie "zéro ou plus du caractère précédent". Une forme courante de l'erreur consiste à désinstaller wine*, en supprimant tous les emballages à win(non wine, win) partout dans leurs noms et tous les paquets en fonction de l' un d'eux. Voir cette explication et les solutions possibles . @Izkata
Eliah Kagan

Réponses:

705
  • apt-get remove packagename

    supprimera les fichiers binaires, mais pas les fichiers de configuration ou de données du paquet packagename. Il laissera également les dépendances installées avec lui au moment de l'installation intact.

  • apt-get purge packagename ou apt-get remove --purge packagename

    supprimera à peu près tout ce qui concerne le paquet packagename, mais pas les dépendances installées lors de l'installation. Les deux commandes sont équivalentes.

    Particulièrement utile lorsque vous souhaitez «tout recommencer» avec une application, car vous avez gâché la configuration. Cependant, il ne supprime pas les fichiers de configuration ou de données résidant dans les répertoires de base des utilisateurs, généralement dans les dossiers cachés. Il n’existe pas non plus de solution simple pour les supprimer.

  • apt-get autoremove

    supprime les packages orphelins, c'est-à-dire les packages installés qui étaient installés auparavant comme dépendance, mais ne le sont plus. Utilisez-le après avoir supprimé un paquet contenant des dépendances qui ne vous intéressent plus.

  • aptitude remove packagenameou aptitude purge packagename(pareillement)

    tentera également de supprimer les autres packages requis par packagenameon mais non requis par les packages restants. Notez que aptitudeseules les informations de dépendance des packages installés par l'utilisateur sont mémorisées.

Et beaucoup d'autres existent. Niveau inférieur dpkg-commandes peuvent être utilisés (avancé), ou des outils de l' interface graphique tels que muon, Synaptic, Software Center, etc. Il n'y a pas unique « de manière correcte » de la suppression d' applications ou d' effectuer d' autres tâches qui interagissent avec votre gestion des paquets.

La liste que vous avez trouvée ne sont que des exemples. Assurez-vous de bien comprendre le sens et d'essayer ce qu'il veut faire avant d'accepter l'action (vous devez appuyer sur Yavant qu'il n'exécute réellement les actions proposées).

La version astérisque dans la question est probablement fausse ; apt-getaccepte une expression régulière et non un motif glob en tant que shell. Alors qu'est-ce qui se passe avec

sudo apt-get remove application*

est le suivant:

  1. Le shell essaie de se développer en application*regardant les fichiers du répertoire en cours. Si (comme c'est normalement le cas), il ne trouve rien, il retourne le modèle global sans modification (en supposant bashque le comportement par défaut est ici --- zshva provoquer une erreur).

  2. apt-getsupprimera les paquets dont le nom contient une chaîne qui satisfait l'expression régulière application*, qui est, applicatiosuivie par un nombre arbitraire de n: applicatio, application, applicationn, libapplicatio, etc.

  3. Pour voir à quel point cela peut être dangereux, essayez (sans root pour une double sécurité) apt-get -s remove "wine*"( -ssimulera la chose au lieu de la faire) --- elle dira qu'elle supprimera tous les paquets qui ont "gagnant" en leur nom et la personne à charge, presque tout le système ...

Probablement, la commande qui a été signifiée est vraiment

 sudo apt-get remove "^application.*"

(notez les guillemets et le point) qui supprimera tous les paquets dont le nom commence par application.

Ces commandes,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

sont complètement hors du champ de la gestion des paquets. Ne supprimez pas les fichiers appartenant à des packages sans utiliser le gestionnaire de packages! Cela va devenir confus et c'est la mauvaise façon de faire les choses.

Si vous ne savez pas à quel paquet appartient un fichier, essayez ceci:

dpkg -S /path/to/file
Gertvdijk
la source
9
L'option --purge est également utile lorsque vous essayez de supprimer complètement les dépendances restantes, y compris leurs fichiers de configuration: apt-get-autoremove --purge Il est également important de noter que les fichiers de configuration de votre répertoire de base ne sont pas affectés par l'option --purge. Vous devrez les supprimer manuellement.
Glutanimate
1
Il y avait une erreur ici: apt-get accepte RE, pas globs; alors apt-get remove pack * supprimera tous les paquets commençant par pac, suivis de zéro ou plus, k ... ce qui est normalement inattendu. J'ai édité l'anser. Voir aussi askubuntu.com/questions/210976/…
Rmano
Je pense que cette réponse n'est plus exacte. Soit apt remove -s texlive*ou ses apt-getlignes de retour de contrepartie tels que Note, selecting 'texlive-font-utils' for glob 'texlive*'(ce qui implique qu'ils acceptent en effet ne globs), suivi par les habituels Package 'texlive-common' is not installed, so not removed, et enfin des Remvlignes, comme Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.
@ JonathanY. Vous choisiriez également des packages non installés. Quoi qu'il en soit, pourriez-vous s'il vous plaît poser une nouvelle question et expliquer un peu plus en détail quelle est votre situation dans la question. Je serais heureux de le regarder :)
gertvdijk
Je ne pose pas une nouvelle question. Je pointe vers un changement possible depuis que cette réponse a été faite, ce qui rend certains détails incorrects. En fait, il semblerait que apt-get remove packa*cela prenne effectivement le glob packa*au lieu de le regarder comme une regex: cela correspond packagemais pas pack.
Jonathan Y.
110

Pour Ubuntu 12.04 et plus, la méthode correcte est la suivante:

sudo apt-get --purge autoremove packagename

Comme détaillé ici .

Ne pas utiliser packagename*car cela peut supprimer des paquets non souhaités et causer plus de problèmes qu'il n'en résout. Ou si vous devez, au moins crontab avec -s, --simulate, --dry-rundrapeau d' abord pour voir exactement ce qu'il fera sans le faire.

Kurtosis
la source
13
voici la réponse correcte, brève et concise:
Anwar
20

Vous pouvez utiliser cette commande:

sudo apt-get purge --auto-remove packagename

Il purgera les packages requis ainsi que les dépendances installées avec ces packages. L' --auto-removeoption (étant un alias de autoremove) fonctionne de manière similaire à sudo apt-get autoremove. En utilisant cette commande, nous pouvons exécuter une seule commande:

sudo apt-get purge --auto-remove packagename

Au lieu de:

sudo apt-get purge packagename
sudo apt-get autoremove
pl_rock
la source
2
Bien que vous ayez raison, vous pouvez aussi utiliser sudo apt-get --purge autoremove packagename. Même commande 1
Anwar
La commande complète peut-elle également être écrite au apt-get autoremove --purgelieu de apt-get purge --auto-remove?
Felwithe
3
Quelqu'un peut-il me tirer dessus s'il vous plaît?
Martin Andersson
7

Vous pouvez utiliser en toute sécurité sudo apt-get remove --purge applicationou sudo apt-get remove applications99% du temps. Lorsque vous utilisez l' purgeindicateur, tous les fichiers de configuration sont également supprimés. Ce qui peut être ou ne pas être ce que vous voulez, selon si vous souhaitez réinstaller ladite application. Le application*correspondra à toutes les applications qui commencent par application, qui sont généralement des plugins, des fonctionnalités supplémentaires, etc. de l'application principale que vous supprimez. c'est à dire

sudo apt-get remove gedit*

enlèverait gedit, gedit-pluginset gedit-common. En règle générale, cela n’est pas nécessaire, car la plupart des plugins / programmes associés dépendent de l’application principale et seront automatiquement supprimés (ou marqués pour suppression) lorsque vous désinstallez l’application principale.

Votre dernière commande consiste simplement à supprimer les restes d'applications dont on sait qu'ils ont des programmes de désinstallation en désordre, et simplement à supprimer les restes de l'application.

reverendj1
la source
5

J'ai reçu des messages d'erreur lors de la suppression d'un paquet, la seule façon qui a fonctionné est la suivante:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

J'ai trouvé que bien que n'utilisant que

dpkg --remove --force-remove-reinstreq package

ne supprime pas le paquet, il me montre le chemin correct du fichier à déplacer avec:

mv /var/lib/dpkg/info/package.* /tmp/

Paquet de remplacement avec votre nom d'application. Utilisez sudo dans Ubuntu, devenez root dans Debian.

DangerFireBob
la source
1

Cela dépend de l'application que vous souhaitez supprimer. Assurez-vous toujours de vérifier ses dépendances avant d'émettre la commande yes. Lorsque vous supprimez quelque chose en ligne de commande, il apparaît parfois une poignée de bibliothèques qui ne sont plus nécessaires. Ceux-ci peuvent être supprimés avec apt-get autoremove.

Attention, l'utilisation de commandes telles que sudo apt-get remove --purge applicationname peut supprimer certaines dépendances requises par d'autres applications et, en tant que telles, peut endommager votre système.

Si vous voulez le faire de manière plus sécurisée, vous pouvez toujours le supprimer en utilisant simplement le centre logiciel ou apt-get remove applicationname. Si les dépendances ne sont plus nécessaires, lancez apt-get autoremove ultérieurement.

gustavokrm
la source
Je pense que l'ensemble du système de paquets Debian a été spécialement conçu pour ne pas supprimer un paquet s'il existe d'autres paquets qui en dépendent. On vous demandera (utilement) si vous souhaitez également supprimer tous les packages dépendants, et c’est à cet endroit que vous devriez réellement lire la liste des packages sur le point d’être supprimés, ce qui, je pense, est ce que vous essayez de dire.
Xen2050
1

Je voulais juste clarifier une chose qui semble être une source de confusion ici. L' dpkgutilitaire ne connaît ni ne suit les dépendances des paquets les uns par rapport aux autres, ce qui était une raison importante qui a aptété développée, je crois. Vous en saurez plus à ce sujet à la section 8.6 de cette page. La FAQ Debian GNU / Linux - Les outils de gestion des paquets Debian

  • Avec apt: Si je voulais purger le paquet A, et qu'il a une dépendance appelée paquet B, et que le paquet B n'avait aucun autre paquet dépendant, alors les paquets A et B seront purgés. Si le package B possède d'autres packages dépendants, seul le package A sera purgé.

  • Avec dpkg: quelle dépendance? Tu viens de me dire de purger ce foutu
    paquet alors c'est ce que j'ai fait! Une mauvaise planification de votre part ne
    constitue pas une urgence de ma part.

Cela dit, voici deux lignes uniques qui peuvent être utilisées pour chaque méthode de purge:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Supprimez la --dry-runpour effectuer l'opération de purge réelle au lieu de signaler les actions qu'elle aurait entreprises.

Sysinfo.io
la source