自制程序:无法符号链接,/ usr / local / bin不可写[关闭]


361

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

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

3
这不属于stackowerflow.com,而superuser.com或askdifferent.com
Ondra参观Žižka

Answers:


582

按照亚历克斯的回答,我能够解决这个问题。似乎这不是特定于要安装的软件包的问题,​​而是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

25
是否将所有/ usr / local / bin都归还给当前使用,这不会给系统或其他用户带来麻烦吗?
Don Giulio 2015年

10
会不会sudo chown -R WHOAMI :admin /usr/local/bin相当于在回答命令,而不需要更换yourusename与实际的用户名?
詹森·斯威特

5
我还必须usr/local/opt递归地绞死。在那之后它起作用了。
2015年

5
在我的Mac(10.9.5)的权限/usr/local/bin(和朋友)似乎恢复到drwxr-xr-x+root wheel每一天。每次我想都必须重新配置权限brew install。我认为操作系统正在重置权限来保护我?我该如何停止?(我已经尝试过了,chflags uchg …但是这阻止了brew的安装。)
Quinn Comendant 2015年

1
我将帐户添加到“车轮”组中。这使我可以“ sudo chmod -R g + w / usr / local”-这允许“ wheel”组的成员写入文件夹。似乎比将这些敏感文件夹的所有者更改为比root用户安全性较低的帐户更为安全。
迈克尔·克雷布斯

220

建议不要运行任何特定的命令,brew doctor而应认真运行并认真对待所有警告。您可能还会遇到其他问题,而这个问题可能没有解决。

另外,随着Brew随时间更新,某些命令可能有效也可能无效。brew doctor,但可以确保您进行最新的故障排除。


9
我不敢相信您的回答不太受欢迎。当然,比上面的猜测更为谨慎。
罗伯特·费尔法克斯

34
brew doctor不能解决问题,只会告诉您有关问题,在您听取医生的建议后,布鲁尔说无法解决。那不是解决方案
Keith Tyler

8
也许有人改进了它。现在酿造医生建议我对最流行的答案运行类似的cmd,然后酿造symlink起作用。我在Mac上,所以我们会看到它能持续多久。:-)
约书亚·理查森

2
这非常有用,谢谢。修复了一些其他特殊目录,以使上述建议丢失。
SwimBikeRun

6
酿酒医生提供了EXACT问题,并提供了手动解决方案!
netrox

74

就其他方面而言,其他答案都是正确的,但它们并未回答可能会出现此问题的原因以及如何解决该根本原因。

原因

有两个可能的原因导致此问题:

  1. 自家安装是由您当前使用的用户以外的其他用户执行的。Homebrew希望只有最初安装它的用户才想使用它。
  2. 您安装了一些不使用brew即可写入/ usr / local的软件。brew doctor如果您运行它,这就是原因提示。

多用户自制软件

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

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

  1. 创建一个名为brew 的组

    1. 开放系统偏好设置
    2. 点击帐户
    3. 点击“ +”(必要时先解锁)
    4. 新帐户下,选择
    5. 进入冲泡
    6. 单击创建组
  2. 选择酿造组,然后向其中添加要使用酿造的用户帐户。
  3. 更改/ usr / local文件夹组的所有权: sudo chgrp -R brew /usr/local
  4. 更改权限以将写操作添加到/ usr / local作为组: sudo chmod -R g+w /usr/local
  5. 更改自制缓存目录组: sudo chgrp -R brew /Library/Caches/Homebrew
  6. 更改自制缓存目录权限: 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组中的任何用户成功。如果您只是针对单用户自制程序进行了更正,则无需注销并重新登录,因为您的组成员身份均未更改。


2
谢谢!我可能应该阅读有关UNIX用户组的更多信息。我完全不知道如何充分地理解推理。但这听起来很明智,谢谢您的指导!
Jikku Jose

1
UNIX组比您想象的要简单-每个文件都拥有拥有该文件的“用户”和“组”以及“其他”文件的读写权限。如果您设置拥有文件或文件夹的组,并为该文件夹的“组”添加写权限,则该组中的任何用户都可以写入该文件夹。确实没有什么比这更多的了。不像Windows中的权限那么复杂。
碎石机

1
因此,这是将一组文件的权限系统整合到组中的一种简单方法,以便可以轻松添加多个用户以一次性应用所有这些权限?
Jikku Jose

2
这解决了我的Brew链接问题,谢谢。
基思·泰勒

拥有敏感的目录(例如/usr/local/bin可写组,特别是esp)仍然让我感到有点危险。在多用户环境中。这真的是“官方”酿造方式吗?
corwin.amber16年

67

对于那些正在寻找/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


6
这对我
罗宾

我还需要将目录添加到我的〜/ .bash_profile中:PATH=$PATH:/usr/local/sbin
Julien

经过数小时的搜索,这是唯一对我有用的东西。我在High Sierra上。
ItsJoeTurner

34

我发现我的特定设置以下命令有效

brew doctor

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

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

2
谢谢您的明显建议。我往往会忘记brew doctor
安东尼

1
这解决了这里的问题
khaosdoctor

brew doctor很好。
AechoLiu

就像魅力一样工作,谢谢
hexley19年

15

我发现了同样的问题,我们可以通过三个步骤来解决:

步骤1

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

第2步

brew doctor

第三步

brew prune

如果您仍然遇到任何链接问题,请说出mysql,只需编写

brew link mysql

这将起作用。


1
为Rabbitmq为我工作
Omar

“第一步”的目的是什么?
康拉德C,

1
酿造医生竖起大拇指!没有做酿造修剪,但安装了其他缺少的软件包,它适用于mongodb。
Chenlu

禁用“酿造西梅”。请改用“ brew cleanup”。
hanumanDev

12

对于那些在运行Mac OS High Sierra时遇到此问题(在发布此文章后的4年内获批)的用户-此处概述的步骤为我解决了这个问题。本质上只是概述了卸载和重新安装brew。

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

执行完这些步骤后,brew link 就像魅力一样发挥了作用!


我发现这对我有用
vr_driver

谢谢!尝试了哈利(Harry)的最高答案,没有运气-尝试了一下,它就像一个魅力!

为我工作,谢谢!
禅宗

9

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

所以,首先要做。

对于熟悉自制软件的人来说,这可能是正常的做法,但我不是其中之一。

编辑:我发现我需要通过运行brew doctor@@@@@@@@@@@@@@@@ Kninth的建议来更新。

常规的故障排除工作流程可能如下所示:1.运行brew update 2.如果这样做不能帮助运行brew doctor并按照其说明进行操作3.如果这样做不能帮助检查堆栈溢出


1
这对我来说是固定的,在其他任何事情上都值得做。
Rob Evans

酿酒医生所做的一切都是指出,我在酒窖中不喜欢小桶……因此无济于事,不能解决OP的问题
AlxVallejo

@AlxVallejo这是我解决与OP几乎相同的错误时遇到的问题的方法。您从Brew Doctor收到的消息对我来说听起来像是另外一个问题。“ 1.运行brew更新2.如果不帮助运行brew doctor并遵循其指示3.如果不帮助检查堆栈溢出”的工作流程可能仍然适用。
FragmentalStew

6

在做brew link节点时另外,我也遇到以下问题:

错误:无法符号链接包含/节点/ usr / local / include是不可写的。

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

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

并再次运行brew install节点


5

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

1.使用终端

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

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

您可以右键单击要更改其权限的文​​件夹/文件,然后打开“ 获取信息”,该窗口将显示如下所示的窗口,在该窗口的底部您可以轻松更改r / w权限: 在此处输入图片说明

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


使用Brew Doctor-它会正确识别需要修复的(系统)文件夹。
johndpope '17


2

我的问题是

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一切正常!


大。为我工作。
Bagusflyer

1

对于那些不熟悉的人:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE

0

如果转到Finder中的文件夹,请右键单击并选择“获取信息”,然后可以转到该文件夹​​的“共享和权限”部分,并允许对“所有人”进行“读取和写入”

这是我使符号链接通过此错误的方法。而且brew似乎也重置了文件夹的权限,就好像您没有更改任何内容一样


0

如果您已经有/usr/local要安装的软件包的目录,则可以尝试删除该目录。

就我而言,我以前曾安装过尝试不使用brew进行安装的软件包,然后又将其卸载了。/usr/local/<my_package>/该先前安装中遗留了一个目录。我删除了此文件夹(sudo rm -rf /usr/local/<my_package>/),然后brew链接步骤成功。

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.