如何修复自制权限?

时间:2013-05-08 03:11:29

标签: 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

'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,我真的很感激任何建议。

29 个答案:

答案 0 :(得分:886)

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

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

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

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

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

这个答案来自gitHub's homebrew issue tracker

答案 1 :(得分:284)

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

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

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

答案 2 :(得分:239)

作为像我一样在这里落地的人的第一选择,请按照以下建议你做的事情:

brew doctor

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

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

解决了权限问题。

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

答案 3 :(得分:58)

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

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

答案 4 :(得分:27)

我有这个问题.. 一个有效的解决方案是更改/usr/local的所有权 通过以下方式向当前用户而不是root

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

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

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

  sudo chown -R root:admin /usr/local

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

答案 5 :(得分:16)

我没有/user/local/Frameworks文件夹,所以这对我来说已经解决了

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

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

我有OSX High Sierra

答案 6 :(得分:14)

来自最高票数answer的命令对我不起作用。

得到了输出:

  

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

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

sudo chown -R $USER /usr/local

答案 7 :(得分:12)

如果您希望采用比毯子chown -R更有针对性的方法,您可能会发现this 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中特定目录的写访问权。它还会在完成之前准确地告诉您它打算做什么。

答案 8 :(得分:11)

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

brew doctor
brew upgrade
brew cleanup

然后我成功地继续安装我的其他酿造配方。

答案 9 :(得分:8)

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

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

然后一切都按预期进行。

答案 10 :(得分:7)

这解决了我的问题。

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

答案 11 :(得分:6)

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

openOrCreateDatabase

答案 12 :(得分: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

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

答案 13 :(得分:4)

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

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

答案 14 :(得分:3)

github上有一个杀手级脚本,用于修复/ usr / local和brew目录中的perms,以便任何属于'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

答案 15 :(得分:3)

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

brew doctor

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

chown: /usr/local: Operation not permitted

答案 16 :(得分:2)

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

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

希望这会帮助其他遇到相同问题的人。

答案 17 :(得分: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

答案 18 :(得分:1)

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

答案 19 :(得分: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

答案 20 :(得分:1)

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

答案 21 :(得分:1)

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

一种更精确的解决方案是按照the Homebrew GitHub site上给出的安装Homebrew的说明进行操作

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

它将Homebrew安装在/ usr / local内,而不会更改/ usr / local本身的所有权。取而代之的是,在/ usr / local内部安装了Cellar,Caskroom,Frameworks,Homebrew等。我认为这似乎是一种更优雅,更精确的解决方案。

答案 22 :(得分:0)

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

brew prune

这将解决问题,并且我们不必设置任何目录。

答案 23 :(得分:0)

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

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

答案 24 :(得分:0)

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

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

我的情况类似于OP,但我的问题特别是由于使用brew cask运行sudo,然后让我的密码不正确引起的。在此之后,我遇到了阻止安装的权限。

答案 25 :(得分: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

答案 26 :(得分:0)

如果您的 Mac 上碰巧有多个帐户,那么您当前的帐户很可能与最初拥有 ' Make sure if additional metrics are selected : number or text is selected If CheckBox1 = True And (NumBox1 = False And TxtBox1 = False) Then MsgBox ("Please define if the metric is numerical or text.") Exit Sub End If If CheckBox2 = True And (NumBox2 = False And TxtBox2 = False) Then MsgBox ("Please define if the metric is numerical or text.") Exit Sub End If '(...) 的主帐户属于不同的用户组,这意味着上述解决方案都不起作用。

您可以通过尝试 /usr/local 并查看哪些用户和组有权在目录上写入来检查这一点。 就我而言,它是 ls -la /usr/local。可能是 root wheel

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

root admin

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

答案 27 :(得分:0)

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

答案 28 :(得分:-5)

尝试执行此命令

sudo chmod + t / tmp