8.22. 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.22.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 aptsh mittels dpkg in allen installierten Paketen.

Suche nach dem Muster aptsh mittels dpkg

$ dpkg -S aptsh
aptsh: /usr/lib/aptsh/aptsh_ls
aptsh: /usr/share/doc/aptsh/changelog.gz
aptsh: /usr/share/man/man1/aptsh.1.gz
aptsh: /usr/share/doc/aptsh/copyright
aptsh: /usr/share/doc/aptsh
aptsh: /etc/aptsh.conf
aptsh: /usr/lib/aptsh/aptsh_printer
aptsh: /usr/bin/aptsh
aptsh: /usr/share/doc/aptsh/HOWTO.gz
aptsh: /usr/lib/aptsh/aptsh_rls
aptsh: /usr/lib/aptsh
$

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 /xara-gtk – sowohl für dpkg, als auch zu dlocate im Vergleich.

Suche nach der Pfadangabe /xara-gtk

$ dpkg -S /xara-gtk
dpkg-query: Kein Pfad gefunden, der auf Muster /xara-gtk passt
$ dlocate -S /xara-gtk
xara-gtk: /etc/xara-gtkrc-2.0
xara-gtk: /usr/share/menu/xara-gtk
xara-gtk: /usr/share/doc/xara-gtk
xara-gtk: /usr/share/doc/xara-gtk/copyright
xara-gtk: /usr/share/doc/xara-gtk/changelog.gz
$

8.22.2. Suche in noch nicht installierten Paketen

Dafür gibt es apt-file. 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. Letztere befindet sich im Verzeichnis /var/cache/apt/apt-file/.

Liste der Paketquellen anzeigen. 

$ ls /var/cache/apt/apt-file
ftp.de.debian.org_debian_dists_wheezy_contrib_Contents-i386.gz
ftp.de.debian.org_debian_dists_wheezy_main_Contents-i386.gz
ftp.de.debian.org_debian_dists_wheezy_non-free_Contents-i386.gz
httpredir.debian.org_debian_dists_wheezy_contrib_Contents-i386.gz
httpredir.debian.org_debian_dists_wheezy_main_Contents-i386.gz
httpredir.debian.org_debian_dists_wheezy_non-free_Contents-i386.gz
$

Sollte diese Liste noch nicht vorhanden sein, erhalten Sie diese mit dem Aufruf apt-file update. Danach bezieht apt-file ein durchaus größeres Archiv (20 MB) von den angegebenen Paketmirrors und legt diese Dateien im Verzeichnis /var/cache/apt/apt-file/ ab.

Im nachfolgenden Beispiel zu apt-file update wird der Paketmirror dynamisch ausgewählt. Hintergrundinformationen dazu finden Sie in Abschnitt 3.3, „/etc/apt/sources.list verstehen“ und Abschnitt 3.6.2, „Paketquellen über GeoIP auswählen“:

Suchdatenbank von APT aktualisieren. 

# apt-file update
Downloading complete file http://httpredir.debian.org/debian/dists/wheezy/main/Contents-i386.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 20.6M  100 20.6M    0     0  3917k      0  0:00:05  0:00:05 --:--:-- 4111k
Downloading complete file http://httpredir.debian.org/debian/dists/wheezy/contrib/Contents-i386.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 73552  100 73552    0     0   302k      0 --:--:-- --:--:-- --:--:--  302k
Downloading complete file http://httpredir.debian.org/debian/dists/wheezy/non-free/Contents-i386.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  723k  100  723k    0     0  1428k      0 --:--:-- --:--:-- --:--:-- 1428k
Ignoring source without Contents File:
  http://security.debian.org/dists/wheezy/updates/main/Contents-i386.gz
Ignoring source without Contents File:
  http://security.debian.org/dists/wheezy/updates/contrib/Contents-i386.gz
Ignoring source without Contents File:
  http://security.debian.org/dists/wheezy/updates/non-free/Contents-i386.gz
#

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 Muster
Suche danach, in welchem Paket die als Muster angegebene Datei enthalten ist. Ergebnis ist eine Liste aller Pakete, die das angegebene Muster enthalten. apt-file sucht dabei nur nach Dateinamen, nicht jedoch nach Verzeichnisnamen.
find Muster
Alias für den Schalter search.
list Muster
gibt den Paketinhalt aus, auf den das Muster passt. Diese Aktion ist sehr ähnlich zum Aufruf dpkg -L, nur das hier die Pakete noch nicht installiert sein müssen.
show Muster
Alias für den Schalter list.
-a (Langform --architecture)
Einschränkung der Suche auf die angegebene Architektur (siehe Abschnitt 1.2, „Debian-Architekturen“).
-i (Langform --ignore-case)
Suche unabhängig von Groß- und Kleinschreibung des Musters.
-l (Langform --package-only)
Das Ergebnis ist nur der Paketname, auf den das Muster passt. Dateinamen werden nicht berücksichtigt.
-x (Langform --regexp)
interpretiert das Muster als Regulären Ausdruck, so wie ihn Perl versteht (PCRE). Ohne diesen Schalter wird das Muster als schlichte Zeichenkette aufgefasst.
-v (Langform --verbose)
verbose, d.h. die Ausgabe wird deutlich ausführlicher.

Etwas nachteilig an apt-file ist, dass es 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 vernünftig mit apt-file arbeiten zu können, empfehlen wir Ihnen, zuerst mit apt-file update die bestehende Dateiliste zu aktualisieren und danach darin zu stöbern. Damit nutzen Sie eine aktuelle Datenbasis.

Das nachfolgende Beispiel zeigt die Suche der Zeichenkette aptsh. Zusätzlich kommt der Schalter -v (Langform --verbose) zum Einsatz, um eine ausführlichere Ausgabe zu erhalten.

Suche über die Strukturdatenbank mittels apt-file

# apt-file -v show aptsh
D: Using cache directory /var/cache/apt/apt-file
D: reading sources file /etc/apt/sources.list
D: got 'deb http://httpredir.debian.org/debian/ wheezy main contrib non-free'
D: kept 'deb http://httpredir.debian.org/debian/ wheezy main contrib non-free'
D: got 'deb http://security.debian.org/ wheezy/updates main contrib non-free'
D: kept 'deb http://security.debian.org/ wheezy/updates main contrib non-free'
D: regexp: ^\s*(.*?)\s+(\S*/\S*aptsh\S*)\s*$
D: Search in \/var\/cache\/apt\/apt\-file\/httpredir\.debian\.org_debian_dists_wheezy_main_Contents\-i386\.gz using zfgrep  -- aptsh
.........
D: Search in \/var\/cache\/apt\/apt\-file\/httpredir\.debian\.org_debian_dists_wheezy_contrib_Contents\-i386\.gz using zfgrep  -- aptsh

D: Search in \/var\/cache\/apt\/apt\-file\/httpredir\.debian\.org_debian_dists_wheezy_non\-free_Contents\-i386\.gz using zfgrep  -- aptsh

aptsh: /etc/aptsh.conf
aptsh: /usr/bin/aptsh
aptsh: /usr/lib/aptsh/aptsh_ls
aptsh: /usr/lib/aptsh/aptsh_printer
aptsh: /usr/lib/aptsh/aptsh_rls
aptsh: /usr/share/doc/aptsh/HOWTO.gz
aptsh: /usr/share/doc/aptsh/changelog.gz
aptsh: /usr/share/doc/aptsh/copyright
aptsh: /usr/share/man/man1/aptsh.1.gz
#

8.22.3. Suche über die Webseite des Debian-Projekts

Die Webseite bietet ebenfalls eine Suche anhand einer Zeichenfolge an (siehe Abbildung 8.21, „Suche nach xara-gtk ü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.21. Suche nach xara-gtk über die Webseite

werkzeuge/paketoperationen/paketsuche-web1.png

Die Abbildung 8.22, „Suche nach dem Paket xara-gtk über die Webseite des Debian-Projekts (Suchergebnis)“ zeigt das Suchergebnis für die Veröffentlichung Wheezy, welches hier recht übersichtlich ausfällt. Beide Treffer zeigen das Paket xara-gtk 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.22. Suche nach dem Paket xara-gtk über die Webseite des Debian-Projekts (Suchergebnis)

werkzeuge/paketoperationen/paketsuche-web2.png