Mac OS X:二进制文件应该存在的传统位置

Jas*_*n S 82 terminal shell path macos

我下载了一个命令行应用程序,我想把它放在某个地方,我可以从命令行运行它,而不必显式键入路径。

  1. 用于此类事情的常规路径是什么?/usr/bin? 是否有不同的选项,一种是我想要所有用户都可以使用,另一种是我只想要特定用户(例如我的管理员帐户)使用?

  2. 或者我应该把它放在Applications目录下它自己的目录中,并将其添加到路径中?如果是这样,哪个文件控制路径的设置位置?

Tel*_*hus 70

核心答案:您可能想要/usr/local/bin. 根据 macOS 的最新版本,您可能需要更新默认的$PATH. 有关更多详细信息,请参见下文。

更新 12-01-2018自从我写下我的原始答案后的某个时候,Apple 更改了它的默认$PATH. 因此,我在下面所说的很多内容都与最近的 Mac 无关。如果您输入echo $PATH终端,并且/usr/local/bin是第一个,那么您可以忽略以下有关更改$PATH.

原答案

Mac 在这方面是不寻常的。$PATH普通用户的默认变量如下所示:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)

通过将/usr/local/bin /usr/bin/bin,苹果颠覆了通常的系统。通常,您可以放入一些东西/usr/local/bin(比如第二个 Perl 解释器,以某种非标准方式编译),然后普通用户将首先点击自定义的而不是系统范围的。这很好。用户可以获得变体,但系统保持纯净。$PATH但是,鉴于 Apple 的默认设置,/usr/bin或 中的项目/bin将在/usr/local/bin. (这基本上违背了安装的目的,例如,在/usr/local/bin.

要解决此问题,您可以$PATH通过编辑.profile用户主目录中的文件来更改普通用户的。(如果您有全新安装,该文件可能不存在。在这种情况下,请创建它。)

半相关:Homebrew为 Mac 提供了出色的包管理。默认情况下,Homebrew 将软件安装到/usr/local.

  • 在我新安装的 OsX 10.13.6 (High Sierra) 上,默认情况下,路径首先包含 /usr/local/bin (即使该文件夹甚至不存在)。 (3认同)
  • @Legolas 苹果似乎已经改变了他们处理这个问题的方式。我会编辑帖子。 (2认同)

avs*_*len 9

/usr/local/bin并且/usr/local/sbin非常值得添加到您的路径中,因为许多用于源构建的 makefile 默认安装在那里。

如果你使用的MacPorts,它的价值增加/opt/local/bin,并/opt/local/sbin为好。

最好的方法是添加

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

.bashrc您的主目录中的文件(这是隐藏的,因此 CLI 是执行此操作的最佳方法),或者,如果您想更改系统范围的路径,请将同一行添加到/etc/bashrc(不隐藏),但您将需sudo要这样做。

如果您.bashrc在任何用户的家中都没有,则可以创建一个并将这一行添加到其中,但请记住更改您创建的文件的权限以使其可供相关用户读取(显然不相关,如果您为您自己的个人资料重新做)。

$PATH在年底追加的系统默认路径,无论你把之前。请注意,系统会按照给定路径的顺序搜索二进制文件,因此如果您在系统中安装了二进制文件/usr/local/opt/local默认情况下也安装了该二进制文件,则将首先找到您安装的版本,这可能(尽管很少)令人不安。值得关注。

好信息在这里

我应该注意,上面假设您使用Bash作为 shell,这是Mac OS X v10.4 (Tiger) 和Mac OS X v10.5 (Leopard)上的默认设置,但不是在早期系统上使用,tcsh而是使用,它有不同的语法。

我希望这有帮助...


Joh*_*ley 7

我倾向于和/usr/local. 这是一个很好的解释为什么,它指的是文件系统层次结构标准 (FHS) .??????????????????????????????????,其中转 说/usr/local

本地数据的三级层次结构,特定于该主机。通常还有更多的子目录,例如 bin、lib、share。

  • 请从参考链接中引用答案的重要部分,因为如果链接页面发生变化,答案可能会失效。 (3认同)