web-dev-qa-db-fra.com

"whereis" et "qui" renvoient des chemins différents sous Mac OS X

J'ai l'OpenSSL 9.8 par défaut (Mac OS X 10.6.8) et j'ai décidé d'installer la dernière version (1.0.1) via MacPorts (Sudo port install openssl).

Ce sont des sorties de console de dont les commandes et whereis :

$ whereis openssl
/usr/bin/openssl

(c'est celui du système par défaut)

$which openssl
/opt/local/bin/openssl

(ceci est installé via MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(il y a la version du port mac dans PATH)

Pourquoi différents chemins sont-ils retournés pour whereis et which, et est-ce correct? Est-il possible d'obtenir des résultats égaux?

27
jctim

Dans la page de manuel de whereis, il est clairement indiqué (souligné par moi):

L'utilitaire whereis vérifie les répertoires binaires standard des programmes spécifiés, en imprimant les chemins de tous ceux qu'il trouve.

Le chemin recherché est la chaîne renvoyée par l'utilitaire sysctl (8) pour la chaîne `` user.cs_path ''

Contrairement à cela, which est l'outil couramment utilisé pour vérifier l'emplacement d'un fichier binaire pour le chemin de votre utilisateur.

L'utilitaire which prend une liste de noms de commandes et recherche dans le chemin d'accès chaque fichier exécutable à exécuter si ces commandes avaient été réellement appelées .

Cela explique votre différence, puisque /opt/local/bin n'est pas un chemin "standard" à l'échelle du système. Après tout, MacPorts est une installation totalement facultative, et sysctl n'a que /usr/bin:/bin:/usr/sbin:/sbin dans son user.cs_path par défaut.

En général, tenez-vous en à which ou which -a pour trouver un binaire plutôt que d'utiliser whereis.


Vous pouvez théoriquement changer user.cs_path par

sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

mais je ne sais pas si c'est une si bonne idée.

31
slhck