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

59

当我在OSX El Capitan上执行时:

sudo gem update --system  

我遇到了这个错误:

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

7
自从升级至El Capitan后,我也遇到了相同的问题 :/ - Granit
虽然这是一个有点老的帖子,但我不想通过安装Homebrew来采用“变通方法”。将其添加到本地用户中,可以避免使用sudo,并解决权限问题:https://dev59.com/p1wY5IYBdhLWcg3w_cFH#32253142 - DavidP
3
使用以下命令更新系统中的Gem软件包管理器: sudo gem update -n /usr/local/bin --system (注:Gem是一种用于在Ruby编程语言中管理库和依赖项的工具。上述命令会使用管理员权限来更新Gem并将其安装在/usr/local/bin目录下) - Cœur
这对我有效。 - zedzhao
1
我需要使用绝对路径/usr/bin/gem来确保更新由苹果安装的rubygems。运行sudo /usr/bin/gem update -n /usr/local/bin --system。请参见答案https://dev59.com/lFwY5IYBdhLWcg3wF0he#46662080。 - Eliot Sykes
8个回答

84

最终通过Homebrew安装了Ruby。首先要安装Homebrew:

http://brew.sh

然后执行以下命令:

brew install ruby

之后它表现得非常出色。这与本地 Ruby 安装有关。


嗨,MarcDK,你能解释一下这实际上是做什么的吗?我和yongfong zhang有同样的问题。如果我们尝试你的解决方案,那么sudo gem update --system命令以后会起作用吗? - LargeGlasses
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - tomturton
遇到了同样的问题,按照以下步骤解决了。不太确定为什么我的 gem 停止工作了,可能是因为我换了新电脑。 - James111
1
首先,必须先修复权限。具体的操作步骤可以在这里找到:http://digitizor.com/fix-homebrew-permissions-osx-el-capitan/ 修复完权限之后,问题就解决了。 - pixeline
当我尝试使用brew install ruby命令时,它会提示我以下错误信息:“Warning: ruby-2.2.1已经安装,只是没有链接”。 - KarenAnne
显示剩余3条评论

34

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

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

感谢用户endoplasmic在此问题主题中发现了这个方法:https://github.com/sass/sass/issues/1768


这对我安装jsduck也起作用了。虽然我不知道为什么。 - Flame
这甚至可以在本地安装的 Ruby 上运行。干得好。 - phatmann
1
有没有办法将这个路径设置为 gem 的默认路径,这样我每次安装/更新 gem 时就不必输入“-n /usr/local/bin”了? - Matthew Davis
1
@MatthewDavis 你可以通过 echo "gem: -n/usr/local/bin" >> ~/.gemrc 永久更改默认路径。 - Blackvenom

23

从El Capitan开始,为了安全起见,苹果禁止用户应用程序修改/usr/bin。因此,只需在推荐的文件夹/usr/local/bin中安装/更新rubygems:

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

14

这是10.11的一个“问题”(苹果称其为功能)。基本上,您无法修改/usr/bin(即使作为根用户sudo su -),还有许多其他文件夹也不能被修改。

如果运行ls -l /usr/bin,您会注意到权限为555r-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,直到苹果公司认为这太不安全了......


1

0

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

  1. 通过homebrew升级您的ruby版本。

    brew upgrade ruby

  2. 如果更新ruby失败,可以使用此链接帮助您。

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


0
如果您安装了多个 RubyGems(例如来自 Homebrew、rbenv、rvm 等),为了将更新针对默认的 Apple 安装的 RubyGems,您可能需要使用绝对路径 /usr/bin/gem 来确保更新特定的 RubyGems:
# Note the absolute path to /usr/bin/gem:
sudo /usr/bin/gem update -n /usr/local/bin --system

-2

当我尝试卸载和重新安装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.

希望这能帮助到有同样问题的任何人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接