Comment trouver le paquet qui fournit un fichier?

373

Assez simple question: y a-t-il une commande shell (ou une méthode graphique) que je peux utiliser, étant donné le chemin d'accès à un fichier sur mon système, me dit quel paquet l'a mise? En supposant que le fichier provient bien d’un paquet, c’est.

Question bonus: et si c'est un fichier qui n'est pas installé sur mon système? Existe-t-il, par exemple, un site Web qui me permettra de rechercher un fichier et de voir quels paquets le fournissent, le cas échéant?

    
posée David Z 30.07.2010 - 10:10
la source

8 réponses

350

Vous pouvez utiliser la commande dpkg pour savoir quel package installé possède un fichier:

De man dpkg :

-S, --search filename-search-pattern...
                  Search for a filename from installed packages.

Exemple:

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

Vous pouvez effectuer une recherche avec un chemin complet ou simplement avec le nom de fichier.

Si vous souhaitez rechercher des fichiers qui ne sont pas encore installés sur votre ordinateur, vous pouvez utiliser la recherche de packages Ubuntu

    
réponse donnée Ressu 30.07.2010 - 10:42
la source
181

La commande apt-file peut le faire à partir de la ligne de commande. Je l'utilise fréquemment lors de la création de paquets à partir de sources. Pour les fichiers fournis par les packages déjà installés sur votre système, apt-cache est un autre exemple. choix.

Pour installer apt-file , faites:

sudo apt-get install apt-file

Ensuite, vous devez mettre à jour sa base de données:

apt-file update

Enfin, recherchez le fichier:

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

Cependant, une manière beaucoup plus conviviale consiste à utiliser le site Recherche de paquets Ubuntu . Ils ont la possibilité de "rechercher le contenu des paquets" pour un nom de fichier spécifique.

    
réponse donnée jbowtie 11.08.2010 - 04:43
la source
32

Il existe également apt-file pour rechercher des fichiers dans des paquets qui ne sont pas installés. Par exemple:

apt-file list packagename
    
réponse donnée ptman 30.07.2010 - 10:49
la source
16

Vous pouvez rechercher le contenu des packages inclus dans les différentes versions d’Ubuntu sur le site Web Packages Ubuntu . Regardez sous le titre " Recherchez le contenu des paquets ".

Par exemple, voici les résultats de la recherche pour libnss3.so dans lucid (10.04):

lien

    
réponse donnée moberley 11.08.2010 - 04:42
la source
10

Vous voulez dire quel paquet et pas quelle application. L'application est votre gestionnaire de paquets, par ex. Software Center .

Utilisation de dpkg :

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

Exemple

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

Utilisation de apt-file :

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

ou aussi possible:

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

Exemple

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

Ou en ligne ici , dans la section Search the contents of packages .

Exemple

    
réponse donnée A.B. 29.11.2015 - 16:57
la source
2

J'essayais de retrouver ce que which installé sur mon système. Après un petit travail, j'ai créé apt-whatprovides

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

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

Bien que pour la plupart des choses, vous pouvez simplement utiliser

apt-file search $(realpath $(which THING))|grep 'THING$'
    
réponse donnée Alexx Roche 17.03.2018 - 16:25
la source
2

Il s’agit d’une extension de l’excellente réponse d’Alexx Roche . J'ai essayé de modifier cette réponse, mais elle a été rejetée (mais pas par Alexx)

J'essayais de retrouver ce que which installé sur mon système. Après un petit travail, j'ai créé /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 $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Bien que pour la plupart des THING installés, vous pouvez simplement utiliser:

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

Pour les THING non installés, vous pouvez utiliser:

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

Le script apt-whatprovides fonctionne pour les fichiers qui sont et ne sont pas sur votre système. Par exemple, mon système manquait de dig mais avait ping , donc c'était ce qui en résultait:

pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

pi@raspberrypi:~ $ 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

Notez que Searching for est un chemin complet pour ping (installé) et juste le nom binaire pour dig non installé. Cela m'a aidé à découvrir que je devais installer dnsutils sans avoir à chercher lien

    
réponse donnée Bruno Bronosky 18.07.2018 - 07:45
la source
1

Une des raisons pour lesquelles vous pourriez avoir à le faire est que si vous compilez un logiciel qui contient déjà un package ubuntu, vous pouvez exécuter apt-get build-dep $PACKAGENAME . Cela installera tous les paquets dont vous avez besoin pour compiler $PACKAGENAME .

    
réponse donnée Rory 11.08.2010 - 21:31
la source

Lire d'autres questions sur les étiquettes