709

我现在已经卸载并安装了 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 无法在任何东西上使用,我非常感谢任何建议。

4

30 回答 30

1032

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

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

此外,您(很可能)必须在以下方面做同样的事情/Library/Caches/Homebrew

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

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

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

于 2013-05-08T21:26:57.707 回答
727

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

bash/zsh

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

fish

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

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

于 2017-10-20T07:40:36.450 回答
307

作为像我一样登陆这里的任何人的第一选择,请遵循以下建议您做的任何事情:

brew doctor

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

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

这解决了该权限问题。

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

于 2015-12-09T09:32:27.213 回答
107

如果您使用的是 OSX High Sierra,/usr/local则无法再使用chown。您可以使用:

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

于 2017-11-12T20:06:40.310 回答
32

我没有/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

于 2018-09-11T23:41:34.810 回答
27

我遇到了这个问题..一个可行的解决方案是将所有权更改/usr/local 为当前用户,而不是root通过:

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

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

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

  sudo chown -R root:admin /usr/local

那将解决问题并将所有权设置在适当的设置中。

于 2016-12-21T10:19:40.607 回答
26

我还不想弄乱文件夹权限,所以我做了以下事情:

brew doctor
brew upgrade
brew cleanup

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

于 2018-04-18T18:28:54.010 回答
15

来自最高投票答案的命令对我不起作用。

它得到了输出:

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

此命令工作正常(/usr/local 的组admin已经存在):

sudo chown -R $USER /usr/local
于 2014-11-22T19:49:54.567 回答
12

如果您想要一种比毯子更有针对性的方法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.

它不是对您的用户执行 achmod操作,而是授予admin组(您可能所属的组)/usr/local对该自制软件使用的特定目录的写入权限。它还会告诉您在执行此操作之前它打算做什么。

于 2016-10-11T00:54:14.577 回答
9

这对我有用:

sudo chown -R "$USER":admin /usr/local/Cellar/*
brew cleanup
于 2021-12-09T09:12:39.797 回答
8

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

sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
于 2018-01-09T07:38:47.710 回答
8

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

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

然后一切都按预期工作。

于 2018-12-03T12:31:33.393 回答
7

这解决了我面前的问题。

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
于 2017-07-23T23:06:35.457 回答
7

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

sudo chown -R $(whoami):admin $(brew --prefix)/*
于 2018-11-26T19:18:59.627 回答
7

首先,在 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 中。在我看来,这似乎是一个更优雅、更精确的解决方案。

于 2020-12-05T14:58:27.627 回答
6

对我来说,它工作后

brew doctor

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

chown: /usr/local: Operation not permitted

于 2018-12-31T17:35:31.487 回答
5

所有这些建议都可能奏效。在最新版本的 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如果您运行然后阅读您将遇到的所有警告和错误,则所有这些信息都可用...

于 2016-10-16T03:54:30.577 回答
5

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

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

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

于 2019-08-21T14:13:46.520 回答
4

其实很简单,执行这个命令: 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
于 2018-10-24T06:58:31.207 回答
3

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
于 2017-06-09T20:30:59.407 回答
3

我在 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

我只需要 chownHomebrew目录

sudo chown -R "$USER":admin /usr/local/Homebrew
于 2020-04-05T11:23:59.040 回答
2

使用以下命令卸载 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

于 2021-04-30T04:37:06.917 回答
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
于 2018-10-30T10:56:19.523 回答
1

如果您碰巧在您的 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

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

于 2021-01-05T13:13:59.960 回答
0

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

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

于 2016-12-30T05:59:58.257 回答
0

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

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

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

于 2018-01-29T21:30:18.913 回答
0

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

brew prune

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

于 2018-10-02T18:27:08.640 回答
0

就我而言,我在删除和重新安装 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
于 2019-03-15T18:13:15.890 回答
0

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

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
于 2020-05-24T22:58:03.947 回答
-5

尝试也执行此命令

须藤 chmod +t /tmp

于 2017-01-18T21:05:45.863 回答