$ PATH中的/ usr / bin和/ usr / local / bin等的顺序

时间:2016-01-25 04:01:41

标签: macos bash path

在我的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

1 个答案:

答案 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