Mac OS X:二进制文件应该存放的常规位置

Mac OS X:二进制文件应该存放的常规位置

我下载了一个命令行应用程序,并想将它放在可以从命令行运行的地方,而无需明确输入路径。

  1. 对于这样的事情,常规使用什么路径??/usr/bin是否有不同的选项,一个是如果我想让所有用户使用,另一个是如果我只想让特定用户使用,比如我的管理员帐户?

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

答案1

简短的回答:您可能需要/usr/local/bin。根据您的 macOS 版本,您可能需要更新默认设置$PATH。请参阅下文了解更多详情。

(2018 年 12 月 1 日更新)自从我写下最初的答案以来,Apple 更改了其默认设置$PATH。因此,下面我说的很多内容与最近的 Mac 无关。如果您echo $PATH在终端中输入,并且/usr/local/bin是第一个,那么您可以忽略下面有关更改您的的所有内容$PATH

原始答案

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

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

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

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

半相关:自制为 Mac 提供出色的软件包管理。默认情况下,Homebrew 将软件安装到 中/usr/local,但它的安装方式使得以后很容易删除内容并恢复到原始状态。

答案2

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

如果你使用麦金塔,值得添加/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该二进制文件也是系统默认安装的,则会首先找到您安装的版本,这可能会(尽管很少)扰乱事情。值得注意。

好的信息是这里

我应该注意,上面假设你正在使用猛击对于 shell,这是默认的Mac OS X 版本 10.4(老虎)和Mac OS X 版本 10.5(Leopard),但在早期的系统上却不行,因为tcsh早期系统使用了具有不同语法的系统。

我希望这有帮助...

答案3

我倾向于选择/usr/local。以下是很好的解释为什么,指的是文件系统层次标准 (FHS).⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢,这又说明了/usr/local

特定于此主机的本地数据的第三层级结构。通常有进一步的子目录,例如 bin、lib、share。⁢

相关内容