Wie finde ich das Paket, das eine Datei bereitstellt?


Zur akzeptierten Antwort gehen


Einfache Frage: Gibt es einen Shell-Befehl (oder eine GUI-Methode), den ich verwenden kann, wenn der Pfad zu einer Datei auf meinem System angegeben wird und das mir sagt, welches Paket sie dort abgelegt hat? Vorausgesetzt, die Datei stammt tatsächlich aus einem Paket.

Bonusfrage: Was ist, wenn es sich um eine Datei handelt, die nicht auf meinem System installiert ist? Gibt es zum Beispiel eine Website, auf der ich eine Datei nachschlagen und sehen kann, welche Pakete sie gegebenenfalls bereitstellen?


492





2010-07-30




Anzahl der Antworten: 8


Mit dem dpkg Befehl können Sie herausfinden, welches installierte Paket eine Datei besitzt:

Von man dpkg :

-S, --search filename-search-pattern ...
                  Suchen Sie in installierten Paketen nach einem Dateinamen.

Beispiel:

 $ dpkg -S /bin/ls
coreutils: /bin/ls
 

Sie können entweder mit einem vollständigen Pfad oder nur mit dem Dateinamen suchen.

Wenn Sie nach Dateien suchen möchten, die noch nicht auf Ihrem Computer installiert sind, können Sie die Ubuntu-Paketsuche verwenden


451


2010-07-30

Der apt-file Befehl kann dies für Sie über die Befehlszeile ausführen. Ich benutze es häufig, wenn ich Pakete aus dem Quellcode baue. Für Dateien, die von Paketen bereitgestellt werden, die bereits auf Ihrem System installiert sind, apt-cache ist eine andere Wahl.

Gehen Sie zur Installation wie apt-file folgt vor:

 sudo apt-get install apt-file
 

Dann müssen Sie die Datenbank aktualisieren:

 apt-file update
 

Und schließlich durchsuchen Sie die Datei:

 $ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h
 

Ein viel benutzerfreundlicherer Weg ist jedoch die Verwendung der Ubuntu Packages Search- Website. Sie haben die Möglichkeit, den Inhalt von Paketen nach einem bestimmten Dateinamen zu durchsuchen.


247


2010-08-11

Es gibt auch apt-file zum Nachschlagen von Dateien in Paketen, die nicht installiert sind. Beispielsweise:

 apt-file list packagename
 

44


2010-07-30

Sie können den Inhalt von Paketen, die in den verschiedenen Ubuntu-Versionen enthalten sind, auf der Ubuntu Packages- Website durchsuchen . Suchen Sie unter der Überschrift " Suchen Sie den Inhalt von Paketen ".

Hier sind zum Beispiel die Suchergebnisse für libnss3.so in lucid (10.04):

http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&arch=any


17


2010-08-11

Sie meinen, welches Paket und nicht welche Anwendung. Die Anwendung ist Ihr Paketmanager, z Software Center .

Verwenden von dpkg :

 dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs
 

Beispiel

 % dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
 

Verwenden von apt-file :

 apt-file search /usr/lib/tracker/tracker-store
 

oder auch möglich:

 apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$
 

Beispiel

 % apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
 

Oder online hier im Bereich Search the contents of packages .


Bildbeschreibung hier eingeben

Beispiel


Bildbeschreibung hier eingeben


13


2015-11-29

Dies ist eine Erweiterung der hervorragenden Antwort von Alexx Roche . Ich habe versucht, diese Antwort zu bearbeiten, sie wurde jedoch abgelehnt (allerdings nicht von Alexx).


Ich habe versucht herauszufinden, was which auf meinem System installiert ist. Nach ein wenig Arbeit habe ich erstellt /usr/local/bin/apt-whatprovides

 #!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY="$(realpath $(which [email protected]) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="[email protected]"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"
 

Für die meisten installierten DINGE können Sie jedoch Folgendes verwenden:

 apt-file search $(realpath $(which THING)) | grep 'THING$'
 

Für DINGE, die nicht installiert sind, können Sie Folgendes verwenden:

 apt-file search THING | grep '/THING$'
 

Das apt-whatprovides Skript funktioniert für Dateien, die sich auf Ihrem System befinden und nicht. Zum Beispiel, mein System hat gefehlt, dig aber ping so war es, was daraus resultierte:

 [email protected]:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

[email protected]:~ $ apt-whatprovides dig
Searching for dig
dnsutils: /usr/bin/dig
epic4: /usr/share/epic4/script/dig
epic4-help: /usr/share/epic4/help/8_Scripts/dig
knot-dnsutils: /usr/bin/dig
 

Beachten Sie, dass dies Searching for ein vollständiger Pfad für ping (installiert) und nur der Binärname für dig nicht installiert ist. Dies hat mir geholfen herauszufinden, dass ich installieren musste, dnsutils ohne https://packages.ubuntu.com/#search_contents durchsuchen zu müssenhttps://packages.ubuntu.com/%23search_contents#search_contents


4


2018-07-18

Ich habe versucht herauszufinden, was which auf meinem System installiert ist. Nach ein wenig Arbeit habe ich apt-whatprovides erstellt

 #!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY=$(realpath $(which [email protected]))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}
 

Obwohl für die meisten Dinge, die Sie nur verwenden können

 apt-file search $(realpath $(which THING))|grep 'THING$'
 

3


2018-03-17

Möglicherweise müssen Sie dies tun, wenn Sie Software kompilieren, für die bereits ein Ubuntu-Paket vorhanden ist, das Sie ausführen können apt-get build-dep $PACKAGENAME . Damit werden alle Pakete installiert, die Sie kompilieren müssen $PACKAGENAME .


2


2010-08-11