“ whereis”和“哪个”在Mac OS X中返回不同的路径


27

我已经有了默认的OpenSSL 9.8(Mac OS X 10.6.8),并决定通过MacPorts(sudo port install openssl)安装最新版本(1.0.1 )。

这些是whichwhereis命令的控制台输出:

$ whereis openssl
/usr/bin/openssl

(这是默认系统的)

$which openssl
/opt/local/bin/openssl

(这是通过MacPorts安装的)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(PATH中有mac port的版本)

为什么要为whereis和返回不同的路径which,这样可以吗?有什么办法可以得到平等的结果吗?

Answers:


31

在的联机帮助页中whereis,它明确指出(强调我的意思):

whereis实用程序检查指定程序的标准二进制目录,并打印出找到的所有目录的路径。

搜索的路径是sysctl(8)实用工具为``user.cs_path''字符串返回的字符串

与此相反,which是通常用于检查二进制文件在用户路径中的位置的工具。

哪个实用程序获取命令名称列表,并在路径中查找如果实际调用了这些命令将运行的每个可执行文件。

这就解释了您的区别,因为/opt/local/bin它不是系统范围的“标准”路径(毕竟,MacPorts是完全可选的安装),并且默认情况下sysctl只有/usr/bin:/bin:/usr/sbin:/sbinuser.cs_path

通常,坚持使用whichwhich -a找到二进制文件,而不要使用whereis


理论上你可以改变user.cs_path通过

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

但我不知道这是一个好主意。


谢谢,您已提出“ whereis实用程序将检查标准二进制目录 ”的信息-这就是答案!无法投票支持您回答信誉
不佳的

不用担心,您一定会很快获得更多声誉的。欢迎来到超级用户!:)
slhck

在OS X上的psql也有同样的问题-不幸的是user.cs_path是不可写的。不过,离我的解决方案越来越近了,谢谢您这么有用的回答!
user208769 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.