Quelle est la différence fondamentale entre locate
whereis
et which
commande.
La différence fondamentale que j'ai observée est que locate
localise tous les noms de fichiers associés dans l'ensemble du système de fichiers, alors que whereis
et which
Les commandes ne donnent que l'emplacement (système/adresse locale du fichier) de l'application installée. Quelle est la précision de mon observation ?
Comment ces commandes sont-elles implémentées en interne. Pourquoi locate
fonctionne si vite par rapport à la recherche par tiret, tandis que locate
doit rechercher un nom de fichier particulier correspondant à la chaîne cible dans toute la hiérarchie du système de fichiers ?
Réponse acceptée :
which
trouve l'exécutable binaire du programme (s'il est dans votre PATH). man which
explique plus clairement :
qui renvoie les noms de chemin des fichiers (ou liens) qui seraient
exécutés dans l'environnement courant, si ses arguments avaient été donnés sous forme de commandes dans un shell strictement conforme à POSIX. Pour ce faire, il recherche dans PATH les fichiers exécutables correspondant aux noms des arguments. Il ne suit pas les liens symboliques.
whereis
trouve le binaire, la source et les fichiers de page de manuel d'un programme. Par exemple
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
Vous pouvez obtenir des détails supplémentaires en transmettant la sortie de ces commandes en tant qu'arguments à ls -l
ou file
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
trouve en effet tous les fichiers qui ont le modèle spécifié n'importe où dans leurs chemins. Vous pouvez lui dire de ne trouver que les fichiers et répertoires dont les noms (plutôt que des chemins complets) inclure le modèle avec le -b
option, qui correspond généralement à ce que vous voulez, et donne une liste moins compliquée.
locate
est rapide car il utilise une base de données binaire qui est périodiquement mise à jour (une fois par jour, par cron
). Vous pouvez le mettre à jour vous-même pour vous assurer que les fichiers récemment ajoutés sont trouvés en exécutant sudo updatedb
Encore une chose à propos de locate
- il ne se soucie pas de savoir si les fichiers existent toujours ou non, donc pour éviter de trouver des fichiers récemment supprimés, utilisez -e
. Souvent, je passe aussi à less
car la liste peut être longue. En général, je fais :
sudo updatedb && locate -b -e gimp | less
Le fonctionnement du tableau de bord d'Unity est expliqué ici - il utilise Zeitgeist pour indexer les fichiers système et apprendre des modèles d'utilisation, et permet à d'autres applications d'utiliser ces données, il fait donc beaucoup plus de travail que locate
.