无法符号链接,/usr/local/bin不可写

在安装tig时,HomeBrew在安装依赖项时显示以下问题:

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
292767 次浏览

遵循亚历克斯的回答,我能够解决这个问题;似乎这不是一个特定于正在安装的包的问题,而是homebrew文件夹的权限的问题。

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

对于某些包,你可能还需要对/usr/local/share/usr/local/opt这样做:

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

与其运行任何特定的命令,我建议运行brew doctor并认真对待所有警告。你可能会遇到其他问题,而这些问题在这个问题中可能没有体现出来。

此外,随着brew的更新,某些命令可能仍然有效,也可能不有效。brew doctor,然而,将确保你得到最新的故障排除。

如果你在finder中找到文件夹,右键单击并选择“获取信息”,你可以进入文件夹的“共享和权限”部分,并允许“读取&写上“to everyone”

这就是我所做的使符号链接传递此错误。此外,brew似乎也重置了文件夹上的权限,就好像你没有改变任何东西一样

我发现以下与Sophos反病毒用户相关:

https://stackoverflow.com/a/32981184 < a href = " 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版本中。

我发现对于我的特定设置,以下命令是有效的

brew doctor

然后它告诉我我的错误在哪里,然后这个与上面的注释略有不同的命令。

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

其他答案是正确的,就他们而言,但他们没有回答为什么这个问题可能会发生,以及如何解决这个根本原因。

导致

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

  1. 已使用其他用户执行自制程序安装,而不是您当前使用的用户。Homebrew希望只有最初安装它的用户才会想要使用它。
  2. 您安装了一些不使用brew写入/usr/local的软件。这是brew doctor建议的原因,如果你运行它。

解决方案

多用户家酿

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

详细的说明可以在在线中找到,但简单的答案是:

  1. 创建组 named brew:

    1. 打开系统设置
    2. 单击账户
    3. 点击“+”(如有需要,请先解锁)
    4. 新帐户下选择集团
    5. 进入酿造
    6. 单击创建组
    7. 李< / ol > < / >
    8. 选择酿造组,并将您想要使用brew的用户帐户添加到其中。
    9. 更改/usr/local文件夹组的所有权:sudo chgrp -R brew /usr/local
    10. 修改权限,将/usr/local添加为组:sudo chmod -R g+w /usr/local
    11. 更改homebrew缓存目录组:sudo chgrp -R brew /Library/Caches/Homebrew
    12. 修改自制缓存目录权限:sudo chmod -R g+w /Library/Caches/Homebrew

    单用户自制

    如果你不打算在Homebrew中使用多个用户,那么其他答案提供的解决方案,基于brew doctor的建议可能就足够了:

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

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

    验证

    在这些步骤之后,brew doctor应该报告酿造组中任何用户的成功,假设你已经登出并重新登录以应用新的组成员资格(如果你走的是多用户路线)。如果您只是纠正了单个用户自制程序的错误,那么应该不需要登出和重新登录,因为您的组成员都没有改变。

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

所以,先做这个。

对于熟悉自制啤酒的人来说,这可能是正常的做法,但我不是这样的人。

编辑:我发现我需要通过运行brew doctor来更新,正如@kinnth对同一问题的回答所建议的那样。

一般的故障排除工作流可能是这样的: 1. 运行brew update 2. 如果这不能帮助运行brew doctor并遵循它的指示 3.如果这没有帮助检查堆栈溢出

这是因为当前用户不允许在该路径中。因此,要更改r/w(读/写)权限,您可以使用1。Terminal,或者2。图形化“获取信息”窗口。

1. 使用终端

谷歌如何从终端使用chmod /乔恩(改变模式/改变所有者)命令

2. 使用图形化的“获取信息”

你可以右键单击你想要更改权限的文件夹/文件,然后打开得到信息,它会向你显示一个如下所示的窗口,在底部你可以轻松地更改r/w权限: enter image description here < / p >

如果可能的话,请在临时工作结束后将权限更改为“只读”

而做Brew链接节点此外,我得到了以下问题以及:

错误:不能包含/node符号链接 /usr/local/include不可写

连接/usr/local/Cellar/node/9.3.0...错误:权限被拒绝@ dir_s_mkdir - /usr/local/lib

要解决上述问题,只需转到/usr/local/并检查文件夹“include”和“lib”的可用性,如果这些文件夹不可用,只需手动创建它们。

并再次运行Brew安装节点

对于那些正在寻找/usr/local/sbin不可写错误的人:

更新:可以是/usr/local/someOtherFolderName,例如/usr/local/include。你只需要创建一个文件夹:

  • sudo mkdir someOtherFolderName

首先创建sbin文件夹,注意这需要sudo权限

  • cd /usr/local

  • sudo mkdir sbin

  • sudo chown -R $(whoami) $(brew --prefix)/*

  • brew link yourPackageName

我的问题是

Error: Could not symlink share/man/man7/ABORT.7
/usr/local/share/man/man7 is not writable.

chown没有帮助,但我遵循运行brew doctor的建议,这个警告帮助了我:

Warning: Broken symlinks were found. Remove them with `brew prune`:
/usr/local/share/man/man3/*

之后brew prune都工作正常!

我发现了同样的问题,我们可以分三步解决:-

步骤1

sudo chown -R $(whoami) $(brew --prefix)/*

步骤2

brew doctor

步骤3

brew prune or brew cleanup

如果你仍然遇到任何链接问题,让我们说mysql,只写

brew link mysql

这是可行的。

对于那些在运行Mac OS High Sierra时遇到这个问题的人(在这篇文章发表4年后),这里概述的步骤为我解决了这个问题。基本上只是概述卸载和重新安装brew。

https://medium.com/@mrkdsgn/brew-error-on-macos-high-sierra-check-you- ha- permission-to-write-to-usr-local-e8bd1c6a22d4

运行这些步骤后,brew link工作得很好!

对于那些不熟悉的人:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE

如果你已经在/usr/local中为你正在安装的包创建了一个目录,你可以尝试删除这个目录。

在我的情况下,我之前安装了我试图安装的包,没有使用brew,然后卸载了它。之前的安装留下了一个目录/usr/local/<my_package>/。我删除了这个文件夹(sudo rm -rf /usr/local/<my_package>/),之后酿造链接步骤成功。