Comment savoir quel paquet possède un fichier?

Réponses:

44

Plusieurs applications de Debian effectuent cette tâche. consultez cette page pour une description. Je vais en mentionner deux, apt-fileet dlocate.

apt-filerecherche dans son cache interne, vous permettant ainsi de ne pas installer tous les packages que vous souhaitez rechercher. Vous trouverez ci-dessous un guide plus détaillé.

dlocateest une alternative rapide à dpkg -L(la commande qui répertorie le contenu du paquet) et, de ce fait, elle ne recherche que les paquets installés. La recherche est effectuée par dlocate -S file.name.

Vous pouvez aussi rechercher des paquets en ligne en utilisant le serveur packages.debian.org (la section Rechercher dans le contenu des paquets ).


Installation et utilisation apt-file

C'est une bonne idée de mettre à jour d'abord:

sudo apt-get update

Voir à quoi apt-filesert:

apt-cache show apt-file

Installez-le:

sudo apt-get install apt-file

Lire des données à partir de référentiels (cela fonctionne aussi sans, sudomais crée le cache de l'utilisateur ensuite; sudole cache étant à l'échelle du système):

sudo apt-file update

Effectuer une recherche. Dans cet exemple, nous voulons savoir dans quel package xrandrest exécutable:

apt-file search xrandr

Il répertorie de nombreux paquets avec unxrandr, lxrandr.moou source_lxrandr.py. Pas très utile dans notre cas. Recherche plus intelligente:

apt-file search -x /xrandr$

( $dénote la fin de la ligne). Exemple de sortie:

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

Le premier résultat ne ressemble pas à un exécutable, le second en est un. Nous pouvons enquêter plus avant. Courir:

apt-cache show x11-xserver-utils

Bingo! C'est le paquet.

Kamil Maciorowski
la source
Le premier lien dans cette réponse ( debianhelp.co.uk/findfile.htm ) semble être périmé maintenant.
rogpeppe
123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Où bash est le nom du paquet.

Un étudiant dans une université
la source
4
Cette réponse est bien meilleure que celle acceptée!
Bex
Correct. Il est regrettable que la "réponse acceptée" reçoive une coche verte, qui est également une indication de "bonne réponse". Dans ce cas, la réponse acceptée manque sur dpkg-query -SAND et vous renvoie le mauvais chemin d'installation de packages facultatifs ..
Scott Prive
42

Une autre alternative:

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

Sur mon Ubuntu au moins, les deux semblent être dans le dpkgpaquet, donc pas de réel avantage pour un particulier ...

Gert van den Berg
la source
14

Les fichiers générés par l'installation ne seront pas trouvés par dpkg -S, comme indiqué à l' adresse : https://askubuntu.com/a/667227/52975

Par exemple, /bin/ncapparaît lorsque vous installez le package netcat-openbsd.

Mais sur:

dpkg -S /bin/nc

nous obtenons dpkg-query: no path found matching pattern /bin/nc.

Cela se produit car /bin/ncest généré par l' update-alternativesappel du script postinst qui est exécuté après l'installation.

Cela fonctionne comme ceci car une autre version de /bin/ncest fournie par le netcat-traditionalpaquet.

Je ne pense pas qu'il existe un moyen général de trouver de tels fichiers générés. Dans le cas spécifique de liens symboliques alternatifs, nous pouvons simplement suivre le lien avec readlink -f:

dpkg -S "$(readlink -f /bin/nc)"
Ciro Santilli 事件 事件 2016 事件 法轮功
la source
2

N'étant pas familier avec Debian, j'ai été déconcerté lorsque j'ai essayé ceci:

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

Un peu d'enquête et j'ai trouvé le paquet:

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:~$ 
Philip Kearns
la source