【问题标题】:Homebrew: Could not symlink, /usr/local/bin is not writable [closed]Homebrew:无法符号链接,/usr/local/bin 不可写[关闭]
【发布时间】:2014-12-26 03:56:49
【问题描述】:

在安装 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

【问题讨论】:

  • 这不属于stackowerflow.com,而是属于superuser.com或askdifferent.com

标签: homebrew


【解决方案1】:

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

第一步

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

第 2 步

brew doctor

第 3 步

brew prune or brew cleanup

如果您仍然遇到任何链接问题,假设mysql,只需写

brew link mysql

这会起作用。

【讨论】:

  • 为我为 rabbitmq 工作
  • “步骤 1”的目的是什么?
  • 酿造医生竖起大拇指!没有做 brew prune,但安装了其他缺少的包,它适用于 mongodb。
  • 调用“brew prune”被禁用。请改用“brew cleanup”。
  • 为我工作。但不是brew prune,而是像@hanumanDev 建议的那样使用brew cleanup。谢谢你们。
【解决方案2】:

Alex's answer 之后,我能够解决这个问题;这似乎不是特定于正在安装的软件包的问题,​​而是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

【讨论】:

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

如果您在/usr/local 中已经为您要安装的软件包提供了一个目录,您可以尝试删除该目录。

在我的情况下,我之前安装了我试图在不使用 brew 的情况下安装的软件包,然后将其卸载。以前的安装留下了一个目录/usr/local/<my_package>/。我删除了这个文件夹 (sudo rm -rf /usr/local/<my_package>/),然后 brew link 步骤成功。

【讨论】:

    【解决方案4】:

    对于不熟悉的人:

    sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
    

    【讨论】:

      【解决方案5】:

      对于那些在运行 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 的工作就像一个魅力!

      【讨论】:

      【解决方案6】:

      我的问题是

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

      【讨论】:

      • 太棒了。为我工作。
      【解决方案7】:

      对于那些正在寻找/usr/local/sbin is not writable error的人:

      更新:可能是/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

      【讨论】:

      • 这对我有用
      • 我还需要将目录添加到我的 ~/.bash_profile:PATH=$PATH:/usr/local/sbin
      • 经过数小时的搜索,这是唯一对我有用的东西。我在高山脉。
      • 它也对我有用(OS X 11.2)。 GNU fortran 突然出现问题......但现在一切都恢复正常了。谢谢这个提示
      【解决方案8】:

      在执行 brew link node 时,我还遇到了以下问题:

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

      正在链接 /usr/local/Cellar/node/9.3.0... 错误:Permission denied @ dir_s_mkdir - /usr/local/lib

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

      然后再次运行brew install node

      【讨论】:

        【解决方案9】:

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

        所以,请先这样做。

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

        编辑:我发现我需要按照 @kinnth 对同一问题的回答所建议的运行 brew doctor 来更新。

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

        【讨论】:

        • 这为我解决了所有问题,非常值得先做。
        • 所有 brew doctor 所做的只是指出我的酒窖里有不喜欢的小桶......所以这对解决 OP 的问题没有任何帮助
        • @AlxVallejo 这就是我在收到与 OP 几乎相同的错误时遇到的问题所采取的措施。您从 Brew Doctor 收到的消息对我来说听起来像是一个不同的问题。 “1. 运行 brew update 2. 如果这无助于运行 brew doctor 并遵循其指示 3. 如果这无助于检查堆栈溢出”的工作流程可能仍然适用。
        【解决方案10】:

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

        1.使用终端

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

        2。使用图形“获取信息”

        您可以右键单击要更改权限的文件夹/文件,然后打开 Get Info 会在底部显示如下窗口,您可以轻松更改 r/w权限:

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

        【讨论】:

        • 使用 brew doctor - 它会正确识别需要修复的(系统)文件夹。
        【解决方案11】:

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

        原因

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

        1. Homebrew 安装是由您当前使用的用户以外的用户执行的。 Homebrew 预计只有最初安装它的用户才会想要使用它。
        2. 您安装了一些不使用 brew 写入 /usr/local 的软件。这就是brew doctor 建议的原因,如果你运行它的话。

        解决方案

        多用户自制软件

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

        详细说明可以在online找到,但快速回答是这样的:

        1. Create a group 命名为 brew:

          1. 打开系统偏好
          2. 点击帐户
          3. 点击“+”(必要时先解锁)
          4. 新帐户下选择
          5. 输入 酿造
          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 用户组的信息。我完全不知道它是如何很好地消化推理的。不过听起来很明智,谢谢指点!
        • unix 组比您想象的要简单 - 每个文件都具有可用于拥有该文件的“用户”和“组”以及“其他”的读取、写入和执行权限。如果您设置拥有文件或文件夹的组,并为该文件夹的“组”添加写入权限,则该组中的任何用户都可以写入该文件夹。真的没有比这更多的了。不像 Windows 中的权限那么复杂。
        • 所以这是一种将一组文件的权限系统组合到一个组的简单方法,以便可以轻松添加多个用户以一次性应用所有这些权限?
        • 这解决了我的 brew 链接问题,谢谢。
        • 仍然让我觉得有一个敏感目录有点危险,比如/usr/local/bin group-writable,尤其是。在多用户环境中。这真的是“官方”的酿造方式吗?
        【解决方案12】:

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

        brew doctor
        

        然后这显示了我的错误在哪里,然后这个命令与上面的评论略有不同。

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

        【讨论】:

        • 感谢您的明确建议。我倾向于忘记brew doctor
        • 这解决了这里的问题
        • brew doctor 很好。
        • 工作就像一个魅力,谢谢
        【解决方案13】:

        我发现以下内容与 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 中。

        【讨论】:

        • 不幸的是我仍然得到这个,并且确实安装了 Sophos,FWIW:|
        【解决方案14】:

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

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

        【讨论】:

          【解决方案15】:

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

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

          【讨论】:

          • 我不敢相信你的回答不那么受欢迎。这肯定比上面的猜测更谨慎。
          • brew doctor 不会解决问题,它只会告诉你它,当你听医生的建议时,brew 说它做不到。这不是解决方案
          • 也许有人改进了它。现在 brew doctor 建议我运行与最流行的答案类似的 cmd,并且在这样做之后 brew 符号链接可以工作。我在mac上,所以我们看看它能持续多久。 :-)
          • 这非常有用,谢谢。修复了一些其他特殊目录以 chown 以上建议遗漏。
          • brew doctor 提供了 EXACT 问题并提供了手动解决方案!
          猜你喜欢
          • 1970-01-01
          • 2017-01-09
          • 1970-01-01
          • 2018-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-29
          • 1970-01-01
          相关资源
          最近更新 更多