如何修复homebrew权限问题?

787

我已经卸载和安装了三次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读取的内容

$ 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,希望能得到任何建议。

32个回答

1083

我通过在文件夹上使用chown命令成功解决了这个问题:

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

你还需要(很可能)在 /Library/Caches/Homebrew 上执行相同的操作:

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

显然我之前使用sudo的方式改变了我的/usr/local文件夹权限,从此以后使用brew安装一直都很成功。

此答案由GitHub的homebrew问题跟踪器提供。


17
谢谢您。我也需要运行sudo chown -R $USER:admin /Library/Caches/Homebrew来解决我的权限问题。 - alexpls
78
将 /usr/local 的所有权转移给特定用户并不是一个解决方案。这是一个可怕的黑客行为,也是一个变通方法,如果你使用的是单用户系统。但这时候你不如直接使用 chown -R / $USER:$USER。 - fijiaaron
22
那么,有更好的解决方案吗? - juil
61
将 /usr/local 的所有权改为 chowning 是一个完全疯狂的解决方案。真心希望这不是官方立场。 - John Clements
24
对于那些对这种解决方案会破坏多用户系统感到抱怨的人(@fijiaaron,@JohnClements,@hmijail,@Alex)- 这正是为什么组权限被倒转的原因。在 macOS 上,“admin” 组是每个管理员用户(也就是每个可以 sudo 的 macOS 用户帐户用户),所以通过运行 chown -R …:adminchmod -R g+w /usr/local(正如 @AndreaDeGaetano 建议的那样),你在这里不会做错任何事情,并且其他用户也将零问题地使用 /usr/local/brew - Slipp D. Thompson
显示剩余26条评论

858

由于在macOS High Sierra上无法对/usr/local进行chown,因此为用户提供了一个新的命令:

bash/zsh:

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

fish:

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

参考文献:无法在High Sierra中更改/usr/local的所有权


7
我使用 Fish Shell,不得不使用以下命令:sudo chown -R (whoami) (brew --prefix)/* - Tarellel
3
相关地,针对我想要做的事情,我需要执行sudo mkdir /usr/local/Frameworks命令,接着再按照这个答案中显示的chown命令执行。 - Dan Burton
5
你救了我的一天...哦...一周...我在Big Sur。 - Ronaldo Bahia
1
这个命令解决了我的问题:sudo chown -R $(whoami) $(brew --prefix)/* - vml19
2
也适用于Mac OS Big Sur,我仍然使用Rosetta模拟器来复制操作系统终端。 - Mohammed Ramadan
显示剩余11条评论

338

如果您像我一样来到这里,首选是按照建议所说的做:

brew doctor

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

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

这解决了权限问题。

楼主做了这件事,但显然没有得到上述建议;您可能会得到,并且最好从那里开始,如果还没有帮助,再寻找非平凡的解决方案。


5
确认此解决方案可解决您在2017年5月之后可能遇到的任何权限问题。 - Anton Babushkin
4
也可以确认这解决了所有权限问题,然后我能够轻松升级我的节点版本 - 06/06/2018 - 谢谢。 - Richlewis
3
"brew doctor" 无法发现所有问题。我遇到的问题是 /usr/local/Frameworks 目录不存在,创建该目录并设置其所有权即可解决问题。但 "brew" 本身并没有注意到这个问题。 - Joe W
10
2019年7月5日起,我遇到了 chown: /usr/local: Operation not permitted 无法正常工作的问题。 - tavalendo
3
根据 https://github.com/Homebrew/brew/issues/3228,在使用HighSierra及以上版本操作系统时,执行 sudo chown -R $(whoami) $(brew --prefix)/* 是正确的方法。 - Vivek V K
显示剩余5条评论

119
如果你使用的是OSX High Sierra操作系统,就不能再chown /usr/local了。你可以使用以下命令:
sudo chown -R $(whoami) $(brew --prefix)/*

2
谢谢。救了我! - Matthias
4
我发现$(brew --prefix)只给了我/usr/local,而High Sierra坚持不让我更改该目录的权限...但由于在我的情况下,brew想要对"/usr/local/Frameworks"具有权限,我可以使用"$(brew --prefix)/Frameworks"代替它,然后"brew link python@2"对我来说就可以正常工作了。 - alpheus
2
所有使用多个用户的 Mac 用户,请使用此功能! - Erik Nguyen
1
谢谢,我使用的是OSX High Sierra,显然我们不能像之前的MAC OSX版本那样chown /user/local了。这对我有用! - Jose Mhlanga
这最终在我的Big Sur上解决了问题。我在我的Mac上有两个用户帐户,这是一个问题的原因。 - mrkot

51

这在2022年的 Monterey 系统下 M1 Mac 上对我起作用了。

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

4
2023年仍然适用于M2 Pro,Ventura 13.5。 - Koyta
2
确认仍然有效。 - undefined
这在我的Mac M1上有效。 - undefined
1
这在我的Mac上使用Intel芯片上运行良好。 - undefined

38

我还不想瞎弄文件夹权限,所以我按照以下步骤执行:

brew doctor
brew upgrade
brew cleanup

之后,我成功地安装了其他的brew配方。


1
这对我的问题很有效。我已经使用SUDO获取了自己的权限。 - Komsomol
2
这个太被低估了!这解决了我的问题。 - Idee
1
确认这在M2 Mac上仍然可用。 - undefined
谢谢!这也解决了我的问题。MacOS Ventura 13.5.2。 - undefined

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系统。

28

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

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

但实际上这不是一个正确的方法,特别是如果你的机器是服务器或多用户使用的。

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

  sudo chown -R root:admin /usr/local

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


7
当我们在执行 chown 命令时遇到 "operation not permitted" 的错误时,该怎么办? - Ewoks
1
@Ewoks 这是在 MacOs 上吗? - Maher Abuthraa
2
是的,Sierra High :S - Ewoks
1
请查看此链接 https://dev59.com/llwY5IYBdhLWcg3waXEF#32661637 和此链接 https://dev59.com/llwY5IYBdhLWcg3waXEF#38435256 - Maher Abuthraa

15

从得票最高的answer那里得到的命令对我不起作用。

它的输出是:

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

这个命令运行良好(/usr/local 的组已经是 admin):

sudo chown -R $USER /usr/local

6
添加一些引号 sudo chown -R "$USER":admin /usr/local - orkoden
2
@skywinder,你的答案对我有用。在$USER上不需要使用引号。 - Anna S
sudo chown -R "$USER":admin /usr/local,其中$USER替换为您的名称。 - lft93ryt
这导致了错误:以root身份运行Homebrew非常危险,不再受支持。 由于Homebrew在安装时不会放弃特权,因此您将为所有构建脚本提供完全访问权限到您的系统。 - geekay
8
chown命令:/usr/local:操作不允许。 - Krishnadas PC
对于“操作不允许”,请尝试以根用户身份在/usr/local中执行以下命令:sh-3.2# chown -R <非管理员用户>:admin homebrew - kisna

15

这对我起作用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接