Comment savoir de quel paquet Debian provient un fichier?
Plusieurs applications de Debian effectuent cette tâche. vérifiez cette page pour obtenir une description. J'en mentionnerai deux, apt-file
et dlocate
.
apt-file
recherche 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é.
dlocate
est une alternative rapide à dpkg -L
(la commande qui répertorie le contenu du paquet) et, dans ce cas, il 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 packages.debian.org serveur (le ) Rechercher le contenu des paquets section).
apt-file
C'est une bonne idée de mettre à jour d'abord:
Sudo apt-get update
Voir à quoi sert apt-file
:
apt-cache show apt-file
Installez-le:
Sudo apt-get install apt-file
Lire les données des référentiels (cela fonctionne aussi sans Sudo
mais crée le cache de l'utilisateur ensuite; avec Sudo
le cache est à l'échelle du système):
Sudo apt-file update
Effectuer une recherche. Dans cet exemple, nous voulons savoir dans quel package xrandr
exécutable est:
apt-file search xrandr
Il répertorie de nombreux paquets avec unxrandr
, lxrandr.mo
ou source_lxrandr.py
. Pas très utile dans notre cas. Recherche plus intelligente:
apt-file search -x /xrandr$
($
indique 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 loin. Courir:
apt-cache show x11-xserver-utils
Bingo! C'est le paquet.
user@Host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Où bash est le nom du paquet.
Une autre alternative:
$ dpkg -S /bin/bash
bash: /bin/bash
Sur mon Ubuntu au moins, les deux semblent être dans le paquet dpkg
, donc aucun avantage réel pour aucun en particulier ...
Les fichiers générés par l'installation ne seront pas trouvés par dpkg -S
, comme mentionné à: https://askubuntu.com/a/667227/52975
Par exemple, /bin/nc
apparaî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 est dû au fait que /bin/nc
est généré par l'appel update-alternatives
dans le script postinst exécuté après l'installation.
Cela fonctionne comme ceci car une autre version de /bin/nc
est fournie par le paquetage netcat-traditional
.
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)"
N'étant pas familier avec Debian, j'ai été dérouté 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:~$