Homebrew:不能符号链接,/ usr / local / bin不可写

在安装HomeBrewHomeBrew在安装依赖项时显示以下问题:

 Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink bin/a2x /usr/local/bin is not writable. You can try again using: brew link asciidoc 

在Alex的回答之后,我能够解决这个问题。 似乎这是一个问题非特定于正在安装的软件包,但homebrew文件夹的权限。

 sudo chown -R `whoami`:admin /usr/local/bin 

对于某些软件包,您可能还需要对/usr/local/share执行此操作。

 sudo chown -R `whoami`:admin /usr/local/share 

我不build议运行任何特定的命令,而是build议运行brew doctor并认真对待所有警告。 您可能会遇到其他问题,在此问题中可能无法捕获这些问题。

另外,随着brew的更新随着时间的推移,特定的命令可能会也可能不会保持有效。 但是, brew doctor会确保您能及时排除故障。

其他的答案是正确的,但是他们没有回答为什么会出现这个问题,以及如何解决这个根本原因。

原因

这个问题有两个可能的原因:

  1. 自制程序安装是使用除当前使用的用户之外的用户执行的。 Homebrew希望只有最初安装它的用户才会使用它。
  2. 您安装了一些可以在不使用brew的情况下写入/ usr / local的软件。 这是brew doctorbuild议的原因,如果你运行它。

多用户自制软件

如果您有多个用户帐户,并且您希望多个用户中的一个能够使用brew,则需要执行几个步骤,否则每次切换用户时都需要不断更改Homebrew文件结构的所有权,这不是一个好主意。

详细的说明可以在网上find,但快速的答案是这样的:

  1. 创build一个名为brew 的组 :

    1. 打开系统首选项
    2. 点击帐户
    3. 点击“+”(必要时先解锁)
    4. 新帐户下select
    5. 进入酿造
    6. 点击创build组
  2. selectbrew组,然后添加您想要使用的用户账户brew。
  3. 更改/ usr / local文件夹组的所有权: sudo chgrp -R brew /usr/local
  4. 更改权限以添加写入/ usr / local作为组: sudo chmod -R g+w /usr/local
  5. 改变自制caching目录组: sudo chgrp -R brew /Library/Caches/Homebrew
  6. 改变自制caching目录权限: sudo chmod -R g+w /Library/Caches/Homebrew

单用户自制软件

如果你不想使用多于一个用户的自制软件,那么根据brew doctor的build议,其他答案提供的解决scheme可能就足够了:

sudo chown -R $(whoami) /usr/local

sudo chown -R $(whoami) /Library/Caches/Homebrew

validation

在完成这些步骤之后, brew doctor应该报告酿造组中的任何用户报告成功,假设您已经注销并返回以应用新的组成员(如果使用了多用户路由)。 如果您只是为单一用户自制软件纠正了一些问题,那么不需要注销并重新login,因为您的组成员身份都没有更改。

我发现我的特定设置下面的命令工作

 brew doctor 

然后,这告诉我,我的错误是什么,然后这个稍微不同的命令从上面的评论。

 sudo chown -R $(whoami) /usr/local/opt 

对我来说,解决scheme是运行brew update

所以,请做这个。

对熟悉自制的人来说,这可能是正常的做法,但我不是那些人之一。

编辑:我发现我需要通过运行brew doctor来更新,正如@ kinnth对这个问题的回答所build议的。

一般的故障排除工作stream程可能如下所示:1.运行brew update 2.如果这样做无法运行brew doctor并按照其指示进行操作3.如果没有帮助检查堆栈溢出

我发现以下与Sophos Anti-Virus用户有关的信息:

https://stackoverflow.com/a/32981184

https://community.sophos.com/products/free-antivirus-tools-for-desktops/f/17/t/10029

总之,Sophos正在改变某些/ usr / local目录的权限。 Sophos已经修补了这个问题,修正版本包含在9.4.1版本中。

这是因为当前用户不允许写入该path。 因此,要更改读写权限,您可以使用1.terminal,或2.graphics“获取信息”窗口。

1.使用terminal

Google如何从terminal使用chmod / chown (更改模式/更改所有者)命令

2.使用graphics“获取信息”

你可以右键点击你要更改权限的文件夹/文件,然后打开获取信息 ,它会显示一个如下所示的窗口,在其底部可以轻松更改读写权限: 在这里输入图像说明

如果可能的话,请记住在临时工作之后将权限更改回“只读”

如果你在find文件夹,右键单击并select“获取信息”,您可以转到文件夹的“共享和权限”部分,并允许“读写”到“所有人”

这是我做什么使符号链接通过这个错误。 也酿造似乎重置文件夹上的权限也就好像你没有改变任何东西