Question assez simple: existe-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, il me dit quel paquet y est placé? En supposant que le fichier provient en fait d'un package, c'est-à-dire.
Question bonus: que se passe-t-il s'il s'agit d'un fichier qui n'est pas installé sur mon système? Existe-t-il, disons, un site Web qui me permettra de rechercher un fichier et de voir quels paquets, le cas échéant, le fournissent?
Vous pouvez utiliser la commande dpkg
pour savoir quel package installé est propriétaire d'un fichier:
De man dpkg
:
- S, --search filename-search-pattern ... Recherchez un nom de fichier dans les paquets installés.
Exemple:
$ dpkg -S /bin/ls
coreutils: /bin/ls
Vous pouvez effectuer une recherche avec un chemin complet ou uniquement avec le nom du fichier.
Si vous souhaitez rechercher des fichiers non encore installés sur votre ordinateur, vous pouvez utiliser le buntu Packages Search
La commande apt-file
peut le faire pour vous à partir de la ligne de commande. Je l'utilise fréquemment lors de la construction de paquets à partir des sources. Pour les fichiers fournis par les packages déjà installés sur votre système, apt-cache
est un autre choix.
Pour installer apt-file
, procédez comme suit:
Sudo apt-get install apt-file
Ensuite, vous devez mettre à jour sa base de données:
apt-file update
Et, 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 méthode beaucoup plus conviviale consiste à utiliser le site Web Recherche de paquets Ubunt . Ils ont une option pour "rechercher le contenu des paquets" pour un nom de fichier spécifique.
Il existe également apt-file pour rechercher des fichiers dans des packages qui ne sont pas installés. Par exemple:
apt-file list packagename
Vous pouvez rechercher le contenu des paquets inclus dans les différentes versions d'Ubuntu sur le site Web buntu Packages . Recherchez sous le titre " Rechercher dans le contenu des packages ".
Par exemple, voici les résultats de la recherche pour libnss3.so dans lucid (10.04):
Vous voulez dire quel paquet et pas quelle application. L’application est votre gestionnaire de paquets, par exemple. 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
Ceci est une extension de 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 localiser ce qui était installé which
sur mon système. Après un peu de 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 choses installées, vous pouvez simplement utiliser:
apt-file search $(realpath $(which THING)) | grep 'THING$'
Pour les choses qui ne sont pas installées, 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 voici ce qui en a résulté:
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 que le nom binaire pour Dig
non installé. Cela m'a aidé à découvrir que je devais installer dnsutils
sans avoir besoin d'aller chercher https://packages.ubuntu.com/#search_contents
J'essayais de localiser ce qui était installé which
sur mon système. Après un peu de 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$'
Si vous compilez un logiciel contenant déjà un paquet Ubuntu, vous pouvez exécuter apt-get build-dep $PACKAGENAME
. Cela installera tous les paquets dont vous avez besoin pour compiler $PACKAGENAME
.