So listen Sie installierte Pakete auf Ubuntu mit apt und dpkg-query auf

Unter Ubuntu verwenden Sie apt list --installed, wenn Sie eine lesbare Liste der installierten Pakete möchten, und verwenden Sie dpkg-query, wenn Sie eine genaue Statusprüfung oder eine strukturierte Ausgabe für ein Skript benötigen. Der beste Befehl hängt davon ab, ob Sie den Paketnamen kennen, das Paket identifizieren müssen, dem eine Datei gehört, oder ob Sie manuell und automatisch installierte Pakete trennen möchten.

Alle installierten Deb-Pakete auflisten

Um installierte Pakete zusammen mit ihren Versionen, Architekturen und Repositoriumsstatus anzuzeigen, führen Sie aus:

apt list --installed

Wenn die Liste lang ist, leiten Sie sie an less weiter. Sie können auch direkt ein Paketnamensmuster angeben.

apt list --installed | less
apt list --installed 'nginx*'

Der Befehl apt ist in erster Linie als interaktive Schnittstelle für Menschen konzipiert. Für Bestandsdateien, Vergleiche und Skripte ist dpkg-query normalerweise die bessere Wahl, da das Ausgabeformat explizit angegeben werden kann.

dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' | sort

Überprüfen, ob ein bestimmtes Paket installiert ist

Wenn Sie den genauen Paketnamen kennen

Der folgende Befehl zeigt den dpkg-Datenbankeintrag für nginx an. Ein Paket, das vollständig installiert ist, enthält normalerweise Status: install ok installed in der Ausgabe.

dpkg-query -s nginx

Um nur den aktuellen Status in kompakter Form auszugeben, fordern Sie das Statusfeld direkt an.

dpkg-query -W -f='${db:Status-Status}\n' nginx

Die erwartete Ausgabe für ein normal installiertes Paket ist installed. Wenn das Paket nicht in der lokalen Datenbank existiert, gibt der Befehl einen von null verschiedenen Exit-Status zurück. Skripte sollten den Exit-Status überprüfen, anstatt sich nur auf den angezeigten Text zu verlassen.

Wenn Sie nach ähnlichen Paketnamen suchen möchten

dpkg-query -l akzeptiert Shell-Wildcardmuster. Setzen Sie das Muster in Anführungszeichen, damit die Shell es nicht erweitert, bevor dpkg-query es erhält.

dpkg-query -l 'nginx*'

Die ersten drei Zeichen der Ausgabe beschreiben die gewünschte Aktion, den aktuellen Status und den Fehlerstatus. Die gängige Kombination ii bedeutet, dass die Installation gewünscht ist und das Paket derzeit installiert ist.

Code Bedeutung
ii Das Paket ist zur Installation ausgewählt und derzeit korrekt installiert.
rc Die Paketdateien wurden entfernt, aber die Konfigurationsdateien bleiben erhalten.
iU Das Paket wurde entpackt, aber die Konfiguration wurde nicht abgeschlossen.
Großbuchstabenstatus Das Paket könnte sich in einem unvollständigen oder stark inkonsistenten Zustand befinden. Überprüfen Sie den detaillierten Status und die Paketverwaltungsprotokolle.

Überprüfen Sie die installierte Version und den Repository-Kandidaten

Nur die installierte Version anzeigen

dpkg-query -W -f='${binary:Package}\t${Version}\n' curl

Das binary:Package-Feld hängt, wenn nötig, einen Architekturqualifikator für ein Multi-Arch-Paket an. Es ist sicherer als das einfache Package-Feld, wenn Sie Versionen oder Inventare zwischen Systemen vergleichen.

Vergleichen Sie die installierten und vorgeschlagenen Versionen

apt-cache policy curl

Installed ist die derzeit auf dem System vorhandene Version, während Candidate die Version ist, die aus den aktivierten Repositories ausgewählt wurde. Repositoriums-Metadaten können veraltet sein, daher führen Sie sudo apt update aus, bevor Sie dieses Ergebnis verwenden, um zu entscheiden, ob ein Update verfügbar ist.

Finden Sie Dateien, die von einem Paket installiert wurden

Liste der für ein Paket erfassten Dateien

dpkg-query -L nginx

Dieser Befehl listet Dateien auf, die für das Paket in der dpkg-Datenbank erfasst wurden. Er umfasst nicht unbedingt Protokolle, Caches, Uploads, Datenbanken oder andere Dateien, die eine Anwendung nach der Installation erstellt.

Identifizieren Sie das Paket, dem eine Datei gehört

dpkg-query -S /usr/bin/curl

Wenn der Pfad ein symbolischer Link ist, überprüfen Sie auch das aufgelöste Ziel.

readlink -f /usr/bin/python3
dpkg-query -S "$(readlink -f /usr/bin/python3)"

dpkg-query -S durchsucht nur Datensätze für installierte Pakete. Um herauszufinden, welches Repository-Paket eine nicht installierte Datei bereitstellt, verwenden Sie ein separates indiziertes Suchwerkzeug wie apt-file.

Manuell und automatisch installierte Pakete trennen

APT zeichnet auf, ob ein Paket direkt ausgewählt oder automatisch als Abhängigkeit installiert wurde.

apt-mark showmanual
apt-mark showauto

Das showmanual-Ergebnis ist nicht einfach eine Historie von Anwendungen, die eine Person später installiert hat. Es kann auch Metapakete und Komponenten enthalten, die die ursprüngliche Ubuntu-Installation als manuell markiert hat. Schließen Sie nicht vom alleinigen Vorhandensein eines Pakets auf dessen Zweck oder Installationsgeschichte.

Eine automatisch installierte Abhängigkeit kann für autoremove in Frage kommen, wenn kein manuell installiertes Paket sie benötigt. Überprüfen Sie stets die vorgeschlagenen Änderungen, bevor Sie etwas entfernen.

sudo apt autoremove --dry-run

Speichern Sie ein Inventar der installierten Pakete in einer Datei

Zum Troubleshooting oder zum Vergleichen von Systemen speichern Sie den Paketnamen, die Version und die Architektur als tabulatorgetrennte Daten.

dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' \
  | sort > installed-packages.tsv

Vergleichen Sie Inventare von zwei Systemen oder zwei Zeitpunkten mit:

diff -u installed-packages-before.tsv installed-packages-after.tsv

Diese Datei ist ein Inventar eines Systems zu einem bestimmten Zeitpunkt, keine vollständige Sicherung oder Wiederherstellungsmethode. Eine andere Ubuntu-Version bietet möglicherweise nicht dieselben Versionen, und Repository-Definitionen, Persönliche Paketarchive (PPAs), Snap-Pakete, lokale Konfigurationen und Anwendungsdaten müssen separat behandelt werden.

Unterscheiden Sie Deb- und Snap-Pakete

apt und dpkg-query prüfen Deb-Pakete. Anwendungen, die als Snaps installiert sind, erscheinen in einer separaten Liste.

snap list

Ein vollständiges Software-Inventar muss möglicherweise auch Container-Images, sprachspezifische Paketmanager, manuell installierte Programme und andere Bereitstellungsmethoden abdecken.

Befehlsübersicht nach Aufgabe

Aufgabe Empfohlener Befehl
Alle installierten Deb-Pakete auflisten apt list --installed
Produzieren Sie strukturierte Namen und Versionen dpkg-query -W -f='format'
Überprüfen Sie den Status eines bestimmten Pakets dpkg-query -s PACKAGE
Vergleichen Sie installierte und verfügbare Versionen apt-cache policy PACKAGE
Listen Sie Dateien auf, die von einem Paket installiert wurden dpkg-query -L PACKAGE
Ermitteln Sie den Eigentümer einer Datei dpkg-query -S FILE
Listen Sie Pakete auf, die als manuell markiert sind apt-mark showmanual
Listen Sie installierte Snap-Pakete auf snap list

Wichtige Einschränkungen und Sicherheitsprüfungen

  • Eine Suche mit grep kann mehrere Pakete ergeben, die denselben Text in ihren Namen enthalten. Verwenden Sie dpkg-query -s oder -W für eine genaue Installationsüberprüfung.
  • dpkg-query -l kann Pakete anzeigen, die entfernt wurden, deren Konfigurationsdateien aber noch vorhanden sind. Lesen Sie die Statusspalten, anstatt jede Zeile als installiert zu betrachten.
  • Eine Liste installierter Pakete sagt nicht aus, ob der zugehörige Dienst läuft. Überprüfen Sie einen Dienst separat mit dem zugehörigen Verwaltungstool, wie systemctl status.
  • Bevor Sie ein Paket entfernen, prüfen Sie Abhängigkeiten, Metapakete und alle Betriebssystemfunktionen, die möglicherweise darauf angewiesen sind.

Offizielle Referenzen