quelles / où sont les différences

112

Quelle est la différence entre whichet whereis?

mk12
la source
Je suis désolé, mais sur mon système OS X 10.5.8, qui donne toujours les mêmes résultats. Peut-être que c'est une question très spécifique à OS X, puisque je suis d'accord, un résultat différent est attendu. Peut-être que whereis ne se conforme pas à ce qu'il devrait faire. Au moins les deux exemples (voir ci-dessous) ne fonctionnent pas: whereis ls et whereis php donnent toujours le même résultat que lequel ... Quelqu'un peut-il confirmer cela? Snow Leopard se comporte-t-il de la même manière?
Wolf
Oui je sais, c'est pourquoi j'ai posé cette question.
mk12
@Wolf en voici un exemple whichet whereisune sortie différente (sur macOS Sierra) apple.stackexchange.com/questions/259047/…
Matthew
@ mk12 Je me sens comme typesupérieur. Il connaît également des alias définis, des fonctions, etc.
phil294

Réponses:

121

Que diriez-vous d'apprendre whereiset d' whichutiliser whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Fondamentalement, whereisrecherche des fichiers «éventuellement utiles», alors que whichseuls les exécutables sont recherchés.

Je l'utilise rarement whereis. D'autre part, whichest très utile, spécialement dans les scripts. whichest la réponse à la question suivante: D'où vient cette commande?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2
Denilson Sá Maia
la source
34
Je ne savais pas quoi, merci.
mk12
1
BTW, je voudrais supprimer la balise "osx", car cette question s'applique à toutes les variantes d'Unix (y compris Linux, BSD, Mac OS X, ...)
Denilson Sá Maia
changé pour unix
mk12
1
Il y a plus que ça. Sur mon système, whereis et qui renvoient différents chemins exécutables. Je ne peux obtenir que le chemin vers celui qui fonctionne réellement whereis, pas celui pour which.
Jordanie Reiter
1
@ JordanReiter: Cela ne peut pas être! whichmontre le chemin réel. Êtes-vous sûr que le chemin indiqué par whichn'est pas simplement un lien symbolique au chemin indiqué par whereis? Peut-être que c'est un alias de shell. En bash, essayez de courir type your_cmd_here.
Denilson Sá Maia
23

whereis recherche les emplacements standard * nix pour une commande spécifiée.

whichrecherche dans votre PATH spécifique à l'utilisateur (qui peut inclure certains des emplacements où des recherches sont effectuées, mais peut ne pas en inclure d'autres - il peut également inclure des emplacements qui whereisn'effectuent pas de recherche si vous avez ajouté à votre PATH)

ambre
la source
Qu'est-ce que * nix?
mk12
2
Unix, Linux, etc. (Mac OS X appartenant au groupe etc.)
8
Ohhh, haha, j'ai toujours pensé que le débordement de pile censurait le U sous Unix chaque fois que je le voyais pour une raison quelconque ...
mk12
Nan. Juste une convention assez courante d’utilisation générique de joker pour faire référence à une famille de systèmes d’exploitation similaires. ;)
6

Citant leurs pages de manuel:

où est :

whereis localise les sections source / binary et les manuels pour les fichiers spécifiés.

Par exemple :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

c'est-à-dire l'exécutable "php", et quelques autres choses (comme des pages de manuel).


et qui :

qui renvoie les noms de chemin des fichiers qui seraient exécutés dans l'environnement actuel

Par exemple :

$ which php
/usr/bin/php

c'est-à-dire, seulement l'exécutable "php".

Pascal MARTIN
la source
1

qui recherchent des exécutables dans les répertoires spécifiés par la variable d’environnement PATH. Et s’il est au courant, le chemin complet de cet exécutable sera imprimé.

$ which ls
/ bin / ls
$ ifconfig
$ # Aucune sortie, car ifconfig n'existe que dans le chemin PATH de la racine.

Whereis recherche les exécutables, les fichiers sources et les pages de manuel à l'aide d'une base de données créée automatiquement par le système.

$ whereis less
less: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Mais il semble que whereis et localiser ne pas utiliser la même base de données. Lorsque j’ai installé un logiciel et que j’ai utilisé whereis et localiser immédiatement pour rechercher ce logiciel. Le résultat est que, pourrait trouver certains fichiers liés à ce logiciel alors que localiser ne le pouvait pas. Utilisent-ils vraiment une base de données différente? Comment fonctionne la base de données? - Bon, pourquoi ne pas refuser d'être pédant? :)

utilisateur192505
la source
Avez-vous exécuté la commande updatedb? autant que je m'en souvienne, localiser s'appuie sur cela
Oliver M Grech