Operation not permitted in OS X 11
需求
以 python 为例,OS X 自带的 python 在 /usr/bin/
目录下;而有时候我们需要用 homebrew 安装我们需要的 python,并且调用 python 时,优先找到后者并执行。
方案 1
homebrew 安装的 python 会在 /usr/local/bin
目录下留一个软链接,编辑 profile 文件,使得 /usr/local/bin
优先于 /usr/bin/
被搜索到。
1 | export PATH="/usr/local/bin:$PATH" |
方案 2
方案 1 简单,然而这里的环境变量一般是针对普通个人用户,对于 guest 用户,_www 用户,给予 /usr/local/bin
路径是不太合适的。
譬如在本地调试 php 调用 python 时,它只会在 /usr/bin/
下找到 python 程序并执行,此为 OS X 的默认版本。
简单的思路就是删除它并且让 /usr/bin/python
链接到 /usr/local/bin/python
然而直接修改 /usr/bin/
下的文件,即便使用 sudo
,依然会出现Operation not permitted
的错误。
是 El Capitan 的 Rootless机制导致的。
Rootless机制将成为对抗恶意程序的最后防线,这句话挺有道理。
于是,在可以通过重启-恢复模式,执行 csrutil disable
暂时停用它,把想要的修改操作完之后,用同样的方式执行 csrutil enable
再启用它。