![Mac OS X:二进制文件应该存放的常规位置](https://linux22.com/image/1209726/Mac%20OS%20X%EF%BC%9A%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E5%BA%94%E8%AF%A5%E5%AD%98%E6%94%BE%E7%9A%84%E5%B8%B8%E8%A7%84%E4%BD%8D%E7%BD%AE.png)
我下载了一个命令行应用程序,并想将它放在可以从命令行运行的地方,而无需明确输入路径。
对于这样的事情,常规使用什么路径??
/usr/bin
是否有不同的选项,一个是如果我想让所有用户使用,另一个是如果我只想让特定用户使用,比如我的管理员帐户?或者我应该把它放在 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。