如何修复 MacOSHighSierra 上的家酿权限

当我尝试在自制程序上安装 python 时,它下载了它,然后在最后弹出了一个错误消息,阻止了它的完成。当我试图再做一次时,它要求我这样做:

$ brew link python

在输入之后,会出现相同的错误消息:

permission denied @ dir_s_mkdir - /usr/local/lib

I have tried to do:

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

我得到一个错误消息,内容是:

Chown:/usr/local: 不允许操作

41952 次浏览

正如 Henrikstroem 所提到的,反勾是有帮助的,而且正如 bnaecker 所提到的特殊属性也可能会阻碍这个过程。

您还可以尝试以 root 用户身份直接运行该命令,通过执行 sudo su -chown -R username /usr/local来查看是否有更好的结果

但你确定这是你真正想要的吗? 创建一个对其具有访问权限的组(如 chown -R originaluser:group /usr/local,设置您想要的权限,并/或使您的用户成为该组的一部分)可能更有趣。

MacOS 提供了许多方法来控制对文件的访问,超出了用户、组和其他用户的传统权限。这包括访问控制列表(ACL)、文件标志、扩展属性(xattrs) ,以及最近的苹果系统完整性保护(System Integrity Protection)。

我敢打赌,如果您运行 ls -lO /usr/来列出标志,您将在 /usr/local前面看到 uchg,它指示系统使文件对于任何用户都是不可变的。(uchg中的 u意味着文件所有者可以修改 这面旗。所有者和任何其他用户都不能修改文件本身。)

要解决这个问题,首先需要通过运行 chflags nouchg /usr/local来删除标志。这将删除 uchg标志,您应该用 ls -lO再次验证该标志。如果设置了另一个标志,比如 schg,那么通常使用 noschgno<flag>,但是当标志以 s开始时,需要使用 sudo命令。

此时,您可能仍然需要 chown目录,使用 sudo chown -R $(whoami) /usr/local。您现在应该拥有该目录,并且 Homebrew 工具应该可以正常工作。

我尝试并得到了相同的(我认为)结果:

Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

因此,我创建了一个目录/usr/local/Framework 作为 root 用户,然后更改了所有权:

sudo mkdir /usr/local/Frameworks && chown $USER:admin /usr/local/Frameworks

我又试了一次:

Warning: python 2.7.14 is already installed, it's just not linked.
You can use `brew link python` to link this version.

然后是 brew link python:

Linking /usr/local/Cellar/python/2.7.14... 26 symlinks created

现在在目录/usr/local/Framework/Python. Framework/中,我可以看到链接,例如:

lrwxr-xr-x 1 niquit admin  62 Dec  8 21:41 /usr/local/Frameworks/Python.framework/Headers -> ../../Cellar/python/2.7.14/Frameworks/Python.framework/Headers/
lrwxr-xr-x 1 niquit admin  61 Dec  8 21:41 /usr/local/Frameworks/Python.framework/Python -> ../../Cellar/python/2.7.14/Frameworks/Python.framework/Python*
lrwxr-xr-x 1 niquit admin  64 Dec  8 21:41 /usr/local/Frameworks/Python.framework/Resources -> ../../Cellar/python/2.7.14/Frameworks/Python.framework/Resources/

在您的情况下,我建议手动创建/usr/local/lib:

sudo mkdir /usr/local/lib && chown $USER:admin /usr/local/lib

A 通过 mv /usr/local/lib{,.orig}做了一个测试,我得到了:

Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/lib
Error: Permission denied @ dir_s_mkdir - /usr/local/lib

就像在我手动创建目录 sudo mkdir /usr/local/lib && chown $USER:admin /usr/local/lib之前一样,成功地创建了 brew link python:

Linking /usr/local/Cellar/python/2.7.14... 324 symlinks created

现在我可以找到一些链接:

lrwxr-xr-x 1 niquit admin  54 Dec  8 22:01 python-2.7.pc -> ../../Cellar/python/2.7.14/lib/pkgconfig/python-2.7.pc
lrwxr-xr-x 1 niquit admin  50 Dec  8 22:01 python.pc -> ../../Cellar/python/2.7.14/lib/pkgconfig/python.pc
lrwxr-xr-x 1 niquit admin  51 Dec  8 22:01 python2.pc -> ../../Cellar/python/2.7.14/lib/pkgconfig/python2.pc

我认为苹果在最新更新后增强了安全性,所以不可能在没有 root 权限的情况下在/usr/中创建现在的目录。

卸载和做一个自制的干净安装将解决这个问题。

/usr/local不能在高山地区使用

sudo chown -R $(whoami) $(brew --prefix)/*
sudo mkdir /usr/local/Frameworks
sudo chown $(whoami):admin /usr/local/Frameworks
brew link python3

我重装了啤酒,修复了问题。

要卸载,请使用以下命令。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

并再次安装酿造。

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

我只是这样做,它的工作正常:

sudo touch /usr/local/Frameworks
brew link python

运行它,并遵循它的建议:

brew doctor

就我而言,它想让我逃跑:

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

这个命令,正如上面 Chris 在评论中建议的那样,解决了几乎所有运行在 MacMini 20115,1非正式运行 MacOS Mojave 上的自制问题。只要输入那个,然后按照终端打印的所有方向操作

以我为例,在一台新机器上安装 MacOS 10.14:

brew doctor

它还暗示:

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


sudo chown $USER /usr/local/Frameworks

然后尝试重新安装 python。

用户在 macOS 上使用的命令

Bash/zsh:

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

鱼类:

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

使用这个命令

  1. Sudo chown-R $(whoami) $(breme —— prefix)/*