Diese Aktion betrifft häufig nicht nur ein einzelnes Paket, sondern den Gesamtbestand an Software, die auf Ihrem Linuxsystem installiert sind oder waren. Im Alltag ergeben sich eine ganze Reihe von Anwendungsfällen, bei denen diese Aktion durchgeführt wird.
Hintergrund für den Fall 1 ist der Wunsch nach einem Überblick zum Gesamtzustand eines Systems und vor allem der Software, die darauf installiert ist. Das betrifft insbesondere die Rechnersysteme, die Sie nicht selbst eingerichtet haben und deren Betreuung Ihnen obliegt, bspw. Geräte im Auslieferungszustand oder im Rahmen der Wartung als Bestandteil eines Kundenauftrags. Dabei kommt häufig die Berücksichtigung „gewachsener Infrastruktur“ ins Spiel.
Fall 2 betrifft „großflächige“ Änderungen auf einem Rechnersystem. Sie überprüfen, ob diese korrekt abgelaufen sind. Fall 3 betrifft die Entwicklung, hier ist die Fehlersuche bei den Paketwerkzeugen zu nennen.
Zu den konkreten Aktionen zählt weiterhin das Herausfinden, ob ein bestimmtes Paket oder Programm auf Ihrem Rechnersystem überhaupt installiert ist, und falls ja, ob dieses vollständig installiert und (bereits) konfiguriert wurde. Wurde es hingegen entfernt, ist zu klären, ob es vollständig entfernt wurde oder noch „Reste“ übrig sind, bspw. paketspezifische Konfigurationsdateien.
Für die Kommandozeile existieren mittlerweile drei grundlegende
Möglichkeiten. Einerseits ist das dpkg -l
, andererseits
aptitude search '~i'
und drittens apt list --installed
. Die
Darstellung in den graphischen Programme klären wir weiter unten genauer.
dpkg
wird für diese Aufgabe sehr häufig genutzt. Intern leitet dpkg
den
Aufruf an das Abfragewerkzeug dpkg-query
weiter.
Ohne die Angabe des Paketnamens zeigen Sie alle Pakete und Paketreste an, die auf Ihrem System derzeit installiert sind. Geben Sie ein oder mehrere Pakete als Parameter durch Leerzeichen getrennt an, erhalten Sie nur Informationen zu diesen benannten Paketen. In nachfolgender Paketliste zeigen die einzelnen Spalten nacheinander den Paketzustand, den Namen des Pakets (siehe Abschnitt 2.11, „Benennung einer Paketdatei“), dessen Version und die dazugehörige Kurzbeschreibung dazu.
Vollständige Paketliste mit dpkg
.
$ dpkg -l Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten | Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/ Halb installiert/Trigger erWartet/Trigger anhängig |/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht) ||/ Name Version Beschreibung +++-=========================================-====================================-========================== ==================================================== ii a2ps 1:4.14-1.1 GNU a2ps - 'Anything to Po stScript' converter and pretty-printer rc bsh 2.0b4-12 Java scripting environment (BeanShell) Version 2 ... un xfce4-icon-theme <keine> (keine Beschreibung vorhanden) $
Die ersten drei Spalten jeder ausgegebenen Zeile interpretieren Sie
anhand der Tabelle 8.1, „Paketzustand deuten“. Die Begriffe in Klammern nennen die
englischen Übersetzungen – i.d.R. ist das die Langform der jeweiligen
Option. Mit Ausnahme von W
für aWaited trigger entspricht dabei
der verwendete Buchstabe in der Spalte jeweils dem Anfangsbuchstaben der
Langform der Option.
Tabelle 8.1. Paketzustand deuten
gewünschte Aktion durch den Paketmanager | Paketstatus | Fehler-Schalter |
---|---|---|
|
| (leer): kein Fehler |
|
|
|
|
| |
|
| |
|
| |
| ||
| ||
|
Kleinbuchstaben zeigen dabei an, dass alles im grünen Bereich ist.
Großbuchstaben heben hingegen Fehlerfälle oder auch Zustände hervor, die
ihrerseits eine genauere Begutachtung und eine Aktion zu diesem Paket
erfordern. Obige Darstellung mit Buchstaben verwendet sowohl dpkg
, als
auch aptitude
. Tabelle 8.2, „Alltägliche Kombinationen zum Paketzustand“ zeigt Ihnen die
Status-Kombinationen, die Ihnen häufig im Alltag begegnen werden.
Tabelle 8.2. Alltägliche Kombinationen zum Paketzustand
Paketstatus | Beschreibung |
---|---|
| das Paket ist vollständig und fehlerfrei installiert sowie konfiguriert. |
| das Paket wurde gelöscht, aber die Konfigurationsdateien sind noch gespeichert (Abkürzung für removed, configured, no error). |
| unbekanntes, nicht installiertes Paket (Abkürzung für unknown, not installed). |
| das Paket ist installiert, aber auf hold gesetzt. Bei Softwareaktualisierungen wird das Paket nicht berücksichtigt und in seinem derzeitigen Zustand belassen (siehe Paketflags in Abschnitt 2.15, „Lokale Paketmarkierungen“). |
Geht es Ihnen lediglich um die Namen der derzeit vollständig installierten Pakete
ohne deren Versionsnummer und Beschreibung, haben Sie drei Möglichkeiten zur
Lösung — a) dpkg-query
mit einem speziellen Formatstring für die Ausgabe in
Kombination mit egrep
, awk
und sort
, b) die Kombination aus dpkg
, egrep
,
awk
und sort
sowie c) die Verwendung von dpkg-awk
. dpkg
selbst bietet von
sich aus bislang keinen entsprechenden, einzelnen Schalter an, der diese
spezifische Ausgabe ermöglicht.
Für den Fall a) nutzen Sie den Schalter -W
(Langform --show
) und den
Formatstring -f='${db:Status-Abbrev} ${binary:Package}\n'
. Dabei kürzt -f
die Langform --showformat
ab. Die Angabe '${db:Status-Abbrev}'
liefert
Ihnen den Installationsstatus des Pakets und $'{binary:Package}\n'
den
Paketnamen aus der Paketbeschreibung samt Zeilenumbruch am Ende der Zeile.
Der vollständige Aufruf ist dann wie folgt:
Nur die Paketnamen ausgeben (dpkg-query
).
$ dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' * | egrep "^ii" | awk '{ print $2 }' | sort aapt acl acpi adduser adwaita-icon-theme ... $
Fall b) ist kürzer und kombiniert die Werkzeuge dpkg
, egrep
, awk
und
sort
miteinander:
Nur die Paketnamen ausgeben (dpkg
, egrep
, awk
und sort
kombiniert).
$ dpkg -l | egrep "^ii" | awk ' {print $2} ' | sort aapt acl acpi adduser adwaita-icon-theme ... $
Der dritte Fall c) benutzt das Werkzeug dpkg-awk
aus dem gleichnamigen Paket
[Debian-Paket-dpkg-awk]. Das Paket gehört nicht zur Standardinstallation und
ist daher von ihnen vor der Benutzung nachzuinstallieren. dpkg-awk
wertet die
beiden Dateien /var/lib/dpkg/status
und /var/lib/dpkg/available
aus.
Mit dem nachfolgenden Aufruf erhalten Sie eine Liste aller Pakete, die
auf ihrem System gerade installiert sind. dpkg-awk
filtert alle Zeilen
heraus, auf die der regulräre Ausdruck Status: .* installed$
passt. Mit der
Angabe Package
weisen Sie dpkg-awk
an, nur in die Felder mit den Paketnamen
zu durchsuchen.
Die Liste der installierten Pakete mit dpkg-awk
ermitteln.
$ dpkg-awk "Status: .* installed$" -- Package Package: libasan0 Package: libvorbisfile3 Package: libquadmath0 Package: libxkbfile1 ... $
Obige Ausgabe bearbeiten Sie mit UNIX/Linux-Tools weiter, bspw. mit cut
oder
sort
, um die Ausgabe ihren Wünschen anzupassen.
aptitude
kennt dazu das Unterkommando search
und erwartet danach
entweder einen Paketnamen oder ein Flag. In diesem Fall ist es das Flag
~i
für „installierte Pakete“ (Langform ?installed
).
Wie bereits oben genannt, verwendet aptitude
in der Ausgabe die
gleichen Buchstaben wie dpkg
(siehe Tabelle 8.1, „Paketzustand deuten“). Der
Buchstabe i
bezeichnet ein installiertes Paket, A
in der dritten
Spalte markiert „automatisch installiert“ und deutet auf eine
automatisch erfüllte Paketabhängigkeit hin (siehe dazu
Abschnitt 8.10, „Automatisch installierte Pakete anzeigen“). Daneben sehen Sie in der
Ausgabe noch den Namen und die Kurzbeschreibung zum jeweiligen Paket.
aptitude
listet die installierten LaTeX-Pakete auf.
$ aptitude search '~i' | grep texlive i texlive - TeX Live: Eine anständige Auswahl der TeX- i A texlive-base - TeX Live: Grundlegende Programme und Datei i A texlive-bibtex-extra - TeX Live: Extra BibTeX styles i A texlive-binaries - Binärdateien für TeX Live i A texlive-common - TeX Live: Basiskomponenten i A texlive-doc-base - TeX Live: Dokumentation für TeX Live $
Geht es Ihnen nur um die Namen der installierten Pakete auf ihrem System, hilft
folgende Kombination aus aptitude
, sed
und awk
weiter:
Paketliste mittels aptitude
ausgeben.
$ aptitude search '~i' | sed -E 's/i [A ]? //'| awk ' { print $1 } ' aapt acl acpi adduser adwaita-icon-theme alsa-base ... $
Die Angabe -E 's/i [A ]? //' bei `sed
aktiviert zunächst erweiterte Reguläre
Ausdrücke (Schalter -E
) und ersetzt danach alle Vorkommen der Zeichenkette
aus einem kleinen i
gefolgt von einem Leerzeichen, einem möglichen A
oder
Leerzeichen sowie einem abschließenden Leerzeichen durch nichts (es löscht die
Zeichen aus der Zeile). Die Angabe von ' { print $1 } '
bei awk
gibt danach
lediglich erste Spalte jeder Zeile aus, die den Paketnamen enthält. Alle
weiteren Informationen, die aptitude
bereitgestellt hatte, entfallen.
apt
seit der Version 1.0 liefert ebenfalls einen Schalter list
. Genauer
spezifizieren die installierten Pakete mit Hilfe der zusätzlichen Angabe
--installed
. Die Ausgabe sieht dann so aus:
apt
listet die installierten Pakete auf.
$ apt list --installed WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Auflistung... aapt/oldstable,now 1:7.0.0+r33-1 amd64 [Installiert,automatisch] acl/oldstable,now 2.2.52-3+b1 amd64 [installiert] acpi/oldstable,now 1.7-1+b1 amd64 [installiert] adduser/oldstable,now 3.115 all [installiert] adwaita-icon-theme/oldstable,now 3.22.0-1+deb9u1 all [Installiert,automatisch] ... $
Jede Zeile der obigen Ausgabe beinhaltet den Paketnamen, den Status der
Veröffentlichung, die Versionsnummer, die Architektur und den Status der
Installation. Um das weiter auf die Paketnamen einzugrenzen, helfen Ihnen
wiederum die beiden Werkzeuge awk
und tail
weiter. awk
filtert den
Paketnamen aus jeder Zeile heraus und tail
entsorgt die ersten vier Zeilen
inklusive der Warnung. Die Angabe 2>1
hinter apt
lenkt zuvor noch den
Fehlerkanal stderr
auf die Standardausgabe stdout
um.
apt
listet die installierten Pakete auf (Paketliste).
$ apt list --installed 2>1 | awk -F '/' ' { print $1 } ' | tail +4 aapt acl acpi adduser adwaita-icon-theme ... $
Graphische Programme wie beispielsweise Synaptic (siehe Abschnitt 6.4.1, „Synaptic“) und SmartPM (siehe Abschnitt 6.4.3, „Smart Package Management (SmartPM)“) verwenden keine Buchstaben zur Kennzeichnung des Paketstatus, sondern nutzen stattdessen verschiedenfarbige Kästchen („Icons“). In Abbildung 8.2, „Icons zur Darstellung des Paketstatus“ sehen Sie alle Möglichkeiten in der vollständigen Übersicht. Installierte Pakete erkennen Sie an der grünen Farbe, weiß/hellgrau kennzeichnet nicht installierte Pakete und rot steht hier für defekte Pakete (Status „broken“).