Ich habe das Standard-OpenSSL 9.8 (Mac OS X 10.6.8) und habe mich entschieden, die neueste Version (1.0.1) über MacPorts ( sudo port install openssl
) zu installieren.
Dies sind die Konsolenausgaben vonwelcheUndwo istBefehle:
$ whereis openssl
/usr/bin/openssl
(das ist das Standardsystem)
$which openssl
/opt/local/bin/openssl
(dies wird über MacPorts installiert)
$ openssl version
OpenSSL 1.0.1c 10 May 2012
(im PATH befindet sich die Version des Mac-Ports)
whereis
Warum werden für und unterschiedliche Pfade zurückgegeben which
und ist das in Ordnung? Gibt es eine Möglichkeit, gleiche Ergebnisse zu erhalten?
Antwort1
In der Manpage von whereis
steht eindeutig (Hervorhebung von mir):
Das Dienstprogramm „whereis“ überprüft dieStandard-Binärverzeichnissefür die angegebenen Programme und gibt die Pfade aller gefundenen Programme aus.
Der gesuchte Pfad ist die Zeichenfolge, die vom Dienstprogramm sysctl(8) für die Zeichenfolge ``user.cs_path'' zurückgegeben wird.
Im Gegensatz dazu which
ist dies das Tool, das üblicherweise verwendet wird, um zu überprüfen, wo sich eine Binärdatei für den Pfad Ihres Benutzers befindet.
Das Dienstprogramm which nimmt eine Liste von Befehlsnamen und durchsucht den Pfad für jede ausführbare Datei, die ausgeführt werden sollwären diese Befehle tatsächlich aufgerufen worden.
Das erklärt Ihren Unterschied, da /opt/local/bin
es sich nicht um einen systemweiten „Standard“-Pfad handelt – schließlich handelt es sich bei MacPorts um eine völlig optionale Installation – und sysctl
nur /usr/bin:/bin:/usr/sbin:/sbin
in seiner user.cs_path
Standardeinstellung vorhanden ist.
Bleiben Sie im Allgemeinen bei which
oder, which -a
um eine Binärdatei zu finden, anstatt zu verwenden whereis
.
Theoretisch kann man sich ändern user.cs_path
durch
sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
aber ich weiß nicht, ob das so eine gute Idee ist.