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


61

我已经下载了一个命令行应用程序,并希望将其放在可以从命令行运行它的位置,而不必显式键入路径。

  1. 这样的常规路径是什么?/usr/bin?是否有不同的选项,如果我希望所有用户都使用它,如果我只希望对特定用户(例如我的管理员帐户)使用,是否有不同的选择?

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

Answers:


53

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

更新2018年1月 12日自从我写了最初的答案以来,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,苹果颠覆了通常的系统。通常,您可以放一些东西/usr/local/bin(例如,以某种非标准方式编译的第二个Perl解释器),然后普通用户将首先使用自定义的,而不是系统级的。很好 用户可以获得变体,但系统保持纯净。$PATH但是,鉴于Apple的默认设置,/usr/bin或中的项目/bin将在中的任何内容之前找到/usr/local/bin。(这基本上违背了安装目的,例如在中自定义Perl /usr/local/bin。)

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

半相关:Homebrew为Mac提供了出色的软件包管理。默认情况下,Homebrew将软件安装到中/usr/local,但这样做的方式非常容易将其删除并稍后返回到原始状态。


1
在我刚安装的OsX 10.13.6(High Sierra)上,默认情况下该路径确实首先包含/ usr / local / bin(即使该文件夹甚至不存在)。
莱戈拉斯

1
@Legolas苹果似乎已经改变了他们的处理方式。我将编辑帖子。
Telemachus

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,这是Mac OS X v10.4(Tiger)和Mac OS X v10.5(Leopard)的默认设置,而不是在较早的系统上使用的Bashtcsh,语法不同。

希望对您有帮助...


1
/usr/local/bin已经在默认的OS X中$PATH(尽管为时已晚-请参阅我的答案)。如果您使用MacPorts,其安装程序应根据需要编辑您的路径-至少在我的经验中一直如此。话虽如此,对于用户来说知道它在做什么(以及为什么)是一件好事。
Telemachus

@Telemachus很有名:每当我为自己构建Mac时,我都会从头开始自定义地狱,所以我永远也记不清什么是标准,什么是我的!
2009年

1
我知道您对MacPorts安装程序自定义.profile中的路径感到不满意,但过去我曾因某种原因(不知道是什么原因)无法坚持下去(这让我很困惑)相当长的时间!)...所以从那以后我倾向于用手把它连接起来……
avstrallen

“这是隐藏的,因此CLI是执行此操作的最佳方法”:愚蠢的问题,如何在命令提示符下对文件运行TextEdit?
杰森S

没什么愚蠢的问题:使用open以文件名作为参数的命令,并且应该使用默认文本编辑器(默认为TextEdit)打开该命令。
avstrallen

7

我倾向于去/usr/local。这是一个很好的解释为什么,它指的是Filesystem Hierarchy Standard(FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢,其中转身说/usr/local

本地数据的三级层次结构,特定于此主机。通常具有其他子目录,例如bin,lib,share。


是的,在这方面,它与其他* nix操作系统几乎相同。
jtbandes

2
请在参考链接中引用答案的关键部分,因为如果链接页面发生更改,答案可能会失效。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.