Wie finde ich heraus, welches Paket eine Datei besitzt?


Antworten:


44

In Debian gibt es mehrere Dienstprogramme, die diese Aufgabe ausführen. Auf dieser Seite finden Sie eine Beschreibung. Ich werde zwei davon erwähnen, apt-fileund dlocate.

apt-fileDurchsucht den internen Cache, sodass Sie nicht alle zu durchsuchenden Pakete installieren können. Nachstehend finden Sie eine ausführlichere Anleitung.

dlocateist eine schnelle Alternative zu dpkg -L(dem Befehl, der den Paketinhalt auflistet) und durchsucht daher nur installierte Pakete. Die Suche wird durchgeführt von dlocate -S file.name.

Sie können auch Pakete online mit Such packages.debian.org Server (der Suche den Inhalt der Pakete Abschnitt).


Installieren und verwenden apt-file

Es ist eine gute Idee, zuerst zu aktualisieren:

sudo apt-get update

Sehen Sie, wofür apt-fileist:

apt-cache show apt-file

Es installieren:

sudo apt-get install apt-file

Daten aus Repositorys lesen (dies funktioniert auch ohne sudo, erstellt dann aber den Cache des Benutzers; mit sudodem Cache wird systemweit gearbeitet):

sudo apt-file update

Suche durchführen. In diesem Beispiel möchten wir wissen, in welchem ​​Paket sich die xrandrausführbare Datei befindet:

apt-file search xrandr

Es listet viele Pakete mit unxrandr, lxrandr.mooder source_lxrandr.py. In unserem Fall nicht sehr nützlich. Klügere Suche:

apt-file search -x /xrandr$

( $bezeichnet das Zeilenende). Beispielausgabe:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Das erste Ergebnis sieht nicht nach ausführbar aus, das zweite nach ausführbar. Wir können weiter untersuchen. Lauf:

apt-cache show x11-xserver-utils

Bingo! Das ist das Paket.


Der erste Link in dieser Antwort ( debianhelp.co.uk/findfile.htm ) scheint jetzt nicht mehr zu funktionieren .
Rogpeppe

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Wobei bash der Paketname ist.


4
Diese Antwort ist weitaus besser als die akzeptierte!
Bex

Richtig. Es ist bedauerlich, dass die "akzeptierte Antwort" ein grünes Häkchen erhält, das auch "richtige Antwort" bedeutet. In diesem Fall fehlt die akzeptierte Antwort auf dpkg-query -SUND es sendet Sie auf dem falschen Weg der Installation von optionalen Paketen ..
Scott Prive

42

Eine andere Alternative:

$ dpkg -S /bin/bash
bash: /bin/bash

Zumindest auf meinem Ubuntu scheinen beide im dpkgPaket zu sein, also kein wirklicher Vorteil für einen bestimmten ...


14

Von der Installation generierte Dateien werden von nicht gefunden dpkg -S, wie unter https://askubuntu.com/a/667227/52975 angegeben

Wird beispielsweise /bin/ncangezeigt, wenn Sie das Paket installieren netcat-openbsd.

Aber auf:

dpkg -S /bin/nc

wir bekommen dpkg-query: no path found matching pattern /bin/nc.

Dies /bin/ncliegt daran, dass der update-alternativesAufruf im postinst-Skript generiert wird, das nach der Installation ausgeführt wird.

Das funktioniert so, weil /bin/ncdas netcat-traditionalPaket eine andere Version von bereitstellt.

Ich glaube nicht, dass es einen allgemeinen Weg gibt, solche generierten Dateien zu finden. Im speziellen Fall alternativer Symlinks können wir dem Link einfach folgen mit readlink -f:

dpkg -S "$(readlink -f /bin/nc)"

2

Da ich mit Debian nicht vertraut war, war ich verblüfft, als ich dies versuchte:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Ein bisschen Nachforschung und ich fand das Paket:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.