Différence entre localiser et qui sous Linux

27

Quelle est la différence entre locateet whichsous Linux?

Pourquoi quand j'utilise, locate mentoril répertorie tous les mentors mais quand je l'utilise, which mentoril dit "pas de mentor en ..." - qu'est-ce que cela signifie?

Naddy
la source
Il y a aussi whereet whereis.
Jan Tojnar
en bash: préférez type -all acommand. Et si je lis le XYProblem derrière votre question: vous avez une commande, vous pouvez la voir via Locate, mais vous ne pouvez pas l'exécuter? puis éditez PATH, soit dans le ~/.profilefichier de votre utilisateur spécifique , soit si vous êtes convaincu de savoir quoi faire, dans le /etc/profilefichier global [AVERTISSEMENT: vous pouvez casser les scripts système (et peut-être une grande partie du système d'exploitation) si vous ajoutez le mauvais le $ PATH de / etc / profile ... (ex: chemins contenant des commandes généralement trouvées ailleurs). Je préfère ajouter seulement à la FIN de la variable. Et s'il vous plaît ne mettez pas ::ou . nulle part dans ce CHEMIN.
Olivier Dulac

Réponses:

45

Quelle est la difference entre locateet which?

locate utilise une base de données précédemment créée pour localiser le fichier.

locatelit une ou plusieurs bases de données préparées par updatedb(8) et écrit des noms de fichiers correspondant à au moins l'un des MOTIFS sur la sortie standard, un par ligne.

Localiser la source (1) - Page de manuel Linux

updatedbcrée ou met à jour une base de données utilisée par locate(1). Si la base de données existe déjà, ses données sont réutilisées pour éviter de relire les répertoires qui n'ont pas changé.

updatedbest généralement exécuté quotidiennement par cron(8) pour mettre à jour la base de données par défaut ( /var/lib/mlocate/mlocate.db)

Source mise à jourb (8) - Page de manuel Linux


whichrecherche un fichier exécutable en le recherchant dans les répertoires de la PATHvariable d'environnement.

whichprend un ou plusieurs arguments. Pour chacun de ses arguments, il imprime sur stdoutle chemin complet des exécutables qui auraient été exécutés lorsque cet argument avait été entré à l'invite du shell. Pour ce faire, il recherche un exécutable ou un script dans les répertoires répertoriés dans la variable d'environnement PATH.

en utilisant le même algorithme que bash(1).

Source qui (1) - Page de manuel Linux


locate mentorénumère le mentor, mais which mentordit «pas de mentor en ...»

Qu'est-ce que ça veut dire?

Vous avez des fichiers nommés mentorqui peuvent être trouvés dans la locatebase de données.

Vous n'avez pas de fichier exécutable ou de script nommé mentordans votre fichier PATH.

DavidPostill
la source
2
"updatedb" - bon de savoir que ce n'est pas seulement Microsoft qui propose des noms trop spécifiques pour des choses. (Dans Win32, DeleteObjectsupprime un objet GDI, CloseHandleferme un handle de noyau, etc. updatedblocate
Met à
"which" est également particulièrement utile dans le cas où vous pourriez avoir plusieurs versions du même programme qui se déplacent à différents endroits de votre chemin, il vous indique donc lequel est réellement exécuté lorsque vous exécutez la commande. Cela m'a été utile auparavant pour diagnostiquer un comportement inattendu - par exemple, cela m'a aidé à réaliser que j'avais laissé une version installée manuellement d'un utilitaire sur mon système, de sorte qu'elle remplaçait la version installée par le gestionnaire de packages.
Carcer
11

whichest de localiser une commande ( whichretourne un nom de chemin des fichiers / liens qui seraient exécutés dans l'environnement actuel)

locateconsiste à rechercher des fichiers par nom ( locatelit une ou plusieurs bases de données préparées par updatedbet écrit des noms de fichiers correspondant à au moins un des modèles dans la sortie standard, un par ligne)

manjesh23
la source
2
Veuillez fournir une attribution pour vos sources - les descriptions dans votre réponse sont directement tirées des pages de manuel de ces utilitaires.
Rétablir Monica iamnotmaynard
5

locateprend un modèle glob par défaut (le modèle Regex peut également être utilisé) et recherche dans la base /var/lib/mlocate/mlocate.dbde données tout nom de fichier correspondant au modèle.

whichest une commande pour rechercher le chemin complet d'une commande dans les répertoires interprétés par la PATHvariable d'environnement.

heemayl
la source