【问题标题】:Order of /usr/bin and /usr/local/bin and more in $PATH/usr/bin 和 /usr/local/bin 的顺序以及 $PATH 中的更多内容
【发布时间】:2016-05-01 07:20:45
【问题描述】:

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

【问题讨论】:

标签: macos bash path


【解决方案1】:

/usr/bin 是操作系统提供的二进制文件所在的位置。 /usr/local/bin 是用户提供的二进制文件所在的位置。当您在命令行上键入命令的名称时,shell 会在$PATH 环境变量中包含的路径中搜索该命令按顺序。一个常见的模式是在$PATH 中将/usr/local/bin 放在/usr/bin 之前。这允许您安装替代版本的二进制文件,并让它们优雅地“覆盖”操作系统提供的二进制文件。并且操作系统更新不会破坏您用户安装的软件包。流行的Homebrew 包管理器工具在 OSX 中特别使用了这种模式。

例如,在撰写本文时,OSX El Capitan 提供 git 版本 2.5.4(/usr/bin)。如果你想要更新的版本,你可以使用 Homebrew 安装 git 版本 2.7.0(到/usr/local/bin)。由于/usr/local/bin 在$PATH 环境变量中位于/usr/bin 之前,因此当您在shell 中发出命令git 时,将使用较新的Homebrew 版本。

在运行 OSX El Capitan 的全新 Mac(我碰巧有一个)上,/etc/paths 文件包含以下内容:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

产生以下$PATH 环境变量:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

与自制软件兼容。我建议坚持使用这个 OSX 默认值。如果您真的想包含/usr/local/sbin(在上面的问题中列出),出于与上述类似的原因,我会将其放在/usr/sbin 之前。至于/opt/local/bin 和/opt/local/sbin,我个人还没有发现需要将它们添加到路径中,但似乎它们可能与/usr/local 类似物处于相似的位置,因为/opt 传统上包含用户安装的二进制文件.

注意:同样的解释适用于/usr/lib 和/usr/local/lib。

【讨论】:

  • 我很困惑。当我执行cat /etc/paths 时,我得到:/usr/local/bin、/usr/bin 等。但是,当我echo $PATH 我得到:/usr/bin:/bin/: 等时,这完全是一个不同的顺序。 (我应该提到这是在 Yosemite 10.10 上)
  • @skube 检查用户的~/.bash_profile 中是否有$PATH 环境变量覆盖。如果是这样,请将其注释掉或删除。
  • 请注意,如果您将 user 的 /usr/local/bin 文件夹的权限更改为 writeable,那么用户应用程序只需将 sudo 替换为如果您在PATH 中的/usr/local/bin/ 高于/usr/bin/,则在/usr/local/bin/sudo 伪造sudo。
  • @Binarian 用户应用程序可以简单地为您的 .bashrc 添加一个别名来达到相同的效果。不,将 /usr/loca/bin 放在 /usr/bin 之后并不能保护您免于运行恶意 sudo。
  • @YongweiWu 感谢您的意见。是的,你是对的。您描述了另一种攻击向量,如果不防止更改配置文件,它会使保护变得无关紧要。我说的仍然是正确的,即使它只考虑了一种攻击向量。
猜你喜欢
  • 2013-04-22
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2021-03-25
  • 2015-12-23
相关资源
最近更新 更多