8.5. Liste der installierten Pakete anzeigen und deuten

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.

8.5.1. dpkg -l Paketname (Langform --list)

dpkg wird für diese Aufgabe sehr häufig genutzt. Intern leitet dpkg den Aufruf an das Abfragewerkzeug dpkg-query weiter.

Ausgabe von dpkg interpretieren

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

u: Unbekannt (unknown)

n: Paket ist nicht installiert (not installed)

(leer): kein Fehler

i: Installieren (installed)

c: nur die Konfigurationsdatei ist vorhanden (configured)

R: eine Neuinstallation ist notwendig (reinstall)

h: Halten (hold)

H: Paket ist nur halb installiert (half installed)

r: Entfernen (remove)

U: Paket wurde entpackt (unpacked)

p: Vollständig Löschen (purge)

F: Fehlgeschlagene Konfiguration (failed)

W: Trigger erwartet (aWaited trigger)

t: Trigger anhängig (trigger)

i: Installiert (installed)


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

ii

das Paket ist vollständig und fehlerfrei installiert sowie konfiguriert.

rc

das Paket wurde gelöscht, aber die Konfigurationsdateien sind noch gespeichert (Abkürzung für removed, configured, no error).

un

unbekanntes, nicht installiertes Paket (Abkürzung für unknown, not installed).

hi

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“).


Vollständige Paketliste anzeigen

Ohne die Angabe des Paketnamens zeigen Sie alle Pakete und Paketreste an, die auf Ihrem System derzeit installiert sind. 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)
$

Liste anhand von Filtern einschränken

dpkg akzeptiert Paketnamen als Filter. Geben Sie ein oder mehrere Pakete als Parameter durch Leerzeichen getrennt an, erhalten Sie nur Informationen zu diesen benannten Paketen. Das nachfolgende Beispiel listet ausschließlich die Informationen zum Paket nmap auf.

Informationen zu einem ausgewählten Paket anzeigen. 

$ dpkg -l nmap
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      Architektur  Beschreibung
+++-==============-============-============-=================================
ii  nmap           7.93+dfsg1-1 amd64        The Network Mapper
$

Weiterhin versteht dpkg als Parameter auch Paketmuster. Die Angabe des Paketmusters lehnt sich an Reguläre Ausdrücke an, entspricht diesem jedoch nur teilweise. Das nachfolgende Beispiel zeigt, wie Sie alle Pakete auflisten, die die Zeichenkette map im Paketnamen besitzen und dabei über ein Präfix aus beliebigen Zeichen verfügen. Als Suchmuster kommt *map zum Einsatz, wobei der * für alle Zeichen in beliebiger Menge steht.

Suche nach Paketen anhand eines Musters. 

 dpkg -l '*map'
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      Architektur  Beschreibung
+++-==============-============-============-=================================
un  bitmap         <keine>      <keine>      (keine Beschreibung vorhanden)
ii  nmap           7.93+dfsg1-1 amd64        The Network Mapper
un  ruby-net-imap  <keine>      <keine>      (keine Beschreibung vorhanden)
un  xmodmap        <keine>      <keine>      (keine Beschreibung vorhanden)
un  xstdcmap       <keine>      <keine>      (keine Beschreibung vorhanden)
un  zenmap         <keine>      <keine>      (keine Beschreibung vorhanden)

Eine Einschränkung auf bestimmte Zeichen erreichen Sie über eckige Klammern im Muster. Die Angabe *[nt]map passt auf alle Namen bestehend aus beliebigen Zeichen (*) gefolgt von einem n oder t ([nt]) und der Zeichenkette map. Gefunden werden die drei Pakete bitmap, nmap und zenmap, wobei nur das Paket nmap installiert ist und die anderen beiden Pakete nicht.

Suche nach Paketen anhand eines ausgefeilten Musters. 

$ dpkg -l '*[nt]map'
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      Architektur  Beschreibung
+++-==============-============-============-=================================
un  bitmap         <keine>      <keine>      (keine Beschreibung vorhanden)
ii  nmap           7.93+dfsg1-1 amd64        The Network Mapper
un  zenmap         <keine>      <keine>      (keine Beschreibung vorhanden)

Ausgabe minimieren

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.

8.5.2. Suche mit aptitude

Das Werkzeug aptitude kennt dafür das Unterkommando search. Nach diesem erwartet aptitude entweder einen Paketnamen oder das Flag ~i für „installierte Pakete“ (Langform ?installed). Geben Sie beides an, ignoriert aptitude den Paketnamen.

Ergebnis ist eine Liste aller installierten Pakete. Daraus filtern wir im nachfolgenden Beispiel mittels grep nur die Zeilen heraus, in denen das Wort texlive enthalten ist.

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.

8.5.3. apt list --installed

Seit der Version 1.0 verfügt apt ebenfalls über einen Schalter list. In Verbindung mit dem Schalter --installed erhalten Sie eine Ausgabe aller derzeit installierten Pakete. Jede Zeile der Ausgabe beinhaltet den Paketnamen, den Status der Veröffentlichung, die Versionsnummer, die Architektur und den Status der Installation.

Vollständige Paketliste anzeigen

Ohne weitere Angaben erhalten Sie eine vollständige Paketliste. 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]
...
$

Liste anhand von Filtern einschränken

Analog zu dpkg kann auch apt mit Filtern umgehen, um darüber die Ausgabe einzuschränken. apt akzeptiert dazu als Parameter sowohl eine Liste von Paketnamen, als auch Muster. Das nachfolgende Beispiel schränkt die Ausgabe auf die beiden Pakete nmap und nmap-common ein.

Liste auf bestimmte Pakete eingrenzen. 

$ apt list --installed nmap nmap-common
Auflistung… Fertig
nmap-common/stable,stable,now 7.93+dfsg1-1 all  [Installiert,automatisch]
nmap/stable,now 7.93+dfsg1-1 amd64  [installiert]
$

Für den Umgang mit Mustern folgt apt dem gleichen Prinzip wie dpkg. Das nachfolgende Beispiel zeigt die Recherche nach allen installierten Paketen, die die Zeichenkette map im Namen beinhalten. Die Angabe eines Sterns (*) vor und nach der Zeichenkette interpretiert apt als alle Zeichen in beliebiger Menge.

Liste mit der Angabe eines Musters eingrenzen. 

$ apt list --installed '*map*'
Auflistung… Fertig
libchromaprint1/stable,now 1.5.1-2+b1 amd64  [Installiert,automatisch]
libdevmapper-event1.02.1/stable,now 2:1.02.185-2 amd64  [Installiert,automatisch]
libdevmapper1.02.1/stable,now 2:1.02.185-2 amd64  [installiert]
libunicode-map-perl/stable,now 0.112-13+b1 amd64  [Installiert,automatisch]
nmap-common/stable,stable,now 7.93+dfsg1-1 all  [Installiert,automatisch]
nmap/stable,now 7.93+dfsg1-1 amd64  [installiert]
xbitmaps/stable,stable,now 1.1.1-2.2 all  [Installiert,automatisch]
$

Ausgabe minimieren

Um die Ausgabe 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
...
$

8.5.4. Weitere Möglichkeiten

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“).

Abbildung 8.2. Icons zur Darstellung des Paketstatus

werkzeuge/paketoperationen/smartpm-icons.png