不允许操作 – / usr / bin / update_rubygems

当我在osx El Capitan上执行时:

sudo gem update --system 

我得到了错误:

 Updating rubygems-update ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/update_rubygems 

最终通过自制软件安装ruby。 先安装自制软件:

http://brew.sh

然后执行

 brew install ruby 

之后,它的工作完美无瑕。 这与本地ruby安装有关。

如果您在通过Homebrew安装ruby后(如上所述)安装特定的gem时遇到问题,请尝试以下操作:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

发现这个感谢用户endoplasmic在这个问题线程: https : //github.com/sass/sass/issues/1768

从El Capitan开始,Apple出于安全原因阻止用户应用程序修改/usr/bin 。 所以只要在推荐文件夹/usr/local/bin安装/更新rubygems:

 sudo gem update -n /usr/local/bin --system 

这是10.11的一个“问题”(苹果称之为function)。 基本上,你不能在10.11中修改/usr/bin (甚至不能以root身份( sudo su - ),还有一些其他文件夹也不能被修改)。

如果你运行ls -l /usr/bin你会注意到权限是555 ,或者r-xr-xr-x (没有写权限)。 您不能使用chmod更改这些权限。

这个function名称稍微不正确:“无根”。 苹果表示这是一个安全措施:

https://apple.stackexchange.com/questions/193368/what-is-the-rootless-feature-in-el-capitan-really

您可以使用此要点恢复该function:

https://gist.github.com/djtech42/7233c602fda912d96fdf

 #!/bin/bash #Beta 4 to Final Public Release (Must be run in Recovery Mode) csrutil disable #Beta 1-3 sudo nvram boot-args="rootless=0";sudo reboot 

PS有些用户说这不起作用,你必须先启动恢复,就像他们在这里:

https://www.macbartender.com/system-item-setup/

我不build议你这样做。 最好的解决办法是只要在Homebrew上安装ruby (以及其他任何东西),因为你仍然可以对/usr/local进行写入访问,直到苹果认为它太不安全了。


对于那些仍然存在这个问题的人来说,基本上这是苹果在新的OSx中发布的安全升级。 这是一个基本上是“无根”的安全系统的系统完整性保护。 请执行以下步骤禁用:

http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac-os-x/

注意这只能做,如果你明白你在做什么,为什么!

我在升级cocopods时也遇到过这个问题,我的操作系统是macOS Sierra,ruby版本是2.0.0。下面的方法解决了我的问题。

  1. 通过自制软件升级你的ruby版本。

    brew upgrade ruby

  2. 如果你不能更新ruby,这个链接可以帮助你。

    https://github.com/Homebrew/legacy-homebrew/issues/49895

如果你有多个rubygems安装(比如homebrew,rbenv,rvm),那么你可能需要使用绝对path/usr/bin/gem来更新默认的Apple安装的rubygems,以确保更新这个特定的rubygems:

 # Note the absolute path to /usr/bin/gem: sudo /usr/bin/gem update -n /usr/local/bin --system 

我尝试卸载并重新安装cocoapods时遇到此问题。 search后,我发现解决scheme是临时禁用系统完整性保护,然后重新启用系统完整性保护工作完成。

这是步骤。

1)重新启动您的MAC并按住Command + R,直到您看到恢复模式屏幕启动。

2)在此恢复模式下,查看顶部文件菜单“实用程序”,然后selectterminal打开terminal

3)在下面input这个命令

 csrutil disable / reboot 

您的Mac将立即重新启动,一旦重新启动到正常屏幕,您可以通过再次打开terminal来检查以确保已禁用系统完整性保护,并input以下代码

 csrutil status 

现在你可以执行你想要执行的任务了。

4)重新启用系统完整性保护完成工作后,强烈build议您重新启用系统完整性保护

5)重新启动您的Mac到恢复模式了。 (按住Command + R键)

6)当您进入恢复模式屏幕时打开terminal

7)input下面的代码

 csrutil enable /reboot 

再次,为了确保您重新启用系统完整性保护,重新启动后,使用terminal来检查使用

 csrutil status. 

希望这有助于任何人有同样的问题。