如何修复自制权限?


601

我现在已经卸载和安装了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,我非常感谢任何建议。

Answers:


955

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

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

另外,您(很有可能)必须在上执行相同的操作/Library/Caches/Homebrew

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

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

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


14
谢谢你 我还需要运行sudo chown -R $USER:admin /Library/Caches/Homebrew来摆脱权限问题。
alexpls 2014年

64
将/ usr / local的所有权更改为特定用户不是解决方案。如果您只有一个用户系统,这将是一个可怕的黑客和一种解决方法。但是,那么您不妨只是chown -R / $ USER:$ USER
fijiaaron

17
@fijiaaron那么有什么更好的解决方案?
juil

47
chowning / usr / local:完全疯狂的解决方案。亲爱的希望这实际上不是聚会的台词。
约翰·克莱门茨

15
对于那些抱怨说该解决方案会弄乱多用户系统(@ fijiaaron,@ JohnClements,@ hmijail,@ Alex)的人来说,这正是组权限被反转的原因。在macOS上,该admin组是每个admin用户(sudo除其他外,每个macOS用户帐户用户都可以),因此,通过chown -R …:adminchmod -R g+w /usr/local@AndreaDeGaetano 一起运行,您将在这里做任何事情,并且零问题其他用户也使用/usr/local/ brew
Slipp D. Thompson

478

对于在Mac OS海伊谢拉用户,因为它是不可能的新命令chown/usr/local

bash/zsh

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

fish

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

参考:无法在High Sierra中锁定/ usr / local


是@Jeffpowrs我在macOS 10.13.2中也遇到了同样的问题
andrewwong97 '18

4
我使用sudo chown -R (whoami) (brew --prefix)/*
鱼壳

2
相关地。对于我要尝试执行的操作,我必须执行sudo mkdir /usr/local/Frameworks,然后执行此答案中所示的chown命令。
丹·伯顿

1
谢谢。这节省了一天。
Aashutosh Rathi

2
上帝保佑你,兄弟!
Mendigo dos Bytes

285

作为像我一样登陆这里的人的第一选择,请遵循以下建议您执行的操作:

brew doctor

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

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

解决了该权限问题。

OP只是这样做了,但显然没有得到上述建议。您可以,最好从那里开始,然后再找一些平凡的解决方案,如果这样做没有帮助。


4
确认此问题已解决,截至2017
Anton Babushkin

3
也可以确认这解决了所有权限问题,并能够轻松升级我的节点版本
-06

2
酿酒医生不会找到所有问题。我遇到的问题是/ usr / local / Frameworks,不存在,因此创建该问题并对其设置所有权可以解决该问题。Brew本身并没有注意到这是一个问题。
乔W

2
chown: /usr/local: Operation not permitted截至2019
tavalendo

1
医生的提示可能是这里最好的提示之一,因为它可以随时修复(或帮助解决)不同的问题!
ecth

82

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

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


谢谢。救了我!
Matthias

3
我发现$(brew --prefix)只是给了我/ usr / local,High Sierra坚称我无法将权限更改为...,但是因为在我的实例中brew想要的权限是“ / usr / local / Frameworks” ,我可以改为使用“ $(brew --prefix)/ Frameworks”,之后“ brew link python @ 2”对我来说效果很好。
alpheus

具有多个用户的所有Mac用户,请使用此功能!
Erik Nguyen

谢谢OSX High Sierra的支持,很显然,我们无法像在Mac OSX的先前版本中那样对/ user / local进行穿梭。这对我有用!
Jose Mhlanga

29

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

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

第一行将创建一个新的Frameworks文件夹,以供自制(brew)使用。第二行为该文件夹提供您当前的用户权限,这已经足够。

使用的命令如下:

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

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

whoami-打印有效的用户ID

我有OSX High Sierra


27

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

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

但这确实不是正确的方法。主要是您的计算机是服务器还是多用户。

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

  sudo chown -R root:admin /usr/local

那样就可以解决问题,并将所有权设置在适当的位置。


4
嗯..什么时候我们得到“不允许操作”的弦乐?
Ewoks

@Ewoks是MacOs上的吗?
Maher Abuthraa

1
是的,塞拉利昂高地:S
Ewoks


15

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

它得到了输出:

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

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

sudo chown -R $USER /usr/local

5
添加一些报价sudo chown -R "$USER":admin /usr/local
Orkoden

2
@skywinder您的回答对我有用。不必在$ USER上使用引号。
Anna S

sudo chown -R“ $ USER”:admin / usr / local,用您的名字替换$ USER。
lft93ryt

这导致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.
–thesummersign

3
chown: /usr/local: Operation not permitted
Krishnadas PC

13

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

brew doctor
brew upgrade
brew cleanup

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


1
这对我的问题很好。我已经放弃了自己的权限。\
Komsomol

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.

chmod它向用户admin组(您可能所属的组)授予对/usr/local自制程序使用的特定目录的写访问权限,而不是对用户执行操作。它还会在执行操作之前准确告诉您它打算做什么。


1
请注意,某些路径似乎已经改变了一些,因此您可能需要chgrp和chmod还有更多目录,但是对于您的用户方法而言,我仍然更喜欢此方法而不是chown一切!
阿希尔利

8

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

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

然后一切都按预期进行。


1
这解决了我的问题,酿造医生未发现这是问题。
乔W

7

这解决了我的问题。

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

2
这解决了此问题,但在成功链接后我将撤消此步骤。仅出于安全原因。
ora-600

7

我通过以下命令解决了我的问题:

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
谢谢!多数民众赞成在唯一的帮助,Mac OS 10.13.4就我而言,我必须创建sudo mkdir /usr/local/Frameworkssudo chown -R $(whoami) /usr/local/Frameworks能够链接python!
A1m


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然后阅读所有将要遇到的警告和错误,则所有这些信息均可用...


将/ usr / local中所有内容的所有权设置为root:wheel是危险且不必要的。相关路径为/ usr / local / Cellar
ben26941 '16

1
您不需要触摸那些权限,除非您已经..说已经继续进行并为您的开发用户获得了它们的所有权-或在brew已经因为使用sudo进行安装而使它们变得混乱的情况下。brew在这种情况下自我推荐这种修复方法-我认为这比留下sudo混乱要危险得多。
Max Dercum '16

1
那么,您能否提供指向酿造建议的链接?
ben26941 '16

1
最佳答案。在我从另一台Mac进行迁移之后,它就起作用了。
BuffMcBigHuge

4

对我来说,

brew doctor

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

chown: /usr/local: Operation not permitted


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

2

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

sudo chown -R "$USER":admin /usr/local/*没有工作对我来说然而,改变一切的权限之内的本地文件夹。

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


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


1

就我而言,删除和重新安装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

0

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

而且我知道他们会发出很多警告,说它不应该以root身份运行,但是请注意,否则它将无法正常工作。


0

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

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

我的情况与OP相似,但是我的问题是由使用brew cask运行sudo,然后输入错误密码引起的。在此之后,我被阻止安装的权限所困扰。


0

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

brew prune

这将解决问题,并且我们无需整理任何目录。


1
这不再起作用了,您现在必须做brew cleanup --prune-prefix
Sliq

0

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

我只需要整理Homebrew目录

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.