首页 文章

如何修复自制权限?

提问于
浏览
431

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

作为一个例子,我将发布我目前面临的这个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,我真的很感激任何建议 .

21 回答

  • 14

    作为像我一样在这里落地的人的第一选择,请按照以下建议你做的事情:

    brew doctor
    

    这是最安全的道路,除其他外,它建议我:

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

    这解决了权限问题 .

    OP就是这么做的,但显然没有得到上述建议;你可能会,从那里开始总是更好 .

  • 1

    实际上它很简单,执行此命令: 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
    
  • 12

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

    brew prune
    

    这将解决问题,我们不必chown任何目录 .

  • 842

    我有这个问题..一个有效的解决方案是将 /usr/local 的所有权更改为当前用户而不是 root

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

    但实际上这不是一个正确的方法 . 主要是如果您的机器是服务器或多用户 .

    My suggestion 是如上所述更改所有权并使用Brew执行任何操作..(更新,安装...等)然后将所有权重置为root,如下所示:

    sudo chown -R root:admin /usr/local
    

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

  • 5

    尝试也执行此命令

    sudo chmod t / tmp

  • 3

    github上有一个杀手级脚本,用于修复/ usr / local和brew目录上的perms,任何属于'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
    
  • 0

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

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

    参考:https://github.com/Homebrew/brew/issues/3228

  • 8

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

    而且我知道他们会发出很多警告说它不应该以root身份运行,但来吧,否则它不能正常工作 .

  • 0

    所有这些建议都可行 . 在最新版本的brew医生中,提出了更好的建议 .

    首先 - 通过在命令行中运行它来修复可能已经由 /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 然后阅读您将遇到的所有警告和错误,则所有这些信息都可用...

  • 0

    如果您使用的是OSX High Sierra, /usr/local 将不再是 chown . 您可以使用:

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

  • 25

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

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

    来自最高票的answer的命令对我不起作用 .

    它有输出:

    chown:/ usr / dmin:非法用户名

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

    sudo chown -R $USER /usr/local
    
  • 197

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

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

    我的情况类似于OP,但是我的问题特别是由于使用brew cask运行sudo,然后使我的密码不正确 . 在此之后,我遇到了阻止安装的权限 .

  • 0

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

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

    在我的情况下,/ usr / local / Frameworks甚至不存在,所以我做了:

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

    然后一切都按预期工作 .

  • 25
    cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
    
  • 205

    我有OSX High Sierra,我没有 /user/local/Frameworks 文件夹,所以这个修复了它

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

    如果您想要比毯子 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 中特定目录的写访问权限 . 它还会在完成之前准确地告诉您它打算做什么 .

  • 4

    这解决了我的问题 .

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

    我不想使用文件夹权限,所以我做了以下内容:

    brew doctor
    brew upgrade
    brew cleanup

    然后我成功地继续安装我的其他酿造配方 .

  • 3

    我能够通过在文件夹上使用 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

相关问题