如何解决自制软件的权限?

我已经卸载并安装了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链接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,我真的很感激任何的build议。

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

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

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

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

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

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

作为第一个select像我这样的人在这里的土地,遵循这个build议你做的事情:

 brew doctor 

这是最安全的途径,除其他外,它build议我:

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

这解决了权限问题。

OP就是这么做的,但显然没有得到上面的build议。 你可以,而且最好先从那里开始。

我有这个问题..一个工作的解决办法是改变/usr/local所有权,而不是root的当前用户:

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

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

我的build议是改变上面的所有权,并做任何你想用Brew实现(更新,安装…等),然后重置所有权回到根为:

  sudo chown -R root:admin /usr/local 

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

顶级答案的命令不适合我。

它得到了输出:

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

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

 sudo chown -R $USER /usr/local 

macOS High Sierra用户的新命令,因为不能在/usr/local

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

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

如果你想要一个更为有针对性的方法,而不是覆盖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中的特定目录,这是自制软件使用的。 它也告诉你在做之前它打算做什么。

这解决了我面前的问题。

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

所有这些build议可能工作。 在最新版本的brew医生中,虽然有更好的build议。

首先 – 通过在命令行中运行这个命令来修复您可能已经在/usr/local的混乱:

sudo chown -R root:wheel /usr/local

然后获取应该专门针对此用户的path的所有权:

 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 ,然后阅读所有的警告和错误,你将遇到…

如果您使用的是高级Sierra,则不能再使用/ usr / local。 您可以使用:

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

如果你没有最新的Homebrew:我过去强迫Homebrew以root身份运行,这只能通过将Homebrew可执行文件的所有权更改为root来解决。 在某个时候,他们删除了这个function。

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

github上有一个杀手脚本修复了/ usr / local下的perms和brew目录,可以被任何“admin”组成员访问。

https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

这是一个比select的答案更好的解决scheme,因为如果你将/ usr / local / ___目录分配给$ USER,那么你打破了该机器上其他自制软件的其他pipe理员用户。

下面是我发布这个脚本的胆量:

 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 chmod + t / tmp