如何修复自制权限?

Sat*_*ino 547 macos homebrew libjpeg

我已经卸载并安装了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
Run Code Online (Sandbox Code Playgroud)

'brew link jpeg'导致

Error: Permission denied - /usr/local/opt/jpeg
Run Code Online (Sandbox Code Playgroud)

这是我的酿酒医生所读的内容

$ 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
Run Code Online (Sandbox Code Playgroud)

这个许可问题一直使得任何事情都无法使用brew,我真的很感激任何建议.

Sat*_*ino 916

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

sudo chown -R "$USER":admin /usr/local
Run Code Online (Sandbox Code Playgroud)

你也(很可能)也必须这样做/Library/Caches/Homebrew:

sudo chown -R "$USER":admin /Library/Caches/Homebrew
Run Code Online (Sandbox Code Playgroud)

显然我曾经sudo以一种改变我的文件夹权限的方式使用过/usr/local,从这里开始所有使用brew的安装都证明是成功的.

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

  • 将/ usr/local的所有权更改为特定用户不是解决方案.如果*你有一个用户系统,这是一个可怕的黑客和解决方法*.但是你可能只是chown -R/$ USER:$ USER (60认同)
  • chowning/usr/local:完全疯狂的解决方案.非常希望这不是党的路线. (43认同)
  • @fijiaaron那么什么是更好的解决方案? (15认同)
  • 谢谢你.我还需要运行`sudo chown -R $ USER:admin/Library/Caches/Homebrew`来摆脱我的权限问题. (14认同)
  • 对于那些抱怨这个解决方案会破坏多用户系统的人(@ fijiaaron,@ JohnClements,@ hmijail,@ Alex) - 这正是组权限被颠倒的原因.在macOS上,`admin`组是每个管理员用户(每个macOS用户帐户用户都可以`sudo`等),所以通过运行`chown -R ...:admin`和`chmod -R g + w/usr/local`(正如@AndreaDeGaetano所建议的那样),你在这里做错了,并且使用`/ usr/local` /`brew`的其他用户也没有问题. (14认同)
  • 它可能是疯了但它是brew自己建议的:`$ brew update错误:/ usr/local目录不可写.即使在安装Homebrew时此目录是可写的,其他软件也可能会更改此目录的权限.已知翼型的"InstantOn"组件的某些版本可以做到这一点.您应该将/ usr/local的所有权和权限更改回您的用户帐户.sudo chown -R $(whoami):admin/usr/local` (8认同)
  • 对于High Sierra用户:sudo chown -R $(whoami)$(brew --prefix)/*https://github.com/Homebrew/brew/issues/3228 (4认同)
  • 我一直偏爱 MacPorts,但从来没有理由。我从没想过会找到这么好的一个对 Homebrew 保持警惕的人。 (3认同)
  • 如果你的mac在多个用户之间共享,这个答案是错误的......我使用这个https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925更改了具有写访问权限的所有"admin"组的组权限. (3认同)
  • 我发现我还需要`sudo chown -R"$ USER":admin/Users /"$ USER"/ Library/Logs/Homebrew` (2认同)
  • 顺便说一下,这个解决方案破坏了 McAffee。 (2认同)
  • 可怕的解决方案!!!我不明白为什么人们赞成这个。这将破坏许多系统,尤其是企业 MacBook。 (2认同)
  • 更改这些目录的所有权对于一个用户来说是固定的,对于前一个所有者来说是破坏它。而且这个有800+票?下面有一种更好的方法,为用户提供“组”访问权限。就我而言,我将brew与两个管理员用户一起使用,所以我所做的是: sudo chmod -R g+w /usr/local/ (2认同)

and*_*g97 382

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

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

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

  • 我使用鱼壳,不得不使用以下内容:`sudo chown -R (whoami) (brew --prefix)/*` (7认同)
  • 相关地。对于我想做的事情,我必须先执行sudo mkdir / usr / local / Frameworks,然后再执行chown命令,如本答案所示。 (2认同)
  • 你拯救了我的一天...操作...一周...我在大苏尔 (2认同)
  • 也适用于 Mac OS Big Sur,我仍然使用 Rosetta 模拟器作为操作系统终端的副本。 (2认同)
  • 也在索诺玛为我工作。 (2认同)
  • 2023 年 11 月,这在文图拉成功了 (2认同)

Nyc*_*cen 263

作为像我一样在这里登陆的第一个选择,请按照以下建议您做的事情:

brew doctor
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R $(whoami) /usr/local
Run Code Online (Sandbox Code Playgroud)

这解决了权限问题.

OP就是这么做的,但显然没有得到上述建议; 你可能会,从那里开始总是更好,然后只有在没有帮助的情况下才寻找非平凡的解决方案.

  • 自 2019 年 7 月 5 日起,我收到“chown:/usr/local:不允许操作”的信息 (10认同)
  • 确认此修复了您在05/2017之前可能拥有权限的任何问题 (4认同)
  • 也可以确认这解决了任何权限问题,然后能够轻松升级我的节点版本 - 06/06/2018 - 谢谢 (3认同)
  • brew doctor 不会发现所有问题。我遇到的问题是 /usr/local/Frameworks 不存在,创建它并在其上设置所有权修复了它。brew 本身并没有注意到这是一个问题。 (3认同)
  • 根据“https://github.com/Homebrew/brew/issues/3228”,“sudo chown -R $(whoami) $(brew --prefix)/*”是处理 HighSierra 及以上版本的方法。 (3认同)
  • 医生的提示可能是这里最好的提示之一,因为它可以随时修复(或帮助修复)不同的问题! (2认同)

Ric*_*ard 71

如果你在OSX High Sierra上,那就/usr/local再也不能了chown.您可以使用:

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

  • 我发现$(brew --prefix)只给了我/ usr/local,High Sierra坚持认为我无法将权限更改为...但是因为brew想要在我的实例中使用"/ usr/local/Frameworks"的权限,我能够使用"$(brew --prefix)/ Frameworks",而"brew link python @ 2"在此之后对我来说很好. (3认同)
  • 谢谢。救了我! (2认同)
  • 拥有多个用户的所有 Mac 用户,使用这个! (2认同)

Mah*_*raa 27

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

  sudo chown -R $(whoami):admin /usr/local
Run Code Online (Sandbox Code Playgroud)

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

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

  sudo chown -R root:admin /usr/local
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯..当我们得到"不允许操作"的时候? (3认同)
  • 是的,Sierra High :S (2认同)

Kar*_*ner 26

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

sudo mkdir -p /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks
Run Code Online (Sandbox Code Playgroud)

我有OSX High Sierra


小智 15

这对我有用:

sudo chown -R "$USER":admin /usr/local/Cellar/*
brew cleanup
Run Code Online (Sandbox Code Playgroud)


sky*_*der 14

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

它有输出:

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

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

sudo chown -R $USER /usr/local
Run Code Online (Sandbox Code Playgroud)

  • 添加一些引号`sudo chown -R"$ USER":admin/usr/local` (5认同)
  • @skywinder你的回答对我有用.没有必要在$ USER上使用引号. (2认同)
  • `chown:/ usr / local:不允许操作` (2认同)

dar*_*rco 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.
Run Code Online (Sandbox Code Playgroud)

它不是对chmod用户执行操作,而是为admin组(您可能属于该组)提供/usr/local对该自制程序使用的特定目录的写访问权.它还会在完成之前准确地告诉您它打算做什么.


Ant*_* To 12

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

brew doctor
brew upgrade
brew cleanup

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

  • 这被低估了!这解决了我的问题。 (2认同)

小智 8

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

sudo mkdir /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks
Run Code Online (Sandbox Code Playgroud)

然后一切都按预期工作.


Far*_*din 7

这解决了我的问题.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Run Code Online (Sandbox Code Playgroud)

  • 这解决了这个问题,但在成功链接后我将撤消此步骤.只是出于安全原因. (2认同)

Jua*_*rez 7

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

sudo chown -R $(whoami):admin $(brew --prefix)/*
Run Code Online (Sandbox Code Playgroud)


har*_*der 6

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

sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
Run Code Online (Sandbox Code Playgroud)


Kri*_* PC 6

对我来说,它在

brew doctor

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

chown: /usr/local: Operation not permitted


aus*_*s99 6

首先,对于 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
Run Code Online (Sandbox Code Playgroud)

因此,不能使用上面的流行答案。其次,退一步说,如果主要关心的是安装或升级 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)"
Run Code Online (Sandbox Code Playgroud)

它在 /usr/local 内安装 Homebrew 而不改变 /usr/local 本身的所有权。相反,Cellar、Caskroom、Frameworks、Homebrew 等安装在 /usr/local 中。在我看来,这似乎是一个更优雅、更精确的解决方案。


小智 5

所有这些建议都可行.在最新版本的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
Run Code Online (Sandbox Code Playgroud)

如果您运行sudo brew update然后阅读所有会遇到的警告和错误,所有这些信息都可用...


pad*_*otk 5

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

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

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