Linux / Commande whereis : trouver binaires, sources et manuels

whereis repère les fichiers binaires, les pages de manuel et les sources associés à un nom de commande. Dans l'implémentation util-linux, il cherche dans des emplacements système connus ainsi que dans des chemins issus notamment de PATH et MANPATH. Il ne parcourt pas tout le disque : un programme installé hors de ses chemins de recherche peut manquer au résultat.

La page de manuel de whereis dans util-linux décrit la recherche, les catégories et les options employées ici. Vérifiez votre installation avec whereis --help et man whereis, car les chemins effectifs et les variantes de commande dépendent du système.

Comprendre le résultat d'une recherche

La syntaxe est whereis [OPTION]... NOM.... Par défaut, l'outil essaie de localiser les trois catégories pour chaque nom : exécutable, source et documentation. Un résultat peut ne contenir qu'une ou deux catégories ; l'absence de source installée est courante sur un système qui n'a que les paquets binaires.

whereis ls
whereis bash ssh

Une sortie possible pour le premier appel ressemble à ceci ; les chemins réels et le nombre de résultats varient :

ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

Le premier chemin désigne un exécutable et le second une page de manuel compressée. L'étiquette ls: identifie le nom recherché. Elle ne signifie pas que le shell exécute nécessairement ce premier fichier : un alias ou une fonction peut intervenir, et whereis n'est pas le mécanisme de résolution du shell.

Limiter la recherche aux binaires, aux manuels ou aux sources

Les options -b, -m et -s sélectionnent respectivement les binaires, les pages de manuel et les sources. Sans restriction, les trois catégories sont recherchées. Plusieurs restrictions peuvent être combinées et s'appliquent aux noms qui les suivent.

whereis -b ls
whereis -m ls
whereis -s ls
whereis -bm ls

Les deux premières commandes doivent montrer seulement les emplacements de leur catégorie lorsqu'ils existent. whereis -s ls peut afficher uniquement ls: si aucun source correspondant n'est installé dans les chemins parcourus. -bm demande les binaires et la documentation ensemble. Un résultat vide dans une catégorie ne prouve pas que le logiciel ou son code source n'existe nulle part.

Sur la ligne de commande whereis -bm ls tr -m gcc, l'outil cherche binaires et manuels pour ls et tr, puis seulement des manuels pour gcc. Une nouvelle restriction change le masque pour les noms suivants. Cette règle évite de croire qu'une option en fin de commande modifie rétroactivement les noms précédents.

Voir les chemins réellement parcourus

Dans util-linux, -l affiche la liste des lieux de recherche effectifs. C'est le premier contrôle à faire lorsqu'une installation n'apparaît pas :

whereis -l
printf '%s\n' "$PATH"
printf '%s\n' "${MANPATH-}"

whereis essaie des chemins compilés dans l'outil et tient aussi compte de PATH et MANPATH. La liste obtenue avec -l montre ce que votre version utilise réellement ; PATH seul ne raconte donc pas toute la recherche. MANPATH peut être vide ou absent alors que des chemins de manuel sont tout de même connus.

Pour comparer avec la résolution du shell courant, exécutez séparément command -v ls ou type -a ls. Si les chemins diffèrent, vérifiez les alias, les fonctions, l'ordre de PATH et les catégories affichées. La commande which et la recherche dans PATH explique cette distinction en détail.

Ajouter un emplacement de recherche précis

Les options -B, -M et -S remplacent les listes de recherche des binaires, manuels et sources pour les noms suivants. Chacune accepte une liste de répertoires séparés par des espaces, puis exige -f pour signaler la fin de cette liste et le début des noms. Oublier -f peut faire interpréter le nom du programme comme un autre répertoire.

whereis -b -B /usr/local/bin /opt/outils/bin -f monoutil
whereis -m -M /usr/local/share/man -f monoutil

Ces chemins sont des exemples : utilisez seulement les emplacements qui existent chez vous. Le premier appel cherche monoutil dans les deux dossiers binaires indiqués ; le second limite la recherche de sa documentation au dossier donné. Ajoutez -l pour contrôler la liste appliquée. Un nom précédé d'un chemin est réduit à son dernier composant dans l'implémentation décrite par le manuel : fournissez normalement le nom de la commande, pas son chemin complet.

Pour un diagnostic sans toucher à une installation, vous pouvez d'abord créer un répertoire de pratique et y placer un petit exécutable à un nom unique, puis rechercher uniquement ce dossier avec -B. Le test doit se faire sur un Linux où whereis est disponible ; il ne prouve rien sur les chemins de production tant que vous n'avez pas répété la recherche avec leurs vrais dossiers.

Sélectionner les entrées inhabituelles

Dans util-linux, -u n'est pas un simple filtre « fichier manquant ». Il affiche les noms qui n'ont pas exactement une entrée dans chaque catégorie explicitement demandée. Avec -m -u, un nom sans manuel ou avec plusieurs manuels est donc inhabituel. Le diagnostic dépend des chemins recherchés et n'est pas une vérification complète de l'installation.

whereis -m -u ls ssh

Ne concluez pas que les programmes omis sont documentés sur toutes les machines : cette sortie ne parle que des noms et chemins évalués par cet appel. Vérifiez un cas précis avec whereis -m NOM, puis ouvrez la documentation avec man NOM si elle est disponible.

Choisir le bon outil de localisation

Outil Recherche Limite principale
whereis Binaires, sources et manuels dans des emplacements connus. Ne parcourt pas arbitrairement tous les dossiers.
which Exécutables accessibles par PATH selon sa variante. Peut ignorer la résolution des alias, fonctions et commandes internes.
type / command -v Interprétation d'un nom par le shell courant. Ne cherche pas tous les manuels ou sources.
find Parcourt les dossiers choisis selon vos critères. Il faut choisir un point de départ et gérer droits et coût du parcours.

Utilisez whereis pour relier rapidement un nom à ses fichiers habituels, puis l'outil qui répond à votre question restante. Si vous cherchez un fichier créé dans votre dossier personnel ou une installation inhabituelle, choisissez un point de départ connu pour find ; une sortie vide de whereis n'est pas un inventaire de tout le disque.

Questions fréquentes

whereis recherche-t-il seulement dans PATH ?

Non. L'implémentation util-linux combine des emplacements connus avec des informations provenant notamment de PATH et MANPATH. whereis -l montre ses chemins effectifs.

Pourquoi la catégorie source est-elle vide ?

Les sources peuvent ne pas être installées, ou se trouver hors des chemins examinés. Une catégorie vide ne prouve pas que le projet n'a pas de code source.

Pourquoi faut-il -f après -B, -M ou -S ?

-f sépare la liste de répertoires des noms à trouver. Sans ce séparateur, l'outil peut continuer à interpréter les arguments comme des répertoires.

La référence des commandes Linux par tâche présente les autres outils utiles pour rechercher un exécutable ou un fichier.