Quelle est la différence entre localiser / où est / qui

13

Quelle est la différence fondamentale entre locate whereiset whichcommande.

La différence fondamentale que j'ai observée est qu'elle locatelocalise tous les noms de fichiers associés dans l'ensemble du système de fichiers, tandis whereisque les whichcommandes et 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 fonctionne-t-il locatesi rapidement par rapport à la recherche de tiret, alors qu'il locatedoit rechercher un nom de fichier particulier correspondant à la chaîne cible dans toute la hiérarchie du système de fichiers?

Chinmaya B
la source
2
et qu'en est-il type? : P
jamesmstone
@jamesmstone qu'entendez-vous par type, veuillez élaborer
Chinmaya B
2
Désolé, j'essayais juste d'ajouter à votre question. typeest une autre commande qui semble (à mes yeux) faire une chose similaire à celles que vous avez mentionnées.
jamesmstone
@jamesmstone Je ne pense pas qu'il existe de commande de type qui fonctionne dans mon système. Je ne trouve aucun manuel ni aucune page d'informations pour la typecommande. J'ai essayé man typeet info type.
Chinmaya B
Hmm je me demande pourquoi ... Utilisez-vous bash?
jamesmstone

Réponses:

17

whichtrouve l'exécutable binaire du programme (s'il se trouve dans votre PATH). man whichexplique plus clairement:

qui renvoie les chemins d'accès des fichiers (ou liens) qui seraient exécutés dans l'environnement actuel, si ses arguments avaient été donnés sous forme de commandes dans un shell strictement conforme à POSIX. Pour ce faire, il recherche dans le PATH des fichiers exécutables correspondant aux noms des arguments. Il ne suit pas de liens symboliques.

whereisrecherche 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 passant la sortie de ces commandes comme arguments à ls -loufile

$ 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

locatetrouve en effet tous les fichiers dont le modèle est spécifié n'importe où dans leur chemin. Vous pouvez lui dire de ne rechercher que les fichiers et répertoires dont les noms (plutôt que les chemins d'accès complets) incluent le modèle avec l' -boption, qui est généralement ce que vous voulez, et donne une liste moins lourde.

locateest rapide car il utilise une base de données binaire qui est mise à jour périodiquement (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écutantsudo updatedb

locateEncore une chose - peu importe si les fichiers existent toujours ou non, donc pour éviter de trouver des fichiers récemment supprimés, utilisez -e. Souvent, je m'adresse aussi lesscar 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.

Zanna
la source
pouvez-vous comparer le tableau de bord et localiser les performances des commandes et les détails d'implémentation? La mise à jour de la base de données binaire doit être effectuée après la création de tout nouveau fichier dans le système, n'est-ce pas pour que cette période soit indéfiniment correcte ou est-elle gérée par des processus système?
Chinmaya B
2
@Creator met automatiquement à jour la base de données par cron, une fois par jour. Vous pouvez vérifier lorsque vous installez quelque chose avec lequel vous ne pouvez pas trouver immédiatement les fichiers locate. Le tiret utilise un index complètement différent - plus lent car il fait plus de choses (j'ai édité ma réponse)
Zanna
1
Donc, pour résumer, la localisation est utile et plus puissante que laquelle ou où, mais elle est stupide tandis que le tableau de bord est plus puissant et implémente l'apprentissage automatique. et merci pour sudo updatedbvotre commande est très utile je ne savais pas que même si j'utilisais -e régulièrement.
Chinmaya B
@Creator yep vous l'avez mieux formulé :) heureux que cela ait aidé
Zanna
0

Simplement

$ which samba

quelle commande recherche dans la liste des programmes répertoriés dans les paramètres PATH

$ whereis samba

La commande whereis recherche également les programmes qui ne sont pas présents dans le paramètre PATH

$locate samba

Recherche également les fichiers par nom de fichier mais ne recherche pas la structure de répertoires elle-même mais uniquement une base de données préparée par updatedb. À cause de cela, la localisation est plus rapide que find mais moins précise. Exemples:

Pointeur nul
la source