Trouver à quel paquet appartient un fichier dans Ubuntu / Debian?

300

Je manque souvent un programme, une page de manuel ou un autre fichier lorsque je travaille sur mon système Ubuntu 8.04. Existe-t-il un moyen simple de rechercher quel paquet contient un fichier donné (qu'il soit déjà installé ou non)? Peut-être une option obscure pour apt ou dpkg?

Jay Conrod
la source
Idem sur Ubuntu: askubuntu.com/questions/481/…
Ciro Santilli a commencé
25
dpkg -S /path/to/filesi vous avez le paquet installé.
Zaz

Réponses:

247
apt-file search filename

ou

apt-file search /path/to/file


Pour installer apt-file, utilisez:

sudo apt-get install apt-file

Vous devrez mettre à jour sa base de données avant de pouvoir l'utiliser:

sudo apt-file update
John T
la source
7
FYI: apt-file semble dépendre de Contents-amd64.gz fourni par les référentiels. Et tous les dépôts tiers ne fournissent pas ce fichier.
Jokester
3
Cela n'a pas fonctionné pour moi. J'ai mis à jour la base de données mais elle ne renvoie rien. dpkg -Sfonctionne comme décrit ci-dessous.
Northys
404

(Debian / Ubuntu) Découvrez à quel paquet appartient un fichier :

dpkg -S /usr/bin/ls

'dpkg -S' correspond simplement à la chaîne que vous avez fournie, utilisez donc simplement 'ls' comme argument pour faire correspondre tout fichier d'un paquet contenant un 'ls' n'importe où dans le nom du fichier. C'est donc généralement une bonne idée d'utiliser un chemin absolu. Vous pouvez voir dans le deuxième exemple que 12 000 fichiers connus de dpkg correspondent à la chaîne nue 'ls'.

éclabousser
la source
33
Ce n'est que si les fichiers déjà installés
John T
19
Contrairement à apt-file, ceci trouve également le paquet dans un fichier s’il a été installé manuellement via dpkg -i!
tanius
4
Si vous obtenez dpkg-requête: aucun chemin trouvé modèle correspondant essayez ceci : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo Un
1
Bizarre, cela ne fonctionne pas pour moi: dpkg-query: no path found matching pattern /usr/bin/java, mais il y a un fichier à/usr/bin/java
nnyby
@nnyby Voir le commentaire de Pablo A
vog
19

packages.debian.org est ce que j'utilise toujours pour accomplir cette tâche. Il est supérieur à apt-file car il peut également trouver des parties de noms de fichiers. Il est également lié à la liste principale des packages, qui répertorie les descriptions, les bogues, etc. En résumé, un bon site Web. Pas aussi utile en ligne de commande, mais quand même très utile.

Pour plus de rapidité, j'ai mis en favori l'URL:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

dans Firefox, et ajouté "debfind" en tant que mot clé (cliquez sur "plus" dans le gestionnaire de favoris avec ce titre en hilighted), pour que je puisse simplement taper "debfind" et cela fonctionnera. Vous pouvez changer de "suite" d'Unstable à stable ou à tester si vous voulez, pour d'autres versions de la distribution.

Jamuraa
la source
Cela ne fonctionne pas avec les dépôts personnalisés cependant.
Ctrl-C
Mauvais choix en matière d'automatisation.
Alexander Shcheblikin
11

Vous pouvez également utiliser dlocate. De la page de manuel;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.
Jérémie
la source
1
dlocateest aussi ma méthode préférée, très fiable.
Avio
2
@Avio dlocatene trouve pas de paquet récemment installé à moins que vous ne l' exécutiez en sudo update-dlocatedbpremier. La commande est automatiquement exécutée quotidiennement dans /etc/cron.daily/dlocate
jarno le
4

J'ai trouvé Wajig ...

wajig whichpackage /path/to/file 

par exemple.

wajig whichpackage /etc/apt/sources.list

Wajig est un outil de ligne de commande ou de console très pratique qui englobe tous les bienfaits d'apt-get, dpkg, que vous n'avez jamais voulu apprendre. .

Pour installer wajig, utilisez:

apt-get install wajig

Cette commande 'quel paquet' dépend elle-même d'apt-file

vous aurez toujours besoin de mettre à jour sa base de données avant de pouvoir l'utiliser: - Je ne sais pas encore si wajig update qui effectue une mise à jour d'apt-get met également à jour le cache de fichiers, mais je suppose que c'est possible.

sudo wajig update

sudo apt-file update

(et super vache, Pâques?!)

pete_m
la source
2

Simmilar à la réponse de jamuraa pour Debian, vous pouvez également aller sur http://packages.ubuntu.com/ pour Ubuntu. Vous devrez faire défiler un peu pour trouver la zone de recherche "Rechercher le contenu des paquets" où vous pouvez entrer le chemin du fichier.

kiri
la source
Maintenant, si seulement Raspbian en avait aussi un :)
XTL
0

Essayez de chercher des fichiers en utilisant http://www.kodkast.com/applications/find-which-package-file-belongs-to

Il s'agit d'une application permettant de rechercher des fichiers contenus dans différents packages rpms / linux. Elle est très utile lorsque vous n'avez même pas installé le rpm sur votre machine.

Ravi Agarwal
la source
Downvote: le lien est brisé et le lien semble être pour les paquets RPM en premier lieu.
triplee
0

Le paquet commande-non-trouvé vous donne des conseils sur les commandes potentielles et le nom du paquet debian. Cela fonctionne en tapant la commande dans le shell bash et en regardant sa sortie.

Par exemple, si le nom de la commande est connu:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

et si la commande n'est pas connue, certaines suppositions sont appliquées:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found
erwing
la source
Cela ne fonctionne cependant pas pour les fichiers arbitraires, comme l'OP demandé.
un CVn
Ceci est une astuce problématique si le programme fait des choses néfastes et est installé. Ajouter -hou --helpà la fin aiderait un peu. Si -hje voulais ajouter cela à la fin, je recommanderais cela, mais ce n’est quand même pas un bon moyen de réaliser ce que le PO demande.
Dr Beco