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

Jik*_*ose 341 homebrew

安装时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
Run Code Online (Sandbox Code Playgroud)

Jik*_*ose 560

亚历克斯的回答后,我能够解决这个问题; 这似乎是一个非特定于正在安装的软件包但homebrew文件夹权限的问题.

sudo chown -R `whoami`:admin /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Run Code Online (Sandbox Code Playgroud)

  • 不将所有/ usr/local/bin重新用于当前使用会给系统或其他用户带来麻烦吗? (25认同)
  • 不会'sudo chown -R`whami`:admin/usr/local/bin`等同于答案中的命令,而不需要用你的实际用户名替换`yourusename`吗? (10认同)
  • 我还必须递归地chown`usr/local/opt`.之后它起作用了. (5认同)
  • 在我的mac(10.9.5)上,`/ usr/local/bin`(和朋友)的权限似乎每天都会恢复为`drwxr-xr-x +`和`root wheel`.我每次想要'bre​​w install`时都必须重新配置perms.我假设操作系统正在重置权限以保护我?我怎么能让它停下来?(我试过`chflags uchg ...`但是这会阻止brew的安装.) (5认同)
  • 我将我的帐户添加到“wheel”组。这允许我“sudo chmod -R g+w /usr/local”——这允许组“wheel”的成员写入文件夹。似乎比将这些敏感文件夹的所有者更改为比 root 更不安全的帐户更安全。 (2认同)

zak*_*een 202

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

此外,随着brew随时间更新,特定命令可能保持有效,也可能不保持有效.brew doctor但是,将确保您获得最新的故障排除.

  • `brew doctor`不会解决这个问题,它只会告诉你它,当你接受医生的建议时,brew说不能这样做.那不是解决方案 (30认同)
  • 我不敢相信你的答案不那么受欢迎.它肯定比上面提到的猜测更谨慎. (8认同)
  • 也许有人改进了它.现在brew医生建议我运行一个类似的cmd到最流行的答案,并在这样做后,brew符号链接工作.我在Mac上,所以我们会看到它持续多久.:-) (7认同)
  • 酿酒医生提供了EXACT问题,并提供了手动解决方案! (6认同)
  • 这非常有用,谢谢。修复了一些其他特殊目录,以使上述建议丢失。 (2认同)

sto*_*her 73

其他答案是正确的,只要他们去,但他们不回答为什么可能发生这个问题,以及如何解决这个根本原因.

原因

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

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

多用户自制软件

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

详细说明可以在网上找到,但快速答案如下:

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

    1. 打开系统首选项
    2. 单击帐户
    3. 点击"+"(必要时先解锁)
    4. 新帐户下选择
    5. 进入brew
    6. 单击" 创建组"
  2. 选择brew组,并将要使用brew的用户帐户添加到其中.
  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组中的任何用户成功,假设您已注销并重新申请以应用新的组成员身份(如果您使用了多用户路由).如果您刚刚更正了单个用户自制程序的内容,则无需注销并重新登录,因为您的组成员资格都没有更改.

  • 谢谢!我应该阅读有关unix用户组的更多信息.我完全无法理解它如何很好地消化推理.但这听起来非常明智,感谢指针! (2认同)
  • 这修复了我的brew链接问题,谢谢. (2认同)

gok*_*and 65

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

  • 这对我有用 (5认同)

小智 32

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

brew doctor
Run Code Online (Sandbox Code Playgroud)

然后,这向我展示了我的错误,然后这与上面的评论略有不同.

sudo chown -R $(whoami) /usr/local/opt
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的明显建议.我倾向于忘记'brew doctor` (2认同)

小智 12

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

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

运行这些步骤后,brew link 就像一个魅力!


Har*_*_pb 11

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

步骤1

sudo chown -R $(whoami) $(brew --prefix)/*
Run Code Online (Sandbox Code Playgroud)

第2步

brew doctor
Run Code Online (Sandbox Code Playgroud)

第3步

brew prune
Run Code Online (Sandbox Code Playgroud)

如果你仍然得到的任何连接问题,让说的mysql,只写

brew link mysql
Run Code Online (Sandbox Code Playgroud)

这会奏效.

  • 调用“brew prune”已被禁用。请改用“酿造清理”。 (2认同)

Fra*_*tew 9

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

所以,先做这件事.

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

编辑:我发现我需要brew doctor按照@ kinnth对同一个问题的答案的建议进行更新.

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


Was*_*tna 6

在做brew链接节点时另外我也遇到了以下问题:

错误:无法使用符号链接include/node/usr/local/include不可写.

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

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

然后再次运行brew install节点


Has*_*Ali 5

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

1.使用终端

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

2.使用图形"获取信息"

您可以右键单击要更改权限的文件夹/文件,然后打开" 获取信息",这将显示如下所示的窗口,您可以在其中轻松更改r/w权限: 在此输入图像描述

如果可能,请记住在临时工作后将权限更改为"只读"