Wie unterscheiden sich die verschiedenen Befehle zum Entfernen von APT-Paketen?


17

Was ist der Unterschied zwischen diesen Befehlen?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

Antworten:


24

Schnelle Antwort

  • remove Deinstalliert die nach ihm benannten Pakete.
  • autoremoveDeinstalliert alle automatisch installierten Pakete, die nicht mehr benötigt werden. Es ist falsch, die Paketnamen danach autoremoveaufzulisten. Sie werden ignoriert (und alle in Frage kommenden Pakete werden entfernt), was wahrscheinlich nicht Ihre Absicht ist.
  • --purgebewirkt, dass systemweite Konfigurationsdateien, die mit zu entfernenden Paketen verknüpft sind, ebenfalls entfernt werden. Es muss von einem Befehl wie removeoder begleitet werden autoremove. Das --purgeFlag ändert die Aktion eines Befehls. es handelt nicht von selbst.
  • purgebedeutet dasselbe wie --purge remove(was dasselbe ist wie remove --purge). Es ist falsch, purgezweimal zu sagen ; Die zweite purgewird als der Name eines Pakets interpretiert, das purged sein soll. Dies ist wahrscheinlich nicht das, was Sie beabsichtigen.

Volle Antwort

Um zu verstehen, was diese Befehle tun und wie sie sich unterscheiden, ist es hilfreich (und wahrscheinlich sogar unerlässlich), zwei Konzepte zu verstehen:

  1. die Unterscheidung zwischen manuell installierten und automatisch installierten Paketen
  2. die Unterscheidung zwischen den Paketdateien eines Pakets und seinen Konfigurationsdateien

Manuell installiert oder automatisch installiert

Ein installiertes Paket wird entweder manuell oder automatisch installiert.

Wenn Sie ein Paket für die Installation angeben und es installiert ist, wird es manuell installiert.

Es können aber auch andere Pakete installiert werden. Die meisten Pakete haben Abhängigkeiten - andere Pakete, die installiert werden müssen, damit diese Pakete wie vorgesehen funktionieren. Wenn Sie ein Paket installieren, werden seine Abhängigkeiten (dh die anderen Pakete, von denen es abhängt) installiert, mit Ausnahme der zuvor installierten.

Wenn ein Paket nicht von Ihnen zur Installation angegeben wird, sondern als Abhängigkeit von einem Paket, das Sie zur Installation angegeben haben, installiert wird, wird es automatisch installiert.

Bitte beachten Sie, dass wenn Sie zwei Pakete installiert haben und eines davon eine Abhängigkeit von einem anderen ist, dies nicht bedeutet, dass die Abhängigkeit automatisch installiert wird. Es ist auch möglich, dass die Abhängigkeit manuell installiert wurde (dh von Ihnen festgelegt wurde, zum Beispiel vor oder gleichzeitig mit dem Paket, das davon abhängt).

Schließlich:

  • Wenn Sie versuchen, ein bereits installiertes Paket manuell zu installieren, bleibt es installiert. Wenn es jedoch automatisch installiert wurde, wird eine Änderung vorgenommen. Wenn Sie versuchen, es manuell zu installieren, wird es als manuell installiert markiert.
  • Sie können jedes Paket als manuell oder automatisch installiert markieren (mit dem apt-markBefehl), unabhängig davon, wie oder unter welchen Umständen sie tatsächlich installiert wurden.
  • Pakete, die mit Ihrem Ubuntu-System vorinstalliert werden, werden nicht alle automatisch installiert. Einige von ihnen werden als automatisch installiert markiert, andere als manuell installiert. Damit soll der Logik entsprochen werden, die der Unterscheidung zwischen manuell und automatisch installierten Paketen zugrunde liegt - die Idee, dass einige Pakete nur für den Dienst anderer benötigt werden.

In der Regel ist für jedes automatisch installierte Paket mindestens ein manuell installiertes Paket vorhanden, das davon abhängt (und das dazu geführt hat, dass es automatisch installiert wurde). Wenn Sie dann jedoch alle manuell installierten Pakete entfernen, die von einem automatisch installierten Paket abhängen, ist das automatisch installierte Paket nicht mehr erforderlich, wird jedoch weiterhin installiert.

apt-get autoremove Entfernt automatisch installierte Pakete, von denen keine manuell installierten Pakete mehr abhängig sind.

Paketdateien und Konfigurationsdateien

Ein Paket enthält Dateien, die auf jedem System, auf dem diese Version des Pakets installiert ist, identisch sein und bleiben sollen. Solche Dateien enthalten ausführbare Dateien, Ressourcen, Dokumentation und andere "Assets" für installierte Programme. Wir haben diese Dateien normalerweise einfach "die Dateien" genannt, die ein Paket bereitstellt.

Ein Paket bietet aber auch andere Dateien, die (möglicherweise) geändert werden sollen. Diese werden als globale (oder systemweite) Konfigurationsdateien bezeichnet. Sie werden fast immer im /etcVerzeichnis installiert und können automatisch und manuell geändert werden, um das Verhalten installierter Programme zu ändern. Hat beispielsweise sudoeine Konfigurationsdatei /etc/sudoersund ein Verzeichnis für weitere Konfigurationsdateien /etc/sudoers.d. Diese Datei und alle zu diesem Verzeichnis hinzugefügten Dateien geben an, wer sudoauf welche Weise verwendet werden darf .

In der Regel sollte das Deinstallieren und anschließende Installieren eines Pakets nichts an seinem Verhalten ändern (es sei denn, die Paketdateien waren beschädigt und Sie haben es daher natürlich neu installiert). Daher werden normalerweise beim Deinstallieren eines Pakets seine Paketdateien gelöscht, die systemweiten Konfigurationsdateien bleiben jedoch unberührt.

Wenn Sie ein Paket deinstallieren, ohne anzugeben, dass die systemweiten Konfigurationsdateien ebenfalls gelöscht werden sollen, wird das Paket als "Entfernen" bezeichnet.

Wenn Sie beim Deinstallieren des Pakets auch die systemweiten Konfigurationsdateien eines Pakets löschen möchten, wird dies als "Löschen" des Pakets bezeichnet.

apt-get removewird ein Paket entfernen; Das heißt, das Paket wird deinstalliert, die systemweiten Konfigurationsdateien bleiben jedoch erhalten.

apt-get purgelöscht ein Paket; Dies bedeutet, dass das Paket deinstalliert wird und die systemweiten Konfigurationsdateien gelöscht werden müssen.

Eine andere Möglichkeit zum Löschen von Paketen ist die Verwendung des --purgeFlags. Das sagt nicht, apt-getwas zu tun ist; Stattdessen ändert es, welche Begriffe (oder "Befehle") removees tun sollen. Das --purgeFlag führt dazu, dass alle Paket-Deinstallationen mit dem Löschen der systemweiten Konfigurationsdateien für die zu deinstallierenden Pakete einhergehen. Mit anderen Worten, die --purgeFlagge verwandelt Entfernungen in Säuberungen.

Warum haben wir die --purgeFlagge, wenn wir den purgeBefehl haben? Immerhin ist nicht sudo apt-get --purge remove packagenamegleichbedeutend mit sudo apt-get purge packagename. Sie sind gleichwertig. Wo --purgeist praktisch, wenn Sie das Verhalten von Befehlen ändern mögen andere als remove.

Angenommen, Sie möchten automatisch installierte Pakete deinstallieren, die nicht mehr benötigt werden (da keine manuell installierten Pakete mehr vorhanden sind). Sie möchten jedoch nicht nur diese automatisch installierten Pakete entfernen, sondern auch löschen ihre systemweiten Konfigurationsdateien. Dann könnten Sie laufen:

sudo apt-get --purge autoremove

Betrachten wir eine weitere Verwendung von --purge. Es gibt ein Flag --reinstall, das Installationen in Neuinstallationen verwandelt. Dies bedeutet, dass normalerweise beim Versuch, ein bereits installiertes Paket zu installieren, entweder nichts passiert oder (wenn das Paket als automatisch installiert markiert ist) das Paket als manuell installiert markiert wird. --reinstallWenn Sie jedoch ein bereits installiertes Paket mit dem Flag installieren, wird es entfernt und anschließend wieder installiert :

sudo apt-get --reinstall install packagename

Angenommen, Sie möchten die systemweiten Konfigurationsdateien des Pakets löschen, das Sie neu installieren. Das ist etwas üblich; Wenn ein Paket nicht funktioniert und Sie nicht wissen, warum, können Sie versuchen, es erneut zu installieren und auch die Konfigurationsdateien zu löschen, damit die Konfiguration auf die Standardeinstellungen zurückgesetzt wird. Um dies zu erreichen, können Sie Folgendes ausführen:

sudo apt-get --purge --reinstall install packagename

Das --reinstallverwandelt Installation in Neuinstallation (dh Entfernen, gefolgt von Installation), und --purgedas Entfernen verwandelt den Teil der Neuinstallation in Löschen.

Das Verhalten Ihrer Beispiele

Nun sollte genau klar sein, was jeder Ihrer Beispielbefehle apt-gettut:

  • sudo apt-get autoremove --purge packagenames

    Dadurch werden automatisch installierte Pakete gelöscht, für die keine manuell installierten Pakete mehr vorhanden sind. Das heißt, es deinstalliert diese Pakete (was das Löschen ihrer Paketdateien mit sich bringt) und es löscht auch ihre systemweiten Konfigurationsdateien.

    Hier packagenamestut sich nichts. Insbesondere wenn Sie nur Pakete entfernen möchten, deren Namen dort aufgeführt sind, verhält sich dies nicht so, wie Sie es beabsichtigen.

  • sudo apt-get remove --purge packagenames

    Dies läutert packagenames; Unter der Annahme, dass packagenameses sich um eine durch Leerzeichen getrennte Liste von Paketnamen handelt, werden alle gelöscht. Das heißt, sie werden deinstalliert (was das Löschen ihrer Paketdateien erfordert) und ihre systemweiten Konfigurationsdateien werden ebenfalls gelöscht.

    Wenn eines der in aufgelisteten Pakete packagenamesnicht installiert ist, hat das Vorhandensein in der Liste keine Auswirkung (außer dass Sie darüber informiert werden, dass es nicht installiert wurde). Wenn Sie Paketnamen auflisten, die nicht der Name eines tatsächlichen Pakets sind, schlägt der Befehl mit einem Fehler fehl .unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Wenn Sie eines der Vorkommen purgein diesem Befehl entfernen , entspricht es dem vorherigen. Derzeit wird versucht, ein aufgerufenes Paket purgeund auch die in aufgeführten Pakete zu löschen packagenames. Da purgees sich nicht um den Namen eines Pakets handelt, schlägt dies mit einer Fehlermeldung fehl.

  • sudo apt-get remove packagenames

    Dadurch werden die in aufgelisteten Pakete entfernt packagenames, wodurch ihre Paketdateien gelöscht werden. Dadurch werden die systemweiten Konfigurationsdateien nicht gelöscht (da es sich lediglich um ein Entfernen und nicht um ein Löschen handelt).

  • sudo apt-get autoremove

    Dadurch werden automatisch installierte Pakete deinstalliert, für die keine manuell installierten Pakete mehr vorhanden sind. Dies beinhaltet das Löschen der Paketdateien, nicht jedoch der systemweiten Konfigurationsdateien (dh das Entfernen, aber keine Löschung ).

Für weitere Informationen zur Verwendung apt-getempfehle ich die Handbuchseite . Weitere allgemeine Informationen finden Sie in diesem Handbuch .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.