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