it-swarm-eu.dev

Wie finde ich das Paket, das eine Datei bereitstellt?

Einfache Frage: Gibt es einen Shell-Befehl (oder eine GUI-Methode), die ich verwenden kann, wenn der Pfad zu einer Datei auf meinem System angegeben wird und 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?

460
David Z

Sie können den Befehl dpkg verwenden, um herauszufinden, welches installierte Paket eine Datei besitzt:

Aus man dpkg:

 - S, --search filename-search-pattern ... 
 Suche nach einem Dateinamen aus installierten Paketen. 

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 buntu Packages Search verwenden

427
Ressu

Der Befehl apt-file 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, ist apt-cache eine andere Option.

Gehen Sie wie folgt vor, um _apt-file_ zu installieren:

_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
_

Sehr viel benutzerfreundlicher ist jedoch die Verwendung der Website buntu Packages Search . Sie haben die Möglichkeit, den Inhalt von Paketen nach einem bestimmten Dateinamen zu durchsuchen.

235
jbowtie

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

apt-file list packagename
43
ptman

Sie können den Inhalt von Paketen, die in den verschiedenen Ubuntu-Versionen enthalten sind, auf der Website buntu Packages 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
moberley

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

dpkg verwenden:

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

apt-file verwenden:

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 Abschnitt Search the contents of packages.

enter image description here

Beispiel

enter image description here

13
A.B.

Dies ist eine Erweiterung zu Alexx Roches ausgezeichnete Antwort . Ich habe versucht, diese Antwort zu bearbeiten, aber sie wurde abgelehnt (allerdings nicht von Alexx)


Ich habe versucht, herauszufinden, was which auf meinem System installiert hat. Nach ein wenig Arbeit habe ich /usr/local/bin/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]) 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 nur 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 Skript apt-whatprovides funktioniert für Dateien, die sich auf Ihrem System befinden und nicht. Meinem System fehlte beispielsweise Dig, aber es hatte ping.

[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 Searching for ein vollständiger Pfad für ping (installiert) und nur der Binärname für Dig nicht installiert ist. Dies half mir herauszufinden, dass ich dnsutils installieren musste, ohne suchen zu müssen https://packages.ubuntu.com/#search_contents

3
Bruno Bronosky

Ich habe versucht, herauszufinden, was which auf meinem System installiert hat. 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
Alexx Roche

Ein Grund dafür könnte sein, dass Sie apt-get build-dep $PACKAGENAME ausführen können, wenn Sie Software kompilieren, für die bereits ein Ubuntu-Paket vorhanden ist. Damit werden alle Pakete installiert, die Sie zum Kompilieren von $PACKAGENAME benötigen.

2
Rory