在我的Mac上,我经常使用bash。对于我的环境设置,我像往常一样将/usr/bin
和/usr/local/bin
添加到$PATH
。
虽然我确实知道/usr/bin
和/usr/local/bin
是关于什么的,但我很好奇哪个应该按照惯例在另一个之前?这有什么具体原因吗?
类似于/usr/lib
和/usr/local/lib
- 希望答案相同或类似。
多一点 - 只是原始问题的扩展,您将如何按照约定在$ PATH中订购以下内容?为什么?
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
/opt/local/bin
/opt/local/sbin
答案 0 :(得分:29)
/usr/bin
是操作系统提供的二进制文件。 /usr/local/bin
是用户提供的二进制文件所在的位置。当您在命令行上键入命令的名称时,shell将按顺序在<{1>}环境变量中包含的路径中搜索所述命令。一种常见的模式是$PATH
位于/usr/local/bin
之前的/usr/bin
。这允许您安装备用版本的二进制文件,并让它们优雅地“覆盖”操作系统提供的二进制文件。操作系统更新不会破坏用户安装的软件包。流行的Homebrew包管理器工具在OSX中特别使用了这种模式。
例如,在撰写本文时,OSX El Capitan提供了git版本2.5.4(在$PATH
中)。如果你想要一个更新的版本,你可以使用Homebrew来安装git版本2.7.0(进入/usr/bin
)。由于/usr/local/bin
位于/usr/local/bin
环境变量中的/usr/bin
之前,因此当您在shell中发出命令$PATH
时,将使用较新的Homebrew版本。
在运行OSX El Capitan的全新Mac上(我碰巧有一个),git
文件包含以下内容:
/etc/paths
生成以下/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
环境变量:
$PATH
与自制软件兼容。我建议坚持使用此OSX默认值。如果你真的想要加入/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
(在上面的问题中列出),我会在/usr/local/sbin
之前将其置于上述类似的原因之前。至于/usr/sbin
和/opt/local/bin
,我个人并未发现需要将它们添加到路径中,但似乎它们可能与/opt/local/sbin
类似物类似,因为{{ 1}}传统上包含用户安装的二进制文件。
注意:相同的解释适用于/usr/local
与/opt
。