Edited at

MacOS MojaveでシステムのRubyにインストールしてしまったGemを消す

久しぶりにRubyでなにか作ろうとしてシステムのRubyにGemをインストールたものの、消すときにエラーが出たのでメモ


こんなエラー

You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

you don't have write permissions for the /usr/bin directory. mac remove gems

sudoをつけてもだめ。


解決策


SIP システム整合性保護(System Integrity Protection)の無効化

Command+Rを押しながらMacを再起動してリカバリモードへ

「ユーティリティ」から「ターミナル」を開く

システムを変更するよみたいなダイアログが出るので、管理者になっているユーザのパスワードを入力。

だいたい自分のパスワードを入れるっぽい。

csrutil disable

そして再起動して、普通にシステムを起動して以下のコマンドでSIPが無効になったか確認

csrutil status

System Integrity Protection status: disabled.

と表示されればSIPが無効になったのでGemを消していく。


Gemの削除

今回はデフォルトで入ってるもの以外を消したかったので

sudo gem uninstall -axI `gem list --no-versions | egrep -v 'rdoc|psych|json|io-console|bigdecimal'


SIPを再度有効にする

Command+Rを押しながら再起動してリカバリモードへ。

SIPを無効にしたときと同じく、「ユーティリティ」から「ターミナル」を開いて

csrutil enable

そして再起動して普通にシステムを起動することで、再度SIPが有効になる。

一応有効になっているかターミナルを開いて確認するといいかもしれない。

csrutil status

System Integrity Protection status: enabled.


おわりに

SIPの効果として/usr/binあたりがrootでもいじれないみたい。

Rubyでなにかやるときはrbenvを使ってやっていこう。


参考サイト

画像で説明、macOS MojaveでSIPを無効にする方法 (csrutilコマンドの使い方)

gemを間違えてグローバルにインストールしてしまった場合