我已经卸载和安装了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

这个许可问题已经使它不可能使用酿造任何东西,我真的很感激任何建议。


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

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

此外,你(很可能)必须在/Library/Caches/Homebrew上做同样的事情:

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

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

这个答案来自gitHub的自制问题跟踪器


从得票最多的答案命令不工作的我。

它得到输出:

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

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

sudo chown -R $USER /usr/local

对于像我一样降落在这里的人来说,第一选择是,按照这个建议去做:

brew doctor

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

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

这解决了权限问题。

OP这样做了,但显然没有得到上述建议;你可能会,从这里开始总是更好的,然后再寻找非平凡解如果它没有帮助的话。


如果你想要一个比毯子chown -R更有针对性的方法,你可能会发现这个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操作,而是将homebrew使用的/usr/local中特定目录的写权限授予管理组(您可能属于该组)。它还会在执行之前准确地告诉你它打算做什么。


所有这些建议都可能奏效。在最新版本的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用户改为当前用户:

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

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

我的建议是像上面一样改变所有权,做任何你想用Brew实现的事情。更新,安装…等等),然后将所有权重置回根:

  sudo chown -R root:admin /usr/local

这将解决问题,并保持所有权设置在适当的集合。


如果您没有最新的Homebrew:我在过去通过强制Homebrew以根用户身份运行来“修复”这个问题,这只能通过将Homebrew可执行文件的所有权更改为根用户来实现。在某种程度上,他们删除了这个功能。

我知道他们会给出很多警告,说它不应该以根目录运行,但算了吧,否则它就不能正常工作。


也试试执行这个命令

Sudo chmod +t /tmp


github上有一个杀手级脚本,可以修复/usr/local和brew目录上的烫发,使任何“admin”组的成员都可以访问。

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

这是一个比选择的答案更好的解决方案,因为如果你把/usr/local/___目录改为$USER,那么你就破坏了那台机器上任何其他homebrew的管理用户。

以下是我发布这篇文章时脚本的核心内容:

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

这就解决了我的问题。

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

macOS High Sierra的新命令,因为不可能咀嚼/usr/local:

bash / zsh:

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

鱼:

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

参考:不能chown /usr/local在High Sierra


如果你在OSX High Sierra, /usr/local不能再被咀嚼。你可以使用:

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


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

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

我尝试了这页上的所有方法,最终使用了这个解决方案:

酿造卸载-强制酿造桶;取消$tap_name;酿造更新;啤酒清理;酿造桶清理;

我的情况与OP类似,但是我的问题是由使用酿造桶运行sudo引起的,然后让我的密码不正确。在此之后,我被阻止安装的权限所困扰。


我不想浪费文件夹权限,所以我做了以下工作:

酿造的医生 酿造升级 啤酒清理

然后我能够继续安装我的其他酿造公式成功。


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

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

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

常用命令如下:

Mkdir -创建目录[-p没有错误,如果存在,根据需要创建父目录] chown -更改文件所有者和组[- r对文件和目录进行递归操作] 打印有效的用户id

我有OSX High Sierra


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

brew prune

这将解决问题,我们不需要咀嚼任何目录。


其实很简单,执行这个命令: 酿造的医生

它会告诉你该怎么做,来修复权限问题,比如我的例子:

这就是问题所在:

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

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

对于多用户Mac来说,这对我来说是可行的:

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

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

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

然后一切都按照预期进行。


对我来说,它在那之后起作用了

酿造的医生

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

chown: /usr/local:不允许操作


在我的情况下,我有问题删除和重新安装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

在MacOS Mojave上,我也没有权限删除/usr/local文件夹(sudo chown -R "$USER":admin /usr/local)。

sudo chown -R "$USER":admin /usr/local/*确实为我工作,但是,改变本地文件夹中的所有权限。

希望这能帮助其他有同样问题的人。


我在卡特琳娜,我得到了这个错误:

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

我只需要把Homebrew目录翻个遍

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

我使用了这两个命令并解决了我的问题

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

首先,使用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相关的文件。

一个更精确的解决方案是按照Homebrew GitHub站点上给出的说明安装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目录下。在我看来,这似乎是一个更优雅、更精确的解决方案。


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

您可以通过尝试ls -la /usr/local来检查,并查看哪些用户和组有权限对该目录进行写操作。 在我的情况下,它是根轮。它可能是根管理员。

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

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

在那之后,它就像魔法一样有效。希望它能帮助到一些人。


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

ruby / usr / bin / e,“美元(卷毛-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

这很有效。我自己没有权限,只是重新安装了Homebrew,它可以工作!

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


这招对我很管用:

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

在2022年,我在一台M1 Mac上和蒙特雷一起工作

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