当我在OSX El Capitan上执行时:
sudo gem update --system
我遇到了这个错误:
Updating rubygems-update
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /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
最终通过Homebrew安装了Ruby。首先要安装Homebrew:
然后执行以下命令:
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
jsduck
也起作用了。虽然我不知道为什么。 - Flameecho "gem: -n/usr/local/bin" >> ~/.gemrc
永久更改默认路径。 - Blackvenom从El Capitan开始,为了安全起见,苹果禁止用户应用程序修改/usr/bin
。因此,只需在推荐的文件夹/usr/local/bin
中安装/更新rubygems:
sudo gem update -n /usr/local/bin --system
这是10.11的一个“问题”(苹果称其为功能)。基本上,您无法修改/usr/bin
(即使作为根用户sudo su -
),还有许多其他文件夹也不能被修改。
如果运行ls -l /usr/bin
,您会注意到权限为555
或r-xr-xr-x
(没有写入访问权限)。您无法使用chmod
更改这些权限。
此功能的名称略有不妥:‘rootless’。苹果表示这是一项安全措施:
https://apple.stackexchange.com/questions/193368/what-is-the-rootless-feature-in-el-capitan-really
您可以使用此gist撤消该特性:
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
顺便说一句,一些用户表示这并不起作用,你必须先启动恢复模式,就像他们在这里所做的那样:
https://www.macbartender.com/system-item-setup/
我不建议您这样做。最好的解决方案是通过Homebrew安装ruby
(以及几乎所有其他内容),因为您仍然可以写入/usr/local
,直到苹果公司认为这太不安全了......
http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac-os-x/
注意:只有在您理解自己在做什么以及原因的情况下才应该执行此操作!
我在升级cocoapods时也遇到了这个问题,我的操作系统是macOS Sierra,ruby版本是2.0.0。以下是解决问题的方法。
通过homebrew升级您的ruby版本。
brew upgrade ruby
如果更新ruby失败,可以使用此链接帮助您。
/usr/bin/gem
来确保更新特定的 RubyGems:# Note the absolute path to /usr/bin/gem:
sudo /usr/bin/gem update -n /usr/local/bin --system
当我尝试卸载和重新安装Cocoapods时,我遇到了这个问题。经过搜索,我发现解决方案是暂时禁用系统完整性保护,然后在完成工作后重新启用系统完整性保护。
以下是步骤:
1)重新启动您的MAC,并按住Command+R,直到看到恢复模式屏幕启动。
2)在此恢复模式中,查看顶部文件菜单“实用程序”,并选择终端以打开终端
3)输入以下命令
csrutil disable / reboot
您的Mac现在将重新启动,一旦它重新启动到正常屏幕,您可以再次打开终端并输入以下代码来确保已禁用系统完整性保护
csrutil status
现在你可以执行想要执行的任务。
4)重新启用系统完整性保护 完成任务后,强烈建议重新启用系统完整性保护。
5)再次重启您的 Mac 进入恢复模式。(按住 Command+R 键)
6)当您处于恢复模式屏幕时,打开终端。
7)输入以下代码。
csrutil enable /reboot
再次提醒您,确保重新启用了系统完整性保护。在重启后,使用终端进行检查:
csrutil status.
sudo gem update -n /usr/local/bin --system
(注:Gem是一种用于在Ruby编程语言中管理库和依赖项的工具。上述命令会使用管理员权限来更新Gem并将其安装在/usr/local/bin目录下) - Cœur/usr/bin/gem
来确保更新由苹果安装的rubygems。运行sudo /usr/bin/gem update -n /usr/local/bin --system
。请参见答案https://dev59.com/lFwY5IYBdhLWcg3wF0he#46662080。 - Eliot Sykes