which, whereis et locate sous Linux : 3 commandes pour trouver un emplacement (chemin)

Mention d'affiliation v3.1
Mention d'affiliation v3.2 (mobile)
Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-10-07
Commandes de recherchewhichwhereislocate

Il arrive de vouloir modifier httpd.conf sans savoir où se trouve le fichier, ou d'avoir une commande du même nom à deux endroits sans savoir laquelle s'exécute. La commande Linux which trouve le fichier réellement exécuté, la commande Linux whereis trouve l'exécutable, le dossier de configuration et le manuel, et la commande locate trouve tous les chemins qui contiennent le nom. Cet article compare les trois commandes dans un tableau et vous permet de les taper vous-même sur un serveur virtuel dans le navigateur.

Sous AlmaLinux 9.8, which fait partie du paquet which 2.21 et whereis du paquet util-linux 2.37.4 : les deux sont disponibles d'emblée, tandis que locate demande d'installer à part le paquet mlocate 0.26.

✅ Différences entre which · whereis · locate

Les trois commandes ne cherchent pas au même endroit. which et whereis fouillent sur place des dossiers déterminés, tandis que locate cherche le nom dans une liste de fichiers préparée à l'avance (DB).

CommandeCe qu'elle trouveOù elle chercheFichier nouvellement créé
whichLe fichier de commande exécuté, et les aliasDossiers inscrits dans le PATHTrouvé tout de suite
whereisExécutable · dossier de configuration · manuelDossiers déterminés comme /usr/bin · /etc · /usr/share/manTrouvé tout de suite
locateTous les fichiers et dossiers qui contiennent le nomDB préparée à l'avance (/var/lib/mlocate/mlocate.db)Trouvé après updatedb

En cherchant le même httpd avec which et whereis, la différence saute aux yeux.

~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gz

locate affiche tous les chemins dès qu'une partie du nom correspond : en tapant [locate httpd.conf], vous obtenez, en plus du fichier de configuration, le manuel (httpd.conf.5.gz) et les copies de sauvegarde.

Sur le serveur virtuel ci-dessous, choisissez which, whereis ou locate à gauche pour changer les puces ; un clic sur une puce saisit la commande. Vous pouvez aussi la taper au clavier.

Simulateur des commandes de localisationAlmaLinux 9.8
[root@server work]#
Fonctionne uniquement dans votre navigateur et ne touche à aucun vrai serveur. Choisissez une commande à gauche : les puces en dessous changent, et un clic sur une puce saisit la commande. Cherchez le même httpd avec les trois commandes pour comparer les résultats ; avec locate, créez un nouveau fichier puis cherchez-le avant et après updatedb. Si vous vous emmêlez, cliquez sur [Recommencer] ; tapez uknew help pour voir les commandes disponibles.

Pour chercher des fichiers non pas par nom mais par taille ou date de modification, utilisez la commande find, et le chemin du dossier où vous vous trouvez s'affiche avec la commande pwd.

✅ La commande Linux which

which parcourt dans l'ordre les dossiers du PATH et affiche le premier exécutable trouvé. C'est ce fichier qui s'exécute quand vous tapez la commande.

Sous AlmaLinux, bash transmet la liste des alias à which : pour une commande dotée d'un alias, l'alias et le vrai fichier s'affichent ensemble. Si elle ne se trouve nulle part dans le PATH, [no commande in (PATH)] s'affiche.

~]# which ll
alias ll='ls -l --color=auto'
	/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)

En pratique, la seule option est -a. Quand le même nom se trouve dans deux dossiers du PATH, elle les affiche tous, et c'est le premier qui s'exécute réellement.

~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/ping

Sous AlmaLinux 9.8, /usr/sbin/ping est un lien vers /usr/bin/ping, le résultat est donc le même. Un programme installé à la main dans /usr/local/bin s'exécute avant celui de /usr/bin, à cause de l'ordre du PATH.

[which cd] affiche /usr/bin/cd, mais quand vous tapez cd dans le shell, ce n'est pas ce fichier qui s'exécute : c'est la commande interne du shell. Pour savoir si une commande est interne, utilisez [type cd], qui affiche [cd is a shell builtin].

✅ La commande Linux whereis

whereis cherche ensemble l'exécutable et le manuel à partir du nom de la commande. Sans tenir compte du PATH, il fouille des dossiers déterminés comme /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share : un dossier de configuration du même nom (/etc/httpd) apparaît donc aussi.

OptionDescription
-bExécutables seulement. Pour httpd : /usr/sbin/httpd et /usr/lib64/httpd · /etc/httpd · /usr/share/httpd
-mManuels seulement (/usr/share/man · /usr/share/info)
-sSources seulement. Sur une installation par défaut d'AlmaLinux 9.8, seul le nom s'affiche, comme [httpd:]
-lListe des dossiers fouillés par whereis
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gz

S'il ne trouve rien, seul le nom s'affiche, comme [htop:]. which renvoie le code de sortie 1 en cas d'échec et whereis renvoie 0 : pour vérifier dans un script si un programme est installé, utilisez donc which.

✅ La commande Linux locate

locate ne fouille pas le disque : il cherche le nom dans une DB préparée à l'avance. C'est rapide, mais il ne trouve pas les fichiers créés après la construction de la DB.

~]# dnf -y install mlocate
~]# updatedb

Juste après l'installation, la DB n'existe pas encore et vous obtenez [locate: can not stat () `/var/lib/mlocate/mlocate.db’: No such file or directory] ; un seul lancement d'updatedb la crée. Ensuite, mlocate-updatedb.timer reconstruit la DB une fois par jour.

Un fichier nouvellement créé n'apparaît qu'après updatedb, et un fichier supprimé continue d'apparaître jusque-là. Pour ne voir que les fichiers qui existent maintenant, ajoutez -e.

~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txt

Le PRUNEPATHS de /etc/updatedb.conf contient /tmp · /var/tmp · /mnt · /media : les fichiers de ces dossiers n'apparaissent pas, même après updatedb.

🔲 Options de la commande locate

OptionDescription
-iRecherche sans tenir compte de la casse
-cSeulement le nombre de résultats au lieu des chemins
-l= -nAvec un nombre après, seulement ce nombre de résultats. -l 3
-bRecherche seulement dans le nom de fichier en fin de chemin
-eÉcarte les fichiers présents dans la DB mais qui n'existent plus
-SInfos sur la DB (dossiers · fichiers · taille)
-rRecherche par expression régulière. locate -r “httpd.conf$”

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 10   +   7   =