Wie kann eine Anwendung richtig vollständig entfernt werden?

546

Ich habe im Internet nach solchen Informationen gesucht und verschiedene Befehlszeilen gefunden, wie die folgenden:

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*

Also, was ist der richtige Weg? Muss das "*" verwendet werden?

Danach habe ich auch diese Befehle gefunden:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
user48949
quelle
1
Einige Ihrer Fragen könnten in diesem Beitrag beantwortet werden: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate
8
application*Gelegentlich kann dies zu unerwarteten Ergebnissen führen. Wenn Sie beispielsweise eine Datei im aktuellen Verzeichnis namens haben application_information, wird sie von der Shell erweitert, bevor sie an apt-get übergeben wird. Wenn dies geschieht und Sie das wörtliche Sternchen möchten, können Sie application\*oder'application*'
Izkata
6
application*Noch gefährlicher ist es, wenn sich im aktuellen Verzeichnis keine Dateien befinden: Es apt-getwerden reguläre Ausdrücke und keine Glob-Muster verwendet. Die Leute haben fast das ganze System abgewischt und versucht, es zu entfernen wine*.
Andrea Corbellini
3
Kannst du eine Antwort annehmen? Um den Leuten dankbar zu sein, die dir geantwortet haben.
m-ric
Weder ist application*noch application\*sicher! Das Zitieren *mit \oder ' 'nur das Erhöhen des Risikos, das Sicherstellen, dass übergeben *wird, wie es ist apt-get(obwohl es normalerweise sowieso ist!), Bewirkt , dass apt-getdas Argument als regulärer Ausdruck interpretiert wird. In einem regulären Ausdruck *bedeutet "null oder mehr des vorhergehenden Zeichens". Eine häufige Form des Fehlers ist zu deinstallieren wine*, alle Pakete zu entfernen mit win(nicht wine, win) überall in ihren Namen und alle Pakete je nach jedem von ihnen. Siehe diese Erklärung und mögliche Korrekturen . @ Izkata
Eliah Kagan

Antworten:

705
  • apt-get remove packagename

    entfernt die Binärdateien, jedoch nicht die Konfigurations- oder Datendateien des Pakets packagename. Abhängigkeiten, die während der Installation installiert wurden, bleiben davon unberührt.

  • apt-get purge packagename oder apt-get remove --purge packagename

    entfernt alles, was das Paket betrifft packagename, aber nicht die damit installierten Abhängigkeiten bei der Installation. Beide Befehle sind gleichwertig.

    Besonders nützlich, wenn Sie mit einer Anwendung von vorne beginnen möchten, weil Sie die Konfiguration durcheinander gebracht haben. Es werden jedoch keine Konfigurations- oder Datendateien entfernt, die sich in den Basisverzeichnissen der Benutzer befinden, normalerweise in versteckten Ordnern. Es gibt keine einfache Möglichkeit, diese ebenfalls zu entfernen.

  • apt-get autoremove

    Entfernt verwaiste Pakete, dh installierte Pakete, die früher als Abhängigkeit installiert wurden, aber nicht mehr vorhanden sind. Verwenden Sie diese Option, nachdem Sie ein Paket entfernt haben, für das Abhängigkeiten installiert wurden, die Sie nicht mehr interessieren.

  • aptitude remove packagenameoder aptitude purge packagename(ebenfalls)

    wird auch versuchen, andere Pakete zu entfernen, die von packagenameon benötigt wurden, aber von keinen verbleibenden Paketen benötigt werden. Beachten Sie, dass aptitudenur Abhängigkeitsinformationen für Pakete gespeichert werden, die installiert wurden.

Und es gibt noch viele mehr. dpkgBefehle auf niedrigerer Ebene können verwendet werden (für Fortgeschrittene) oder GUI-Tools wie Muon, Synaptic, Software Center usw. Es gibt keinen einzigen "richtigen" Weg, um Anwendungen zu entfernen oder andere Aufgaben auszuführen, die mit Ihrer Paketverwaltung interagieren.

Die Liste, die Sie gefunden haben, ist nur ein Beispiel. Vergewissern Sie sich, dass Sie die Bedeutung verstanden haben, und probieren Sie aus, was es tun möchte, bevor Sie die Aktion akzeptieren (Sie müssen drücken, Ybevor es die vorgeschlagenen Aktionen tatsächlich ausführt).

Die Asterisk-Version in der Frage ist wahrscheinlich falsch ; apt-getAkzeptiert einen regulären Ausdruck und kein Glob-Muster als Shell. Also, was passiert mit

sudo apt-get remove application*

ist das Folgende:

  1. Die Shell versucht zu erweitern, application*indem sie sich die Dateien im aktuellen Verzeichnis ansieht. Wenn (wie normalerweise) nichts gefunden wird, wird das Glob-Muster unverändert zurückgegeben (vorausgesetzt, das bashStandardverhalten ist hier --- tritt zshein Fehler auf).

  2. apt-getwerden die Pakete entfernen , deren Namen enthält eine Zeichenfolge , die den regulären Ausdruck erfüllt application*, das heißt, applicatiodurch eine beliebige Anzahl von folgte n: applicatio, application, applicationn, libapplicatio, usw.

  3. Um zu sehen, wie gefährlich dies sein kann, versuchen Sie (ohne root für doppelte Sicherheit) apt-get -s remove "wine*"( -ssimuliert das Ding, anstatt es zu tun) --- es wird gesagt, dass alle Pakete entfernt werden, die "win" in ihrem Namen und dem abhängigen haben, fast das gesamte System ...

Wahrscheinlich ist der Befehl, der gemeint war, wirklich

 sudo apt-get remove "^application.*"

(Beachten Sie die Anführungszeichen und den Punkt), wodurch alle Pakete entfernt werden, deren Name mit "" beginnt application.

Diese Befehle,

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.

liegen völlig außerhalb des Geltungsbereichs der Paketverwaltung. Entfernen Sie keine Dateien, die zu Paketen gehören, ohne den Paketmanager zu verwenden! Es wird verwirrt und ist der falsche Weg, Dinge zu tun.

Wenn Sie nicht wissen, zu welchem ​​Paket eine Datei gehört, versuchen Sie Folgendes:

dpkg -S /path/to/file
gertvdijk
quelle
9
Die Option --purge ist auch praktisch, wenn Sie versuchen, verbleibende Abhängigkeiten einschließlich ihrer Konfigurationsdateien vollständig zu entfernen: apt-get-autoremove --purge Beachten Sie außerdem, dass Konfigurationsdateien in Ihrem Ausgangsverzeichnis von der Option --purge nicht betroffen sind. Diese müssen Sie manuell entfernen.
Glutanimate
1
Hier ist ein Fehler aufgetreten: apt-get akzeptiert RE, keine Globs; apt-get remove pack * entfernt also alle Pakete, die mit pac beginnen, gefolgt von null oder mehr k ..., was normalerweise unerwartet ist. Ich habe den Anser bearbeitet. Siehe auch askubuntu.com/questions/210976/…
Rmano
Ich denke, diese Antwort ist nicht mehr korrekt. Entweder apt remove -s texlive*oder seine apt-getGegenstück Rücklaufleitungen wie Note, selecting 'texlive-font-utils' for glob 'texlive*'(was bedeutet , dass sie in der Tat akzeptieren Klackse), gefolgt von den üblichen Package 'texlive-common' is not installed, so not removedund schließlich RemvLinien, wie Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.
@ JonathanY. Sie würden auch nicht installierte Pakete auswählen. Könnten Sie bitte eine NEUE Frage stellen und etwas detaillierter auf Ihre Situation eingehen? Ich würde mich freuen, es anzuschauen :)
gertvdijk
Ich stelle keine neue Frage. Ich weise auf eine mögliche Änderung hin, da diese Antwort gemacht wurde, die einige der Details falsch macht. Es scheint also, dass apt-get remove packa*der Globus tatsächlich gebraucht wird, packa*anstatt ihn als regulären Ausdruck zu betrachten: Er passt, packageaber nicht pack.
Jonathan Y.
110

Für Ubuntu 12.04 und höher lautet die richtige Methode:

sudo apt-get --purge autoremove packagename

Wie hier beschrieben .

Verwenden Sie es nicht, packagename*da dies unbeabsichtigte Pakete löschen und mehr Probleme verursachen kann, als es löst. Oder wenn Sie müssen zumindest mit einem Lauf -s, --simulate, --dry-runFlagge zuerst genau zu sehen , was es ohne es zu tun zu tun.

Kurtosis
quelle
13
Dies ist die richtige Antwort, kurz und prägnant:
Anwar
20

Sie können diesen Befehl verwenden:

sudo apt-get purge --auto-remove packagename

Erforderliche Pakete sowie Abhängigkeiten, die mit diesen Paketen installiert werden, werden gelöscht. Die --auto-removeOption (als Alias ​​von autoremove) funktioniert ähnlich wie sudo apt-get autoremove. Mit diesem Befehl können wir einen einzelnen Befehl ausführen:

sudo apt-get purge --auto-remove packagename

Anstatt von:

sudo apt-get purge packagename
sudo apt-get autoremove
pl_rock
quelle
2
Du hast zwar recht, aber man kann auch verwenden sudo apt-get --purge autoremove packagename. Gleiche 1 Befehl hier
Anwar
Kann der komplette Befehl auch als geschrieben apt-get autoremove --purgewerden apt-get purge --auto-remove?
Felwithe
3
Kann mich bitte jemand erschießen?
Martin Andersson
7

Sie können sicher sudo apt-get remove --purge applicationoder sudo apt-get remove applications99% der Zeit verwenden. Wenn Sie das purgeFlag verwenden, werden auch alle Konfigurationsdateien entfernt. Je nachdem, ob Sie die Anwendung neu installieren möchten oder nicht. Das application*stimmt mit allen Anwendungen überein, die mit beginnen application, in der Regel mit Plugins, zusätzlichen Funktionen usw. der Hauptanwendung, die Sie entfernen. dh

sudo apt-get remove gedit*

entfernen würde gedit, gedit-pluginsund gedit-common. In der Regel ist dies nicht erforderlich, da die meisten Plugins / zugehörigen Programme von der Hauptanwendung abhängig sind und beim Deinstallieren der Hauptanwendung automatisch entfernt (oder zum Entfernen markiert) werden.

Ihr letzter Befehl besteht lediglich darin, Reste von Anwendungen zu entfernen, von denen bekannt ist, dass sie unordentliche Deinstallationsprogramme enthalten. Außerdem werden lediglich alle Reste der Anwendung entfernt.

reverendj1
quelle
5

Ich habe einige Fehlermeldungen beim Entfernen eines Pakets erhalten. Die einzige Möglichkeit, wie ich herausfand, war die folgende:

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

Ich fand das, obwohl ich nur benutzte

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

Entfernt das Paket nicht, sondern zeigt mir den richtigen Pfad zu der Datei, mit der ich es verschieben möchte:

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

Ersetzen Sie das Paket durch Ihren Anwendungsnamen. Benutze sudo in Ubuntu, werde root in Debian.

DangerFireBob
quelle
1

Dies hängt von der Anwendung ab, die Sie entfernen möchten. Überprüfen Sie immer die Abhängigkeiten, bevor Sie den Befehl yes absetzen. Wenn Sie etwas über die Befehlszeile entfernen, werden manchmal eine Handvoll nicht mehr benötigter Bibliotheken angezeigt. Diese können mit apt-get autoremove entfernt werden.

Beachten Sie, dass durch die Verwendung von Befehlen wie sudo apt-get remove --purge applicationname einige Abhängigkeiten entfernt werden können, die von anderen Anwendungen benötigt werden, und dass dies Ihr System beschädigen kann.

Wenn Sie es sicherer machen möchten, können Sie es jederzeit über das Software-Center oder über apt-get remove applicationname entfernen. Wenn die Abhängigkeiten nicht mehr benötigt werden, setzen Sie später apt-get autoremove ab.

gustavokrm
quelle
Ich denke, das gesamte Debian-Paketsystem wurde speziell dafür entwickelt , ein Paket nicht zu entfernen, wenn andere Pakete davon abhängig sind. Möglicherweise werden Sie (hilfreich) gefragt, ob Sie auch alle abhängigen Pakete entfernen möchten. Hier sollten Sie die Liste der zu entfernenden Pakete lesen. Ich denke , das ist , was Sie sagen möchten .
Xen2050,
1

Ich wollte nur eine Sache klarstellen, die hier Verwirrung stiftet. Das dpkgDienstprogramm kennt die Abhängigkeiten von Paketen untereinander nicht oder verfolgt sie nicht. Dies aptwar meiner Meinung nach ein wichtiger Grund, der entwickelt wurde. Sie können darüber in Abschnitt 8.6 auf dieser Seite lesen. Die Debian GNU / Linux-FAQ - Die Debian-Paketverwaltungstools

  • Mit apt: Wenn ich Paket A löschen wollte und es eine Abhängigkeit namens Paket B hat und Paket B keine anderen abhängigen Pakete hatte, werden Paket A und B gelöscht. Wenn Paket B andere abhängige Pakete hatte, wird nur Paket A gelöscht.

  • Mit dpkg: Welche Abhängigkeit? Du hast mir gerade gesagt, ich soll das verdammte
    Paket löschen , also habe ich das getan! Eine schlechte Planung von Ihrer Seite ist für mich kein
    Notfall.

Vor diesem Hintergrund gibt es hier zwei Einzeiler, die für jede Reinigungsmethode verwendet werden können:

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}')

Entfernen Sie das Kontrollkästchen --dry-run, um den eigentlichen Löschvorgang auszuführen, anstatt zu melden, welche Aktionen er ausgeführt hätte.

Sysinfo.io
quelle