Quelles sont les différences entre les commandes whereis
, locate
et find
sur Ubuntu? Quelles sont les différences fondamentales du point de vue de la recherche?
De page d'aide de GNU findutils
Le programme find cherche dans une arborescence de répertoires pour trouver un fichier ou un groupe de fichiers. Il parcourt l'arborescence de répertoires et signale toutes les occurrences d'un fichier correspondant aux spécifications de l'utilisateur. Le programme de recherche comprend une capacité de recherche très puissante.
Le programme de localisation analyse une ou plusieurs bases de données de noms de fichiers et affiche les correspondances éventuelles. Ceci peut être utilisé comme une commande de recherche très rapide si le fichier était présent lors de la dernière mise à jour de la base de données de noms de fichiers.
Donc, find
est ce que vous utilisez lorsque vous souhaitez rechercher des critères particuliers et manipuler des fichiers. Il a beaucoup plus d'options que locate
, ce qui permet un contrôle beaucoup plus précis des résultats. Il est lent car il exécute le ou les tests demandés sur chaque fichier pour voir s'il correspond.
locate
est utilisé pour rechercher rapidement quelque chose dans l'ensemble du système. Vous pouvez l'utiliser si vous ne savez pas où se trouve quelque chose ou si vous souhaitez rechercher tous les fichiers associés dispersés dans divers emplacements inconnus. C'est rapide car il utilise une base de données binaire pour indexer le système. Pour que de nouveaux fichiers apparaissent, lancez d'abord Sudo updatedb
(la base de données mise à jour une fois par jour par cron
la commande whereis
renvoie simplement l'emplacement des exécutables, des pages de manuel et des sources d'un programme (voir man whereis
)
La grande différence est que find
cherche des fichiers réels récursivement dans un répertoire donné, tandis que locate
cherche dans une base de données sans nécessiter de répertoire spécifique. Ainsi, si vous avez enregistré un fichier avant de mettre à jour la base de données, find
le trouvera, mais locate
ne le trouvera pas.
Quant à whereis
et which
, ils ne recherchent que dans les répertoires mentionnés dans votre variable PATH et uniquement dans ceux dotés du jeu d'autorisations exécutables.