如何修复自制权限?

我已经卸载并安装了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变得不可能,我真的很感激任何建议。

595659 次浏览

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

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

你也(很可能)必须在/Library/Caches/Homebrew上做同样的事情:

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

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

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

来自投票最多的回答的命令不适合我。

它有输出:

chown: /usr/{my_username}dmin:无效用户名

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

sudo chown -R $USER /usr/local

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

brew doctor

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

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

它解决了权限问题。

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

如果您想要比毯子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中的特定目录的写访问权限。它还告诉您在执行之前它打算做什么。

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

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

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

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

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

  sudo chown -R root:admin /usr/local

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

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

我知道他们会给出很多警告,说它不应该以root身份运行,但是拜托,否则它无法正常工作。

尝试执行此命令

sudo chmod+t /tmp

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

这解决了我面前的问题。

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

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

bash/zsh

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

fish

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

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

如果您在OSX High Sierra上,/usr/local不能再是chownd。您可以使用:

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

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

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

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

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

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

我不想浪费文件夹权限,所以我做了以下操作:

brew doctor
brew upgrade
brew cleanup

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

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

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

第一行创建一个新的框架文件夹供自制(brew)使用。 第二行为该文件夹提供您当前的用户权限,这就足够了。

使用的命令如下:

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

chown-更改文件所有者和组[-r递归地对文件和目录进行操作]

whoami-打印有效的用户ID

我有OSX High Sierra

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

brew prune

这将解决问题,我们不必选择任何目录。

其实很简单,执行这个命令: 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
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks

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

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

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

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

然后一切都按预期进行。

对我来说,之后就奏效了

brew doctor

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

chown: /usr/local: Operation not permitted

在我的情况下,我有删除和重新安装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

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

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

希望这能帮助其他有同样问题的人。

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

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

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

首先,使用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、框架、Homebrew等安装在内部 /usr/local.在我看来,这似乎是一个更优雅、更精确的解决方案。

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

在那之后,它就像一个魅力。希望它能帮助别人。

使用以下命令卸载brew并重新安装,以确保指向brew github的链接和对本地文件夹的相关权限正常工作:

/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"

这工作得很好。我自己没有权限,只是重新安装了Homebrew,它就可以工作了!

来源:https://gist.github.com/irazasyed/7732946#gistcomment-2298740

这对我有效:

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

这对我来说在2022年与蒙特雷一起在M1 Mac上工作

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