【问题标题】:How to fix homebrew permissions?如何修复自制软件权限?
【发布时间】:2013-05-02 04:12:50
【问题描述】:

我现在已经卸载并安装了 3 次 Homebrew,因为它似乎永远不允许我安装任何东西,因为它在大多数安装结束时拒绝了我的权限。

作为一个例子,我将发布我目前面临的这个 libjpeg 下载场景。

我尝试安装 libjpeg 并得到:

$ brew install libjpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mountain_lion.bottle.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/jpeg-8d.mountain_lion.bottle.1.tar.gz
==> Pouring jpeg-8d.mountain_lion.bottle.1.tar.gz
Warning: Could not link jpeg. Unlinking...
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link jpeg'
Error: Permission denied - /usr/local/opt/jpeg

'brew link jpeg' 结果

Error: Permission denied - /usr/local/opt/jpeg

这是我的酿酒医生读到的

$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run brew link on these:

jpeg

这个权限问题导致无法在任何东西上使用 brew,我非常感谢任何建议。

【问题讨论】:

    标签: macos homebrew libjpeg


    【解决方案1】:

    我可以通过在文件夹上使用chown 来解决问题:

    sudo chown -R "$USER":admin /usr/local
    

    您(很可能)也必须在/Library/Caches/Homebrew 上做同样的事情:

    sudo chown -R "$USER":admin /Library/Caches/Homebrew
    

    显然我以前使用过sudo,改变了我对/usr/local 的文件夹权限, 从这里开始,所有使用 brew 的安装都被证明是成功的。

    这个答案来自gitHub's homebrew issue tracker

    【讨论】:

    • 谢谢。我还需要运行 sudo chown -R $USER:admin /Library/Caches/Homebrew 来解决我的权限问题。
    • 将 /usr/local 的所有权更改为特定用户不是解决方案。 如果你有一个单一的用户系统,这是一个可怕的黑客和解决方法。但是你也可以 chown -R / $USER:$USER
    • @fijiaaron 那么更好的解决方案是什么?
    • chowning /usr/local :完全疯狂的解决方案。非常希望这实际上不是派对路线。
    • 对于那些抱怨这个解决方案会搞乱多用户系统的人(@fijiaaron、@JohnClements、@hmijail、@Alex)——这正是组权限被反转的原因。在 macOS 上,admin 组是每个管理员用户(除其他外,每个 macOS 用户帐户用户都可以sudo),因此通过运行chown -R …:adminchmod -R g+w /usr/local(如@AndreaDeGaetano 所建议),您在这里不会做错任何事,并且与使用/usr/local/brew的其他用户的问题为零。
    【解决方案2】:

    针对 macOS High Sierra 用户的新命令,因为无法在 /usr/local 上使用 chown

    bash/zsh:

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

    fish:

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

    参考:Can't chown /usr/local in High Sierra

    【讨论】:

    • 我用的是鱼壳,不得不用下面的:sudo chown -R (whoami) (brew --prefix)/*
    • 相关。对于我想要做的事情,我必须sudo mkdir /usr/local/Frameworks,然后是这个答案中出现的 chown 命令。
    • 你拯救了我的一天...操作...周...我在大苏尔
    • 这解决了我的问题:sudo chown -R $(whoami) $(brew --prefix)/*
    • 也适用于 Mac OS Big Sur,我仍然使用 Rosetta 模拟器以及操作系统终端的副本。
    【解决方案3】:

    对于像我一样来到这里的任何人来说,作为第一个选择,请按照以下建议进行操作:

    brew doctor
    

    这是最安全的路径,除此之外,它还建议我:

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

    解决了权限问题。

    OP 就是这样做的,但显然没有得到上述建议;你可能会,而且最好从那里开始,如果没有帮助,然后再寻找非平凡的解决方案。

    【讨论】:

    • 确认这解决了您在 2017 年 5 月之前可能遇到的任何权限问题
    • 还可以确认这解决了任何权限问题,然后能够轻松升级我的节点版本 - 06/06/2018 - 谢谢
    • brew doctor 不会发现所有问题。我遇到的问题是 /usr/local/Frameworks 不存在,创建它并设置所有权修复了它。 brew 本身并没有注意到这是一个问题。
    • 我收到 chown: /usr/local: Operation not permitted 自 2019 年 7 月 5 日起无效
    • 医生的提示可能是这里最好的提示之一,因为它可以随时修复(或帮助修复)不同的问题!
    【解决方案4】:

    如果您使用的是 OSX High Sierra,/usr/local 不能再成为chown'd。您可以使用:

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

    【讨论】:

    • 谢谢。救了我!
    • 我发现 $(brew --prefix) 只是给了我 /usr/local,High Sierra 坚称我无法将权限更改为...但是由于 brew 想要“/usr”的权限/local/Frameworks”,我可以改用“$(b​​rew --prefix)/Frameworks”,之后“brew link python@2”对我来说效果很好。
    • 所有拥有多个用户的Mac用户,使用这个!
    • 感谢我在 OSX High Sierra 上,显然我们不能像以前版本的 MAC OSX 那样 chown /user/local 了。这对我有用!
    • 这终于解决了我在 Big Sur 上的问题。我的 Mac 上有两个用户帐户,这导致了问题。
    【解决方案5】:

    我没有 /usr/local/Frameworks 文件夹,所以这为我修复了它

    sudo mkdir -p /usr/local/Frameworks
    sudo chown -R $(whoami) /usr/local/Frameworks
    

    第一行创建一个新的 Frameworks 文件夹供 homebrew (brew) 使用。 第二行为该文件夹提供了您当前的用户权限,这就足够了。

    用到的命令如下:

    mkdir - 创建目录 [-p 如果存在则没有错误,根据需要创建父目录]

    chown - 更改文件所有者和组 [-R 递归操作文件和目录]

    whoami - 打印有效的用户 ID

    我有 OSX High Sierra

    【讨论】:

      【解决方案6】:

      我有这个问题.. 一个可行的解决方案是更改/usr/local 的所有权 给当前用户而不是root by:

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

      但这确实不是正确的方法。主要是如果您的机器是服务器或多用户。

      我的建议是按照上述方式更改所有权,并使用 Brew 执行任何您想实现的操作 ..(更新、安装...等),然后将所有权重置为 root:

        sudo chown -R root:admin /usr/local
      

      这将解决问题并保持所有权设置正确。

      【讨论】:

      【解决方案7】:

      我还不想乱搞文件夹权限,所以我做了以下操作:

      brew doctor
      brew upgrade
      brew cleanup

      然后我能够继续成功安装我的其他 brew 配方。

      【讨论】:

      • 这对我的问题很有效。我已经获得了自己的权限。\
      • 这被低估了!这解决了我的问题。
      【解决方案8】:

      来自投票最多的answer 的命令对我不起作用。

      它得到了输出:

      chown: /usr/{my_username}dmin: 非法用户名

      这个命令可以正常工作(/usr/local 的组已经是admin):

      sudo chown -R $USER /usr/local
      

      【讨论】:

      • 添加一些引号sudo chown -R "$USER":admin /usr/local
      • @skywinder 您的回答对我有用。不必在 $USER 上使用引号。
      • sudo chown -R "$USER":admin /usr/local 你用你的名字替换 $USER。
      • 这导致Error: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
      • chown: /usr/local: Operation not permitted
      【解决方案9】:

      如果您想要一种比 chown -R 更有针对性的方法,您可能会发现 this fix-homebrew 脚本很有用:

      #!/bin/sh
      
      [ -e `which brew` ] || {
          echo Homebrew doesn\'t appear to be installed.
          exit -1
      }
      
      BREW_ROOT="`dirname $(dirname $(which brew))`"
      BREW_GROUP=admin
      BREW_DIRS=".git bin sbin Library Cellar share etc lib opt CONTRIBUTING.md README.md SUPPORTERS.md"
      
      echo "This script will recursively update the group on the following paths"
      echo "to the '${BREW_GROUP}' group and make them group writable:"
      echo ""
      
      for dir in $BREW_DIRS ; do {
          [ -e "$BREW_ROOT/$dir" ] && echo "    $BREW_ROOT/$dir "
      } ; done
      
      echo ""
      echo "It will also stash (and clean) any changes that are currently in the homebrew repo, so that you have a fresh blank-slate."
      echo ""
      
      read -p 'Press any key to continue or CTRL-C to abort.'
      
      echo "You may be asked below for your login password."
      echo ""
      
      # Non-recursively update the root brew path.
      echo Updating "$BREW_ROOT" . . .
      sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
      sudo chmod g+w "$BREW_ROOT"
      
      # Recursively update the other paths.
      for dir in $BREW_DIRS ; do {
          [ -e "$BREW_ROOT/$dir" ] && (
              echo Recursively updating "$BREW_ROOT/$dir" . . .
              sudo chmod -R g+w "$BREW_ROOT/$dir"
              sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
          )
      } ; done
      
      # Non-distructively move any git crud out of the way
      echo Stashing changes in "$BREW_ROOT" . . .
      cd $BREW_ROOT
      git add .
      git stash
      git clean -d -f Library
      
      echo Finished.
      

      它没有对您的用户执行chmod,而是授予admin 组(您可能属于该组)对自制软件使用的/usr/local 中特定目录的写入权限。它还准确地告诉您在做之前它打算做什么。

      【讨论】:

      • 请注意,有些路径似乎发生了一些变化,因此您可能需要 chgrp 和 chmod 更多目录,但我仍然更喜欢这种方式,而不是 chown Everything 给您的用户方法!
      【解决方案10】:

      这对我有用:

      sudo chown -R "$USER":admin /usr/local/Cellar/*
      brew cleanup
      

      【讨论】:

      • 谢谢。在 macOS Catalina (10.15.7) 上工作。
      • 谢谢;在 macOS Big Sur (11.6) 上工作。
      【解决方案11】:

      我用这些命令解决了我的问题:

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

      【讨论】:

      • 谢谢!这是对Mac OS 10.13.4 有帮助的唯一事情,就我而言,我必须创建sudo mkdir /usr/local/Frameworkssudo chown -R $(whoami) /usr/local/Frameworks 才能链接python!
      【解决方案12】:

      就我而言,/usr/local/Frameworks 甚至都不存在,所以我做到了:

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

      然后一切都按预期进行。

      【讨论】:

      • 这解决了我的问题,但没有被 brew doctor 检测为问题。
      • 是的。在 Catalina 遇到同样的问题,这也是我的解决方案。
      • chown: /usr/local/Frameworks/.keepme: 不允许操作?
      【解决方案13】:

      这解决了我的问题。

      sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
      sudo chown -R "$USER":admin /usr/local
      

      【讨论】:

      • 这解决了这个问题,但我会在成功链接后撤消这一步。只是出于安全原因。
      【解决方案14】:

      对于多用户 Mac,这对我有用:

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

      【讨论】:

        【解决方案15】:

        首先,在 MacOS Catalina 中,不再允许更改 /usr/local 所有权的基本方法。例如:

        $ sudo chown -R "$USER":wheel /usr/local
        Password:
        chown: /usr/local: Operation not permitted
        $ sudo chown -R "$USER" /usr/local
        chown: /usr/local: Operation not permitted
        $ sudo chown -R $(whoami) /usr/local
        chown: /usr/local: Operation not permitted
        

        因此,不能使用上述流行的答案。其次,但是,退后一步,如果主要关注的是安装或升级 Homebrew,而不是想更改 /usr/local 本身的权限,那么它可能是矫枉过正(就像拿大锤敲钉子一样)更改 /usr/local 的权限。它会影响您的整台机器,其他软件也可能正在使用 /usr/local。比如我在/usr/local中有maven和mySQL相关的文件。

        更精确的解决方案是按照the Homebrew GitHub site 给出的说明安装 Homebrew,即

        /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
        

        它将 Homebrew 安装在 /usr/local 内,而不改变 /usr/local 本身的所有权。而是将 Cellar、Caskroom、Frameworks、Homebrew 等安装在 /usr/local 中。在我看来,这似乎是一个更优雅、更精确的解决方案。

        【讨论】:

        • 我在 macOS Big Sur 上尝试安装 brew(格式化后),这是唯一可行的方法。以上所有方法一直给我permission denied
        • 我试过那行但仍然收到错误error: unable to unlink old 'Library/Homebrew/cmd/vendor-install.sh': Permission denied
        【解决方案16】:

        对我来说,它工作后

        brew doctor

        更改权限命令导致另一个错误

        chown: /usr/local: Operation not permitted

        【讨论】:

          【解决方案17】:

          所有这些建议都可能有效。不过,在最新版本的 brew doctor 中,提出了更好的建议。

          首先 - 通过在命令行中运行它来修复您可能已经对 /usr/local 造成的混乱:

          sudo chown -R root:wheel /usr/local

          然后获取应该专门针对该用户的路径的所有权:

          sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale
          

          如果您运行sudo brew update,然后阅读您将遇到的所有警告和错误,所有这些信息都可用...

          【讨论】:

          • 将 /usr/local 中所有内容的所有权设置为 root:wheel 是危险且不必要的。相关路径为 /usr/local/Cellar
          • 你不需要触及这些权限,除非你已经..说已经为你的开发用户取得了它们的所有权 - 或者在 brew 已经破坏它们的情况下,因为它进行了安装用须藤。在这种情况下,brew its self 建议使用此修复程序 - 我认为这比留下 sudo 混乱要危险得多。
          • 你能提供一个 brew 推荐的链接吗?
          • 最佳答案。在我从另一台 Mac 进行迁移后,它起作用了。
          【解决方案18】:

          在 MacOS Mojave 上,我也无权访问 /usr/local 文件夹 (sudo chown -R "$USER":admin /usr/local) 的 chown

          sudo chown -R "$USER":admin /usr/local/* 确实对我有用,但是改变了本地文件夹所有内容的权限。

          希望这将帮助其他人解决同样的问题。

          【讨论】:

          • 在 Catalina 上为我工作。在我这样做之前,我根本无法安装 brew。在我这样做之后,它是 badda-bing badda-boom。
          【解决方案19】:

          其实很简单,执行这个命令: brew doctor

          它会告诉你如何解决权限问题,例如在我的例子中:

          这就是问题所在:

          Warning: The following directories are not writable by your user:
          /usr/local/share/man/man5
          /usr/local/share/man/man7
          

          这就是解决方案:

          You should change the ownership of these directories to your user.
            sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
          

          【讨论】:

            【解决方案20】:

            在 github 上有一个杀手级脚本,它修复了 /usr/local 和 brew 目录上的权限,以便任何属于“admin”组成员的人都可以访问。

            https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

            这是一个比所选答案更好的解决方案,因为如果您将 /usr/local/___ 目录更改为 $USER,那么您会破坏该机器上任何其他自制软件的管理员用户。

            以下是我发布此内容时的脚本内容:

            chgrp -R admin /usr/local
            chmod -R g+w /usr/local
            
            chgrp -R admin /Library/Caches/Homebrew
            chmod -R g+w /Library/Caches/Homebrew
            
            chgrp -R admin /opt/homebrew-cask
            chmod -R g+w /opt/homebrew-cask
            

            【讨论】:

              【解决方案21】:

              我在 Catalina 上遇到了这个错误:

              touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
              touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/.git/FETCH_HEAD: Permission denied
              fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
              fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
              

              我只需要 chown Homebrew 目录

              sudo chown -R "$USER":admin /usr/local/Homebrew
              

              【讨论】:

              • 这就是我的答案
              【解决方案22】:

              使用以下命令卸载 brew 并重新安装,以确保链接到 brew github 以及与本地文件夹的关联权限正常工作:

              /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

              这非常有效。我自己没有权限乱搞,只需重新安装 Homebrew 就可以了!

              来源:https://gist.github.com/irazasyed/7732946#gistcomment-2298740

              【讨论】:

              • 链接中的终端命令是sudo chown -R $(whoami) $(brew --prefix)/*
              • @Kamil.S 哦,那一定是github问题标题,尝试向下滚动到aether2501评论
              【解决方案23】:
              cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
              

              【讨论】:

                【解决方案24】:

                如果您碰巧在您的 mac 上有多个帐户,很可能您当前的帐户与最初拥有 /usr/local 的主帐户属于不同的用户组,这意味着上述解决方案都不起作用。

                您可以通过尝试ls -la /usr/local 来检查,并查看哪些用户和组有权对该目录进行写入。 就我而言,它是root wheel。可能是root admin

                我通过使用以下命令将当前用户添加到主帐户所拥有的组中解决了这个问题。

                sudo dseditgroup -o edit -a $(whoami) -t user admin
                sudo dseditgroup -o edit -a $(whoami) -t user wheel
                

                之后它就像一个魅力。希望它可以帮助那里的人。

                【讨论】:

                  【解决方案25】:

                  如果您没有最新的 Homebrew:我过去通过强制 Homebrew 以 root 身份运行来“修复”这个问题,这只能通过将 Homebrew 可执行文件的所有权更改为 root 来完成。在某个时候,他们删除了此功能。

                  而且我知道他们会给出很多警告说它不应该以 root 身份运行,但是拜托,否则它不能正常工作。

                  【讨论】:

                    【解决方案26】:

                    我尝试了此页面上的所有内容,最终使用了此解决方案:

                    brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;

                    我的情况与 OP 类似,但是我的问题是由 brew cask 运行 sudo 引起的,然后我的密码不正确。在此之后,我被阻止安装的权限卡住了。

                    【讨论】:

                      【解决方案27】:

                      解决文件夹运行的 Brew 权限错误

                      brew prune
                      

                      这将解决问题并且我们不必更改任何目录。

                      【讨论】:

                      • 这个不行了,你现在必须做brew cleanup --prune-prefix
                      【解决方案28】:

                      就我而言,我在删除和重新安装 SaltStack 时遇到了问题。

                      运行后:

                      ls -lah /usr/local/Cellar/salt/
                      

                      我注意到群主是“员工”。 (顺便说一句,我正在运行 macOS Mojave 版本 10.14.3。)员工组可能与我的工作场所配置有关,但我真的不知道。无论如何,我保留了该组以防止自己进一步破坏任何东西。

                      然后我跑了:

                      sudo chown -R "$USER":staff /usr/local/Cellar/salt/
                      

                      在那之后,我成功地用这个命令(不是root)删除了它:

                      brew uninstall --force salt
                      

                      【讨论】:

                        【解决方案29】:

                        我使用了这两个命令并保存了我的问题

                        sudo chown -R $(whoami) /usr/local
                        
                        sudo chown -R $(whoami) /usr/local/etc/bash_completion.d /usr/local/lib/python3.7/site-packages /usr/local/share/aclocal /usr/local/share/locale /usr/local/share/man/man7 /usr/local/share/man/man8 /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew/locks
                        

                        【讨论】:

                          【解决方案30】:

                          尝试也执行此命令

                          sudo chmod +t /tmp

                          【讨论】:

                            猜你喜欢
                            • 2014-10-14
                            • 2019-09-18
                            • 1970-01-01
                            • 2017-03-12
                            • 1970-01-01
                            • 1970-01-01
                            • 2021-03-11
                            • 1970-01-01
                            相关资源
                            最近更新 更多