分享

mac Homebrew /usr/local写入权限问题

 quasiceo 2018-06-21
2018年04月24日 00:10:51
阅读数:483

在使用brew命令的时候,会遇到错误提示

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;"><span style="color:#ff0000;">Error</span>:/usr/local is not writable.</span>  

并建议执行命令:

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">$ sudo chown -R $(whoami) /usr/local</span>  
但是系统还是会提示

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">chown: /usr/local: Operation not permitted</span>  

现在问题就卡住了,因为执行brew update之类的命令,需要对/usr/local进行写入操作。但是操作用户无法像对普通文件夹操作一样,通过chown获得write权限。由于/usr/local是系统文件夹,macOS限制了对其的操作权限。

归根到底,是下面的机制在作怪:

Rootless

苹果从 OS X El Capitan 10.11 系统开始使用了 Rootless 机制,可以将该机制理解为一个更高等级的系统的内核保护措施,系统默认将会锁定 /system/sbin/usr 这三个目录。

在终端输入

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">$ csrutil status</span>  

收到系统提示

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">System Integrity Protection status:enabled</span>  

说明rootless默认打开,此时无法通过sudo命令,对/system/sbin/usr 这三个目录进行修改。

打开、关闭Rootless机制

  • 重启 Mac
  • 开机时后按下 Command+R,进入恢复模式。
  • 在上面的菜单实用工具中找到并打开 Terminal
  • 输入如下命令:
  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">$ csrutil disable</span>  

此时rootless已经关闭,退出恢复模式,正常进入系统。在终端输入

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">$ csrutil status</span>  

收到系统提示

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">System Integrity Protection status:disabled</span>  
rootless已关闭,可通过

  1. <span style="font-size:12px;"><span style="font-family:'Microsoft YaHei';">$ sudo chown -R $(whoami) /usr/local</span></span>  
修改local权限。

建议修改完成之后,为了系统安全,将rootless重新开启。开启方式同关闭方式一样,在恢复模式的Terminal输入:

  1. <span style="font-family:'Microsoft YaHei';font-size:12px;">$ csrutil enable</span>  

即可。

个人分类: Python Mac

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多