Tu connais déjà find pour chercher des fichiers. Mais savais-tu qu'il existe des outils encore plus rapides pour localiser commandes et fichiers ? Dans cette leçon, nous allons explorer quatre utilitaires complémentaires : locate, which, whereis et type. Chacun a son用途 spécifique.
locate ne cherche pas directement sur le disque. Il utilise une base de données pré-construite, ce qui le rend extrêmement rapide. La base est mise à jour périodiquement (généralement via un cron).
# Installer locate (si pas présent)
sudo apt install mlocate # Debian/Ubuntu
sudo yum install mlocate # CentOS/RHEL
# Mettre à jour la base de données manuellement
sudo updatedb# Rechercher tous les fichiers contenant "apache2"
locate apache2
# Rechercher les fichiers se terminant par ".conf"
locate ".conf"
# Rechercher dans un chemin spécifique
locate -r "/etc/.*\.conf" # idem : locate "\.conf$"| Option | Description |
|---|---|
-i | Insensible à la casse |
-c | Compter le nombre de correspondances |
-l N | Limiter la sortie à N résultats |
-e | Vérifier que le fichier existe encore |
# Recherche insensible à la casse
locate -i readme
# Compter les résultats
locate -c ".log"
# Limiter à 10 résultats
locate -l 10 "\.sh"
# Vérifier que les fichiers existent encore (plus lent mais fiable)
locate -e nginxwhich recherche l'emplacement d'une commande dans les répertoires du PATH. Idéal pour savoir quel exécutable sera utilisé.
# Trouver où se trouve python3
which python3
# Résultat : /usr/bin/python3
# Trouver tous les emplacements possibles (aliases, fonctions)
which -a python3| Option | Description |
|---|---|
-a | Lister toutes les occurrences dans le PATH |
-p | Inclure les alias et fonctions (comportement par défaut) |
# Vérifier plusieurs commandes à la fois
which python3 git docker
# Vérifier qu'une commande n'existe pas (code de retour 1)
which nmap
# echo $? → 1 si non trouvéwhereis va plus loin que which : il localise le binaire, le code source et la page man d'une commande.
# Trouver toutes les informations sur ls
whereis ls
# ls: /bin/ls /usr/share/man/man1/ls.1.gz
# Seulement le binaire
whereis -b ls
# Seulement les pages man
whereis -m grep| Option | Description |
|---|---|
-b | Rechercher uniquement les binaires |
-m | Rechercher uniquement les pages man |
-s | Rechercher uniquement les sources |
-u | Trouver les fichiers avec des permissions inhabituelles |
type est intégré au shell Bash. Il montre comment une commande sera interprétée : alias, fonction, builtin ou binaire externe.
# Identifier le type d'une commande
type ls
# ls est un alias de 'ls --color=auto'
type cd
# cd est une primitive du shell
type python3
# python3 est /usr/bin/python3
type -a echo
# echo est une primitive
# echo est /bin/echo| Option | Description |
|---|---|
-t | Retourne uniquement le type (alias, builtin, file, function) |
-a | Toutes les occurrences dans le PATH |
-p | Retourne le chemin du binaire (ou rien si pas trouvé) |
# Juste le type (pour les scripts)
type -t ls # alias
type -t cd # builtin
type -t python3 # file
# Vérifier si une commande est un alias
if [ "$(type -t mcd)" = "function" ]; then
echo "La fonction mcd existe"
fi| Outil | Usage principal | Vitesse |
|---|---|---|
locate | Fichiers (via base de données) | ⚡⚡⚡ Très rapide |
which | Commandes dans le PATH | ⚡⚡ Rapide |
whereis | Binary + man + sources | ⚡⚡ Rapide |
type | Type de commande (shell) | ⚡⚡⚡ Instantané |
# Mettre à jour la base et chercher
sudo updatedb
locate -c bash # Combien de fichiers contiennent "bash" ?# Trouver python3 avec which, whereis et type
which python3
whereis python3
type -t python3# Lister tous les alias actifs
alias
# Vérifier un alias spécifique
type ll
# Ou: which ll#!/bin/bash
# diagnostic.sh — Vérifie l'existence de commandes vitales
commandes=("python3" "git" "docker" "ssh" "curl")
for cmd in "${commandes[@]}"; do
if which "$cmd" > /dev/null 2>&1; then
echo "✓ $cmd trouvé : $(which $cmd)"
else
echo "✗ $cmd non trouvé"
fi
donelocate utilise une base de données → très rapide, mais moins précis qu'un find en temps réelwhich cherche dans le PATH → idéal pour les binaires exécutableswhereis donne binaire + manuel + sources → utile pour le développementtype est intégré au shell → révèle les alias, fonctions et builtinssudo updatedb (ou via cron automatique)