8.24. Paket zu Datei finden

Häufig ist Ihnen nur der Dateiname bekannt, aber nicht das Paket, aus dem diese Datei stammt. Das wird insofern spannend, wenn das Paket anders als die gesuchte Datei heißt. Es gibt derzeit fünf Möglichkeiten, diese Zuordnung zu ermitteln – einerseits über dpkg, dpkg-query oder dlocate [Debian-Paket-dlocate] mit deren Option -S Muster, andererseits mittels apt-file und dessen Option search Muster und fünftens über die Webseite des Debian-Projekts. aptitude verfügt nicht über einen solchen Schalter zur Suche.

Die vier Kommandos finden alle Pfade, in denen das angegebene „Muster“ vorkommt. Der Unterschied zwischen den vier Programmen besteht darin, dass dpkg, dpkg-query und dlocate nur in bereits installierten Paketen suchen, apt-file hingegen hingegen in allen verfügbaren Paketen, d.h. unabhängig davon, ob diese bereits auf ihrem System installiert sind oder nicht. Verfügbare Pakete bezeichnet die Menge von Paketen, die APT über einen Eintrag in der Liste der Paketquellen in der Datei /etc/apt/sources.list und aus der dazugehörigen Paketliste entnehmen kann (siehe dazu Abschnitt 3.1, „Paketquellen“). Pakete, die sich hingegen in Paketquellen befinden, die nicht in obiger Liste referenziert sind, kann apt-file nicht untersuchen.

Bei der Suche über die Webseite bildet zunächst der gesamte Paketbestand aller Veröffentlichungen die Grundlage. Sie können das jederzeit entsprechend über die Auswahlfelder zur Veröffentlichung oder Architektur einschränken.

8.24.1. Suche in bereits installierten Paketen

Dafür genügen der Aufruf dpkg -S Muster, dpkg-query -S Muster oder die flinke Abkürzung dlocate Muster. Zur Suche ist bei dlocate der Schalter -S optional, dpkg und dpkg-query kennen hingegen dafür die Langform --search. Das Textfragment oder Muster beschreibt, wonach die Programme in der Dateiliste der installierten Pakete suchen sollen. Beginnt das Textfragment mit einem /, wird die Zeichenkette als absoluter Pfad interpretiert. Nachfolgendes Beispiel illustriert den Aufruf nach dem Muster bsod. mittels dpkg in allen installierten Paketen.

Suche nach dem Muster bsod. mittels dpkg

$ dpkg -S bsod.
xscreensaver-screensaver-bsod: /usr/share/applications/screensavers/bsod.desktop
xscreensaver-screensaver-bsod: /usr/share/man/man6/bsod.6x.gz
xscreensaver-screensaver-bsod: /usr/share/xscreensaver/config/bsod.xml
$

dlocate liefert im Allgemeinen ein identisches Ergebnis zu dpkg bzw. dpkg-query. Da dlocate zur Suche auf grep zurückgreift, hat es mitunter eine höhere Trefferrate. Nachfolgendes Beispiel zeigt die Suche nach dem absoluten Pfad /bsod. – sowohl für dpkg, als auch zu dlocate im Vergleich.

Suche nach der Pfadangabe /bsod. 

$ dpkg -S /bsod.
dpkg-query: Kein Pfad gefunden, der auf Muster /bsod. passt
$ dlocate -S /bsod.
xscreensaver-screensaver-bsod: /usr/share/applications/screensavers/bsod.desktop
xscreensaver-screensaver-bsod: /usr/share/man/man6/bsod.6x.gz
xscreensaver-screensaver-bsod: /usr/share/xscreensaver/config/bsod.xml
$

8.24.2. Suche in noch nicht installierten Paketen

Dafür gibt es das Werkzeug apt-file aus dem gleichnamigen Debian-Paket. Grundlage seiner Aktivitäten ist die Liste der Paketquellen in /etc/apt/sources.list/ und die Liste der Dateien in jedem der Pakete, die von dort bezogen werden. Diese Inhaltslisten haben typischerweise einen Dateinamen der Form Contents-<Architektur>.<Kompressions-Suffix> und sind selbst komprimiert bis zu 50 MB groß. Seit apt-file Version 3.0 aufwärts werden diese bei einer Aktualisierung der Paketlisten (z.B. mittels apt update) automatisch mitheruntergeladen und wie die normalen Paketlisten im Verzeichnis /var/lib/apt/lists/ abgespeichert. (Ist apt-file hingegen nicht installiert, so lädt apt update diese Inhaltslisten auch nicht herunter.)

Liste der Paketinhaltslisten anzeigen (apt-file Version 3.0 aufwärts). 

$ ls /var/lib/apt/lists/*Contents*
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye_contrib_Contents-amd64.lz4
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye_main_Contents-amd64.lz4
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye_non-free_Contents-amd64.lz4
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye-secrutiy_main_Contents-amd64.diff_Index
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye-security_main_Contents-amd64.lz4
/var/lib/apt/lists/debian.ethz.ch_debian_dists_bullseye-security_non-free_Contents-amd64.lz4
$

apt-file Version 3.0 und höher ist seit Debian 9 Stretch mit dabei. Bei älteren Version von apt-file, wie z.B. auf Debian 8 Jessie und früher musste man diese Paketinhaltslisten mittels apt-file update stets manuell aktualisieren. Außerdem sie wurden auch in einem anderen Verzeichnis abgespeichert, nämlich in /var/lib/apt/lists/.

apt-file verfügt über eine ganze Reihe von Unterkommandos und Schaltern, von denen wir Ihnen die wichtigsten vorstellen. Weitere Schalter entnehmen Sie bitte der Manpage zum Programm.

search Suchmuster
Suche danach, in welchem Paket die als Suchmuster angegebene Datei enthalten ist. Ergebnis ist eine Liste aller Pakete, die das angegebene Suchmuster enthalten. apt-file sucht dabei nur nach Dateinamen, nicht jedoch nach Verzeichnisnamen.
find Suchmuster
Alias für den Schalter search.
list Paketname
gibt den Paketinhalt aus, auf den das Suchmuster passt. Diese Aktion ist sehr ähnlich zum Aufruf dpkg -L, nur das hier die Pakete noch nicht installiert sein müssen.
show Paketname
Alias für den Schalter list.
-a (Langform --architecture)
Einschränkung der Suche auf die angegebene Architektur (siehe Abschnitt 1.2, „Debian-Architekturen“).
-D (Langform --from-deb)
sucht nach Vorkommen aller Dateien in der als Parameter angegebenen .deb-Datei. Nützlich, um nach Dateikonflikten mit anderen Paketen zu suchen.
-f (Langform --from-file)
sucht nach dem Vorkommen aller Suchmuster, die in der angegebenen Textdatei stehen.
-i (Langform --ignore-case)
Suche unabhängig von Groß- und Kleinschreibung des Suchmusters.
-l (Langform --package-only)
Das Ergebnis ist nur der Paketname, auf den das Suchmuster passt. Dateinamen werden nicht berücksichtigt.
-v (Langform --verbose)
Schalter für eine ausführliche Ausgabe. Damit zeigt apt-file an, wo es seine Informationen herholt und wonach es genau sucht. Die Ausgabe ist spätestens seit Version 3.0 sehr verbos und eigentlich nur noch zum Debuggen gedacht, aber dennoch nützlich.
-x (Langform --regexp)
interpretiert das Suchmuster als Regulären Ausdruck, so wie ihn Perl versteht (PCRE). Ohne diesen Schalter fasst apt-file das Suchmuster als schlichte Zeichenkette auf.

Etwas nachteilig an apt-file ist, dass es in der Standardeinstellung alle Paketquellen durchsucht und Ihnen dabei nicht anzeigt, in welcher davon es den Treffer gefunden hat. Das führt zu Verwirrung, bspw. wenn in der Liste der Paketquellen die Veröffentlichungen stable und stable-backports eingetragen sind. apt-file verfügt bislang nicht über einen Schalter, um die Ausgabe dementsprechend zu beeinflussen.

Aktuelle Strukturdatenbank

Um mit apt-file arbeiten zu können, müssen nach der Installation des Paketes mindestens einmal die Paketinhaltslisten aktualisiert werden. Das nehmen Sie entweder mittels apt-file update vor, oder indem Sie die Paketlisten aktualisieren — z.B. mittels apt update oder apt-get update. Bei Versionen von apt-file vor Version 3.0 geht dies noch nicht automatisch und nur mittels apt-file update.

Unterbleibt dieser Schritt, quittiert apt-file einen Aufruf zur Suche mit der Fehlermeldung »The cache is empty. You need to run "apt-file update" first.« (auf Deutsch: »Der Cache ist leer. Sie zuerst müssen "apt-file update" aufrufen.«)

Das nachfolgende Beispiel zeigt die Suche nach der Zeichenkette fping.

Suche über die Strukturdatenbank mittels apt-file

$ apt-file search fping
cacti: /usr/share/cacti/site/scripts/ss_fping.php
fping: /usr/bin/fping
fping: /usr/bin/fping6
fping: /usr/share/bug/fping
fping: /usr/share/doc/fping/NEWS.Debian.gz
fping: /usr/share/doc/fping/changelog.Debian.gz
fping: /usr/share/doc/fping/changelog.gz
fping: /usr/share/doc/fping/copyright
fping: /usr/share/lintian/overrides/fping
fping: /usr/share/man/man8/fping.8.gz
fping: /usr/share/man/man8/fping6.8.gz
icingaweb2-module-graphite: /usr/share/icingaweb2/modules/graphite/templates/fping.ini
mon: /usr/lib/mon/mon.d/fping.monitor
monitoring-plugins-standard: /usr/lib/nagios/plugins/check_fping
monitoring-plugins-standard: /usr/share/monitoring-plugins/templates-standard/fping.cfg
netdata-core: /usr/lib/netdata/conf.d/health.d/fping.conf
netdata-plugins-bash: /usr/lib/netdata/conf.d/fping.conf
netdata-plugins-bash: /usr/lib/netdata/plugins.d/fping.plugin
python3-nova: /usr/lib/python3/dist-packages/nova/api/openstack/compute/fping.py
python3-nova: /usr/lib/python3/dist-packages/nova/tests/functional/api_sample_tests/test_fping.py
smokeping: /usr/share/doc/smokeping/examples/config.fping-instances.gz
$

8.24.3. Suche über die Webseite des Debian-Projekts

Die Webseite bietet ebenfalls eine Suche anhand einer Zeichenfolge an (siehe Abbildung 8.20, „Suche nach mupdf über die Webseite“). Über verschiedene Auswahlfelder grenzen Sie ein, ob die Zeichenfolge auf feste Verzeichnisse passen soll, die mit einem Suchwort enden, oder Pakete mit Dateien beinhalten soll, die so benannt sind oder deren Namen das Suchwort enthalten. Desweiteren filtern Sie die Suchergebnisse nach der gewünschten Veröffentlichung und Architektur (siehe dazu Abschnitt 2.10, „Veröffentlichungen“ und Abschnitt 1.2, „Debian-Architekturen“).

Abbildung 8.20. Suche nach mupdf über die Webseite

werkzeuge/paketoperationen/paketsuche-web1.png

Die Abbildung 8.21, „Suche nach der Zeichenkette mupdf über die Webseite des Debian-Projekts (Suchergebnis)“ zeigt das Suchergebnis für die Veröffentlichung Bullseye, welches hier recht lang ausfällt. Die Treffer zeigen das Paket mupdf samt der dazu gefundenen Dateien mit dem Suchmuster. Klicken Sie auf einen der Links zwischen dem Suchfeld und dem Suchergebnis, schränken Sie die Suche anhand der gewählten Veröffentlichung bzw. Architektur weiter ein.

Abbildung 8.21. Suche nach der Zeichenkette mupdf über die Webseite des Debian-Projekts (Suchergebnis)

werkzeuge/paketoperationen/paketsuche-web2.png