Zum Inhalt springen

Pakete abfragen

Die Paketverwaltung kann weit mehr als nur installieren und entfernen. Mit gezielten Abfragen lassen sich Fragen beantworten wie: Welchem Paket gehört diese Datei? Was braucht dieses Paket? Welche Pakete hängen davon ab?

Bevor man ein Paket sucht, lohnt ein Blick auf den Befehl selbst: Ist er kompiliert oder ein Shell-Skript? Das file-Kommando verrät es:

/usr/sbin/mtr
which mtr
file /usr/sbin/mtr
# /usr/sbin/mtr: ELF 64-bit LSB shared object, x86-64, dynamically linked ...
file /usr/sbin/ifcfg
# /usr/sbin/ifcfg: POSIX shell script, ASCII text executable

Ein dynamisch gelinkes Binary (dynamically linked) hat Abhängigkeiten zu Bibliotheken — es lässt sich nicht einfach auf ein anderes System kopieren. Ein Shell-Skript hingegen ist oft portierbar, solange die verwendeten Befehle vorhanden sind.

Der häufigste Anwendungsfall: eine Datei oder ein Befehl ist vorhanden — aber woher kommt sie?

Terminal-Fenster
rpm -qf /usr/bin/find
# findutils-4.8.0-5.el9.x86_64
rpm -qf /etc/ssh/sshd_config
# openssh-server-8.7p1-34.el9.x86_64

Für Dateien, die noch nicht installiert sind (Suche im Repository):

Terminal-Fenster
dnf provides /usr/bin/find
dnf provides "*/sshd_config" # Glob möglich

Welche Dateien installiert ein bestimmtes Paket auf dem System?

Terminal-Fenster
rpm -ql nginx # installiertes Paket
rpm -ql nginx | grep bin # nur ausführbare Dateien
# Noch nicht installiertes Paket aus dem Repository:
dnf repoquery -l nginx

Version, Beschreibung, Größe, Installationsdatum — all das steckt in den Paket-Metadaten:

Terminal-Fenster
rpm -qi nginx
# Name : nginx
# Version : 1.24.0
# Release : 3.el9
# Architecture: x86_64
# Install Date: ...
# Size : 1234567
# Summary : A high performance web server ...
dnf info nginx # ähnlich, aber auch für nicht installierte Pakete

Changelog eines Pakets anzeigen:

Terminal-Fenster
rpm -q --changelog nginx | head -30
dnf repoquery --changelog nginx
Terminal-Fenster
rpm -q --requires nginx
dnf repoquery --requires nginx
dnf repoquery --requires --resolve nginx # aufgelöst als Paketnamen

Nützlich, bevor ein Paket entfernt wird — oder um zu verstehen, warum es nicht entfernt werden kann:

Terminal-Fenster
rpm -q --whatrequires openssl-libs
dnf repoquery --whatrequires openssl-libs
Terminal-Fenster
rpm -qa --last # alle Pakete, neueste zuerst
rpm -qa --last | head -20 # die letzten 20
dnf history # dnf-Transaktionen
dnf history info 5 # Details zu Transaktion #5
dnf history undo 5 # Transaktion rückgängig machen

Hat sich eine Datei eines installierten Pakets verändert? Nützlich bei Verdacht auf Manipulation oder fehlerhafte Konfiguration:

Terminal-Fenster
rpm -V nginx # Paket prüfen
rpm -Va # alle Pakete prüfen (dauert lange)

Ausgabe-Codes:

S — Dateigröße verändert
M — Dateirechte verändert
5 — MD5-Prüfsumme abweichend
T — Zeitstempel verändert
c — Konfigurationsdatei (Abweichungen sind normal)

Ein leere Ausgabe bedeutet: alles in Ordnung.

RPM-Pakete können Shell-Skripte enthalten, die bei Installation oder Deinstallation ausgeführt werden (%pre, %post, %preun, %postun):

Terminal-Fenster
rpm -q --scripts nginx

Ein Kollege nutzt ein Tool, das im Standard-Repository nicht verfügbar ist. Woher hat er es?

Terminal-Fenster
dnf list hwinfo
# Installed Packages
# hwinfo.x86_64 21.47-9.el8 @epel
# Das @ vor dem Repository-Namen zeigt die Quelle
# Alle installierten Pakete mit ihrer Quelle:
dnf list installed | grep @epel

Repository-Konfiguration anzeigen:

Terminal-Fenster
dnf repolist # aktive Repositories
dnf repolist --all # alle (auch deaktivierte)
dnf repoinfo epel # Details zu einem Repository
Terminal-Fenster
# RHEL/Fedora
dnf list installed
dnf list installed | grep nginx
rpm -qa | sort | less
# Debian/Ubuntu
apt list --installed
dpkg -l | grep nginx
dpkg -l | grep "^ii" # nur vollständig installierte
# openSUSE
zypper search --installed-only
rpm -qa | sort