`brew link unbound` 返回 `/usr/local/sbin 不可写入` 错误。

我正在尝试使用brew命令安装unbound

这是brew install unbound的输出:

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

如你所见,我被要求使用brew link unbound来链接到unbound 1.6.7版本。
但是由于我遇到了以下错误,所以无法进行链接:
Linking /usr/local/Cellar/unbound/1.6.7...
Error: Could not symlink sbin/unbound
/usr/local/sbin is not writable.

我在另一个stackoverflow上找到了这里
而答案sudo chown -R $(whoami) /usr/local会导致以下错误:
chown: /usr/local: Operation not permitted

我正在使用 macOS High Sierra 版本 10.13.2。而我的 Homebrew 版本是 1.4.3。
我该如何解决这个问题?

请在您的问题中说明您的问题涉及的MacOS版本。 - dan
你试过以 sudo 权限运行吗? - Prav
brew拒绝与sudo一起工作。 - Matthew Barclay
3个回答

默认情况下,/usr/local/sbin文件夹不存在。该文件夹应通过安装brew来创建,所有者/权限设置为$(whoami):admin/775。/usr/local/中的大多数/所有文件夹都归安装brew的用户所有-这是默认安装和配置的一部分。
另一方面,某些第三方工具可能已经安装到此文件夹中(例如AFAIR procexp或Smartmontools必须安装在那里)。然后,所有者/权限可能设置为root:wheel/755或root:wheel/775。
要解决您的问题,请检查/usr/local/sbin是否存在以及其文件夹权限。
以下命令将在不存在时创建此文件夹并使其对所有人可写,但不更改所有者:组:
if [ ! -d /usr/local/sbin ]; then sudo mkdir /usr/local/sbin; fi && sudo chmod 777 /usr/local/sbin

现在你可以链接未绑定的内容:
brew link unbound

您可以使用以下步骤取消“可全球写入”设置:
sudo chmod 775 /usr/local/sbin

不要忘记将文件夹添加到您的用户的PATH中,路径为~/.bash_profile,或者系统的PATH中,路径为/etc/paths。
如果你遇到错误:
Error: Could not symlink sbin/unbound
/usr/local/sbin is not writable.

用户没有权限将命令实际执行的文件夹写入。

命令sudo chown -R $(whoami) /usr/local将更改所有子文件夹及其内容的所有者为$(whoami),尽管出现错误chown: /usr/local: Operation not permitted。唯一的例外是/usr/local/中受SIP保护的项目。默认情况下,没有任何文件和文件夹受到保护。

因此,错误消息是错误的,您可能已经成功输入了sudo chown -R ...命令,并且应该尝试再次简单地链接unbound

您可以通过输入以下命令来检查文件夹权限:

ls -lae /usr/local/sbin

你可以通过输入以下命令,在local的子目录中获取所有受保护的项目。
ls -lae -R /usr/local | grep restricted

运行brew doctor对我来说起了作用。
它会诊断各种缺失的文件夹,具有已知可能引起问题的权限的文件夹以及其他需要在另一个进程更改事物或事物出现故障后执行的修复操作。

运行brew doctor将为您诊断问题。

对我来说,sudo mkdir -p /usr/local/sbinsudo chown -R $(whoami) /usr/local/sbin解决了问题。然后通过运行brew link php将其链接到php。

有时候还需要添加:

echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile

然后重新启动终端。