Weitaus anspruchsvoller als die Installation eines Pakets ist hingegen deren rückstandsfreie und saubere Entfernung. Dazu zählt nicht nur das Löschen der Dateien des eigentlichen Pakets, sondern auch das Aufräumen und Entsorgen der dazugehörigen Konfigurationsdateien aus Ihrem Linuxsystem.
Wir unterscheiden daher an dieser Stelle fünf Fälle. Fall 1 ist das einfache Deinstallieren eines Pakets, Fall 2 die Recherche, Fall 3 das Entfernen von noch verbliebenen Konfigurationsdateien bereits deinstallierter Pakete sowie als Fall 4 das vollständige Entsorgen von Pakets samt dazugehöriger Konfigurationsdateien in einem einzigen Schritt. In Fall 5 zeigen wir Ihnen, wie sie Pakete für eine bestimmte Architektur entsorgen.
Dazu dienen die drei Kommandos apt remove
Paketname, apt-get
remove
Paketname und aptitude remove
Paketname. Alle Aufrufe
entfernen das Paket und ggf. auch alle weiteren Pakete, die davon
abhängen. Dabei werden jedoch nur die Daten und die ausführbaren Dateien
gelöscht – die dazugehörigen Konfigurationsdateien bleiben unversehrt.
Das Vorgehen entspricht dem Aufruf dpkg -r
Paketname in der
richtigen Reihenfolge der Paketabhängigkeiten. Der nachfolgende Aufruf
zeigt das Vorgehen anhand des Pakets cssed für apt-get
.
Löschen eines Pakets cssed mittels apt-get
.
# apt-get remove cssed Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Das folgende Paket wurde automatisch installiert und wird nicht mehr benötigt: gcr Verwenden Sie »apt-get autoremove«, um es zu entfernen. Die folgenden Pakete werden ENTFERNT: cssed 0 aktualisiert, 0 neu installiert, 1 zu entfernen und 16 nicht aktualisiert. Nach dieser Operation werden 2.052 kB Plattenplatz freigegeben. Möchten Sie fortfahren [J/n]? J (Lese Datenbank ... 304082 Dateien und Verzeichnisse sind derzeit installiert.) Entfernen von cssed ... Trigger für man-db werden verarbeitet ... Trigger für menu werden verarbeitet ... Trigger für gnome-menus werden verarbeitet ... Trigger für desktop-file-utils werden verarbeitet ... #
Ein Knackpunkt stellt die Berücksichtigung der jeweiligen Paketabhängigkeiten dar. Dabei treten mehrere Möglichkeiten auf – bestimmte, zur Löschung vorgesehene Pakete werden von anderer Software noch benötigt, Ersetzungen sind erforderlich oder es entstehen Waisen (Orphans). Bei Möglichkeit eins dürfen die Pakete, die von anderer Software noch benötigt werden, nicht gelöscht werden – die andere installierte Software soll ja trotzdem weiterhin funktionieren. Bei systemrelevanten Werkzeugen in essentiellen Paketen erhalten Sie daher eine zusätzliche, deutliche Warnung (siehe nachfolgendes Beispiel sowie „Paketprioritäten und essentielle Pakete“ in Abschnitt 2.13, „Paket-Priorität und essentielle Pakete“).
Ausgabe einer deutlichen Warnung vor dem Löschen des essentiellen Pakets base-files.
# apt-get remove base-files Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut Statusinformationen werden eingelesen... Fertig Die folgenden Pakete werden ENTFERNT: base-files bash bash-completion bsd-mailx build-essential clisp common-lisp-controller debhelper dpkg-dev foomatic-db-engine foomatic-filters grsync grub grub-common grub-pc gt5 libnss-mdns rsync virtualbox-ose-guest-source virtualbox-ose-source xindy WARNUNG: Die folgenden essentiellen Pakete werden entfernt. Dies sollte NICHT geschehen, außer Sie wissen genau, was Sie tun! base-files bash 0 aktualisiert, 0 neu installiert, 21 zu entfernen und 138 nicht aktualisiert. Nach dieser Operation werden 32,4 MB Plattenplatz freigegeben. Sie sind im Begriff, etwas potentiell Schädliches zu tun. Zum Fortfahren geben Sie bitte »Ja, tue was ich sage!« ein. Abbruch. #
Möglichkeit zwei ist die Ersetzung durch ein alternatives Paket. Das gelingt dann automatisch, wenn in der Paketbeschreibung als Paketabhängigkeit entweder mehrere Einzelpakete oder ein einzelnes, virtuelles Paket benannt wurden. Aus dieser Liste wird dann eines ausgewählt, um die Paketabhängigkeit zu erfüllen. Bestes Beispiel ist das virtuelle Paket pdf-viewer, welches beispielsweise auf epdfview, evince, okular, xpdf und zathura verweist.
Ersetzung durch ein alternatives Paket.
ToDo: Beispiel mit Ersetzung durch alternatives Paket
Bei der Möglichkeit drei entstehen Waisen – Pakete, die keine Abhängigkeiten mehr zu anderen Paketen mehr aufweisen. Unter „Umgang mit Waisen“ in Abschnitt 8.44, „Umgang mit Waisen“ beleuchten wir dieses Thema näher.
Um das zu tun, bedarf es zunächst der Lokalisierung der Pakete, welche
zwar gelöscht wurden, aber noch als konfiguriert gelten. Dabei geht es
nur um die Konfigurationsdateien (conf files), die sich unter dem
Verzeichnis /etc
befinden. Dateien in ihrem Homeverzeichnis bleiben
von der Löschaktion unberührt.
Die passenden Werkzeuge sind dafür die Kombination aus dpkg
mit grep
sowie aptitude
. APT hat u.E. bislang keinen entsprechenden Schalter
dafür.
dpkg
rufen Sie dazu zunächst mit der Option -l
auf (siehe
Abschnitt 8.5, „Liste der installierten Pakete anzeigen und deuten“) und schicken
dessen Ausgabe an das Kommando grep
weiter. Mit dem regulären Ausdruck
"^rc "
(mit Leerzeichen am Ende) filtern Sie alle Zeilen aus der
Ausgabe heraus, die mit den beiden Buchstaben rc
beginnen und von
einem Leerzeichen gefolgt werden. Damit erhalten Sie eine Liste aller
verbliebenen Konfigurationsdateien, die dpkg
einem Paket zuordnen
kann.
Suche nach gelöschten, aber noch konfigurierten Paketen mittels dpkg
.
$ dpkg -l | grep "^rc " rc akonadi-backend-mysql 1.7.2-3 all MySQL storage backend for Akonadi rc akonadi-server 1.7.2-3 i386 Akonadi PIM storage service rc atop 1.26-2 i386 Monitor for system resources and process activity rc audtty 0.1.12-1 i386 ncurses based frontend to audacious ... $
Auch aptitude
kann in diese Richtung recherchieren. Es kennt zu diesem
Zweck zum Schalter search
die Option ~c
bzw. die Langform
?config-files
. Das Ergebnis umfasst jedoch alle konfigurierten
Pakete – unabhängig davon, ob diese als gelöscht markiert sind oder
nicht.
Suche nach konfigurierten Paketen mittels aptitude
.
$ aptitude search '~c' c akonadi-backend-mysql - MySQL-Speicher-Backend für Akonadi c akonadi-server - PIM-Speicherdienst Akonadi c atop - Überwachung für Systemressourcen und Proze c audtty - auf ncurses basierende Oberfläche für auda ... $
Haben Sie die aus Ihrer Sicht unnützen Konfigurationsdateien eines
bereits deinstallierten Pakets ausfindig gemacht und möchten diese
endgültig ins digitale Nirwana befördern, sind Ihnen APT und aptitude
gern dabei behilflich. apt
, apt-get
und aptitude
unterstützen Sie
mit der Kombination aus dem jeweiligen Namen des Werkzeugs und dem
Unterkommando purge
gefolgt vom Paketnamen, bspw. apt purge mc
für
die restlose Entfernung des Pakets mc.
Löschen der Konfigurationsdateien mittels apt
.
# apt purge mc Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt: libconfuse-common libconfuse0 Verwenden Sie »apt-get autoremove«, um sie zu entfernen. Die folgenden Pakete werden ENTFERNT: mc* 0 aktualisiert, 0 neu installiert, 1 zu entfernen und 108 nicht aktualisiert. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren? [J/n] (Lese Datenbank ... 253598 Dateien und Verzeichnisse sind derzeit installiert.) Entfernen von mc (3:4.8.13-3) ... Löschen der Konfigurationsdateien von mc (3:4.8.13-3) ... #
In den Versionen vor 0.7.2 kennt apt-get
das Unterkommando purge
noch nicht. Ab der Version 0.7.7 (veröffentlicht 2007) funktionieren
auch die Patches dazu zuverlässig. Falls Sie in die Situation kommen,
mit einer Version vor 0.7.7 arbeiten zu müssen, benutzen Sie stattdessen
im Aufruf die Kombination aus dem Unterkommando remove
gefolgt von der
Option --purge
und den Namen der zu entfernenden Pakete. Nachfolgend
sehen Sie das für apt-get
und das zu entfernende Paket cssed.
Löschen der Konfigurationsdateien mittels apt-get
.
# apt-get remove --purge cssed Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden Pakete werden ENTFERNT: cssed* 0 aktualisiert, 0 neu installiert, 1 zu entfernen und 16 nicht aktualisiert. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren [J/n]? (Lese Datenbank ... 304031 Dateien und Verzeichnisse sind derzeit installiert.) Entfernen von cssed ... Löschen der Konfigurationsdateien von cssed ... Trigger für menu werden verarbeitet ... #
Die obigen Beispiele besprechen das Entfernen der Konfigurationsdateien
eines einzigen Pakets. Um herauszufinden, welche "Paketreste" sich
insgesamt auf ihrem System tummeln, hilft die nachfolgende Kombination
aus dpkg
, egrep
und awk
. Aus der mit dpkg
erstellten Liste der
installierten Pakete filtert egrep
zunächst mit Hilfe eines Regulären
Ausdrucks alle Zeilen heraus, die mit den beiden Buchstaben rc
beginnen (entfernte, aber noch konfigurierte Pakete). Daraus wiederum
schneidet awk
aus jeder Zeile die zweite Spalte aus, die den
Paketnamen enthält. Bei Systemen, die bereits länger in Gebrauch sind
und auf denen viel experimentiert wurde, kann die Liste der hierüber
gefundenen "Paketreste" durchaus länger werden und Überraschungen zu Tage
fördern.
Aufspüren noch konfigurierter Pakete.
# dpkg -l | egrep "^rc " | awk '{ print $2; }' mediathekview php5-mysqlnd qgis-plugin-grass samba skype subversion svn-workbench thunderbird #
Um alle diese "Paketreste" in einem Rutsch aufzuräumen, kombinieren Sie
diesen Aufruf bspw. mit apt purge
wie folgt:
Rückfrage vor dem Löschen aufgespürter, noch konfigurierter Pakete.
# apt purge $(dpkg -l | egrep "^rc " | awk '{ print $2; }') Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden Pakete werden ENTFERNT: alsa-tools-gui* alsamixergui* bmon* bomber* cifs-utils* d2x-rebirth* doxygen-gui* evince* firebird2.5-common* firebird2.5-server-common* geany* geany-common* gedit* gkrellm* grass-core* gv* htdig* ibus* icedove* iceweasel-l10n-de* im-config* jed* jed-common* kdiff3* keyutils* ktorrent* libacpi0* libastro1* libatk1.0-0:i386* libavahi-compat-libdnssd1* libc-ares2* libcairo2:i386* libclucene-contribs1* libcmis-0.4-4* libcoin80* libdee-1.0-4* libegl1-nvidia* libeot0* libexttextcat-2.0-0* libfbclient2* libfbembed2.5* libfftw3-single3* libg15-1* libg15daemon-client1* libg15render1* libgdk-pixbuf2.0-0:i386* libgit2-21* libgit2-glib-1.0-0* libgl1-nvidia-glx* libgles1-nvidia* libgles2-nvidia* libglew1.10* libgltf-0.0-0* libgmpxx4ldbl* libgraphicsmagick3* libgraphite2-3:i386* libgssglue1* libgtk2.0-0:i386* libguess1* libharfbuzz0b:i386* libhdb9-heimdal* libhyphen0* libibus-1.0-5* libjasper1:i386* libkdegames6abi1* libkeybinder-3.0-0* libkworkspace4abi2* liblangtag1* liblvm2app2.2* libmarblewidget19* libmythes-1.2-0* libnvidia-eglcore* libnvidia-ml1* libodfgen-0.1-1* libopencore-amrnb0* libopencore-amrwb0* libopenscenegraph100* libpango-1.0-0:i386* libpangocairo-1.0-0:i386* libpangoft2-1.0-0:i386* libphysfs1* libpixman-1-0:i386* libpyside1.2* libqextserialport1* libqgis-analysis2.4.0* libqgis-core2.4.0* libqgis-gui2.4.0* libqgis-networkanalysis2.4.0* libqgisgrass2.4.0* libqgispython2.4.0* libqscintilla2-11* libqtlocation1* libquazip1* libqwt6* libsdl-mixer1.2* libsdl2-2.0-0* libshiboken1.2* libshp2* libsidplay1* libsmi2ldbl* libspatialindex3* libspeechd2* libva-glx1* libwebrtc-audio-processing-0* libwireshark-data* libwiretap4* linux-image-3.16.0-4-amd64* mediathekview* nvidia-settings* php5-mysqlnd* qgis-plugin-grass* samba* skype:i386* subversion* svn-workbench* thunderbird* wireshark* 0 aktualisiert, 0 neu installiert, 117 zu entfernen und 108 nicht aktualisiert. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren? [J/n] ... #
Nach ihrer Bestätigung löscht apt
alle "Paketreste" wie oben genannt — eines nach dem anderen. Möchten Sie hingegen für jedes Paket dessen
Entfernung nochmals einzeln bestätigen (oder ggf. auch ablehnen), kommt
eine for
-Schleife in ihrer Shell zum tragen. Das nachfolgende Beispiel
zeigt den Aufruf in einer Bash.
Paketweises Löschen aufgespürter, noch konfigurierter Pakete.
# for paket in $(dpkg -l | egrep "^rc " | awk '{ print $2; }'); do apt purge $paket; done Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden Pakete werden ENTFERNT: alsa-tools-gui* 0 aktualisiert, 0 neu installiert, 1 zu entfernen und 108 nicht aktualisiert. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren? [J/n] ... #
APT und aptitude
ermöglichen auch das Deinstallieren eines oder
mehrerer Pakete samt zugehöriger Konfigurationsdateien in einem einzigen
Schritt. Die Aufrufe entsprechen dem Kommando dpkg -P
Paketname für
eine Menge von Paketen in der richtigen Reihenfolge der
Paketabhängigkeiten.
Für diese Aktion gilt das gleiche wie in Fall3. Sie kombinieren entweder
apt-get
mit dem Schalter remove
, der Option --purge
und dem
Paketnamen oder nur dem Schalter purge
und dem Paketnamen. aptitude
und apt
kennen hingegen auschließlich den Schalter purge
für diese
Aktion. Das nachfolgende Beispiel zeigt den entsprechenden Aufruf von
aptitude
und das Paket cssed.
Löschen des Pakets cssed samt Konfigurationsdateien in einem Schritt.
# aptitude purge cssed Die folgenden Pakete werden ENTFERNT: cssed{p} 0 Pakete aktualisiert, 0 zusätzlich installiert, 1 werden entfernt und 16 nicht aktualisiert. 0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 2.052 kB frei werden. Möchten Sie fortsetzen? [Y/n/?] (Lese Datenbank ... 304082 Dateien und Verzeichnisse sind derzeit installiert.) Entfernen von cssed ... Löschen der Konfigurationsdateien von cssed ... Trigger für man-db werden verarbeitet ... Trigger für menu werden verarbeitet ... Trigger für gnome-menus werden verarbeitet ... Trigger für desktop-file-utils werden verarbeitet ... #
Ein Sonderfall ist das Entfernen aller Pakete für eine bestimmte Architektur. Das tritt auf, wenn Sie bspw. mit dem Multiarch-Feature experimentieren (siehe Abschnitt 1.2.3, „Multiarch: Mehrere Architekturen gleichzeitig auf einem System“). An den Paketnamen fügen Sie einen Doppelpunkt und den Namen der Architektur an. Um beispielsweise alle Pakete für die Architektur i386 vollständig von ihrem System zu entfernen, nutzen Sie diesen Aufruf:
Vollständiges Entfernen aller installierten Pakete für die Architektur i386.
# apt-get remove --purge ".*:i386"