LoginSignup
188
83

macOS の「Operation not permitted」を回避する【du/ls/mv/cp 実行時】【Mojave/Catalina 以降】

Last updated at Posted at 2019-01-17

「Operation not permitted」で du しようもない

Mac を Mojave にしてからターミナルで du コマンドを実行すると「du: 〜: Operation not permitted」と表示されるので du しようもないのです。

2020/08/28 追記: Catalina でも同じ現象が出ました。

せやかて sudo でも同じで「du んだけ⤴️」とか思ってたら、ls mv cp などの他のコマンドでもチョイチョイ出るので困りました。

まずはエラーをCatalina
$ # ホームディレクトリ直下にあるサブディレクトリ容量の表示
$ sudo du -d 1 -h ~
Password:
(略)
du: /Users/admin/Library/Application Support/CallHistoryTransactions: Operation not permitted
du: /Users/admin/Library/Application Support/com.apple.TCC: Operation not permitted
du: /Users/admin/Library/Application Support/CallHistoryDB: Operation not permitted
du: /Users/admin/Library/IdentityServices: Operation not permitted
du: /Users/admin/Library/Messages: Operation not permitted
du: /Users/admin/Library/HomeKit: Operation not permitted
du: /Users/admin/Library/Mail: Operation not permitted
du: /Users/admin/Library/Safari: Operation not permitted
du: /Users/admin/Library/Suggestions: Operation not permitted
(以下省略)
検証環境と現象の完全ログ
検証環境
$ # 検証日
$ date
2019年 1月17日 木曜日 17時10分14秒 JST
$ 
$ # OSのバージョン
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.2
BuildVersion:	18C54
$
$ # du コマンドのバージョン
$ man du | tail -1 | sed -e 's/  */ /g'
BSD June 2, 2004 BSD
duコマンドでの現象
$ # ホームディレクトリで du の実行
$ sudo du -d 1 -h ~
Password:
3.8M	/Users/admin/Music
8.0K	/Users/admin/.docker
8.0K	/Users/admin/.local
  0B	/Users/admin/Pictures
6.0M	/Users/admin/.phpls
 54M	/Users/admin/Desktop
du: /Users/admin/Library/Application Support/CallHistoryTransactions: Operation not permitted
du: /Users/admin/Library/Application Support/com.apple.TCC: Operation not permitted
du: /Users/admin/Library/Application Support/CallHistoryDB: Operation not permitted
du: /Users/admin/Library/IdentityServices: Operation not permitted
du: /Users/admin/Library/Messages: Operation not permitted
du: /Users/admin/Library/HomeKit: Operation not permitted
du: /Users/admin/Library/Mail: Operation not permitted
du: /Users/admin/Library/Safari: Operation not permitted
du: /Users/admin/Library/Suggestions: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.VoiceMemos: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.Home: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.Safari: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.iChat: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.mail: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.stocks: Operation not permitted
du: /Users/admin/Library/PersonalizationPortrait: Operation not permitted
du: /Users/admin/Library/Metadata/CoreSpotlight: Operation not permitted
du: /Users/admin/Library/Cookies: Operation not permitted
du: /Users/admin/Library/Caches/com.apple.safaridavclient: Operation not permitted
du: /Users/admin/Library/Caches/CloudKit/com.apple.Safari: Operation not permitted
du: /Users/admin/Library/Caches/com.apple.Safari: Operation not permitted
9.6G	/Users/admin/Library
200K	/Users/admin/.bash_sessions
  0B	/Users/admin/Public
  0B	/Users/admin/Movies
  0B	/Users/admin/Applications
  0B	/Users/admin/.Trash
326M	/Users/admin/Documents
147M	/Users/admin/Downloads
1.6M	/Users/admin/.cache
 10G	/Users/admin
同じディレクトリ階層の可視ファイル一覧
$ ls -lh ~/
total 0
drwx------@  3 admin  staff    96B  1 15 23:48 Applications
drwx------@ 56 admin  staff   1.8K  1 16 00:19 Desktop
drwx------@  9 admin  staff   288B  1 15 19:40 Documents
drwx------+  6 admin  staff   192B  1 17 13:05 Downloads
lrwxr-xr-x   1 admin  staff    32B  1 16 12:44 GitHub -> /Volumes/HDD_EXT_01/Git/GitHub
drwx------@ 63 admin  staff   2.0K  1 17 03:56 Library
drwx------+  3 admin  staff    96B  1 15 19:37 Movies
drwx------+  5 admin  staff   160B  1 15 22:27 Music
drwx------+  3 admin  staff    96B  1 15 19:37 Pictures
drwxr-xr-x+  4 admin  staff   128B  1 15 19:37 Public
lrwxr-xr-x   1 admin  staff    36B  1 16 16:50 Tests -> /Volumes/HDD_EXT_01/Data_Practices

SIP をいじるにしても SIP 返しが怖いし、High Sierra に戻すのも「めん du」なので Mojave て〜状態なのです。... ... クドくてすみません 🙇‍♂️

"Operation not permitted" mac mojave」と Qiita 記事に絞ってググってみたものの、ピンポイントで、まとまった情報がなかったので自分のググラビリティとして。

TL; DR (今北産業)

  1. デフォルトのセキュリティ設定がさらに厳しくなった。
    (macOS Mojave, OSX 10.14 以降)

  2. 実行ユーザー下のディレクトリ(ホームやゴミ箱など)であっても、ユーザーデータにアクセスするアプリは明示的に許可しないといけなくなった。

  3. システム環境設定で「ターミナル」アプリにフルディスクアクセスを許可する必要があります。

    スクリーンショット 2019-01-17 17.25.23.png
    「ターミナル」や「iTerm」アプリに限らず、ユーザ操作なくディスクアクセスがあるものは明示的に追加が必要です。例えば crontab の場合は cron コマンド本体を追加するなどです。

上記を試してもゴミ箱の「特定のファイル」だけが削除できない場合、おそらく原因は別です。

にっちもさっちもゴミ箱が空にできない

ゴミ箱の特定のファイルが、どうにも Operation not permitted で削除できない場合があります。

OS は、処理に必要な(ロック・ファイル含む)一時的なファイルを作成することがありますが、処理後に削除されます。この時、OS が後処理を行う前 or 行っている最中にユーザが重要なファイルをゴミ箱に移動してしまった場合に、この現象が発生したりします。特に iCloud の同期中に大きなファイルなどの操作をした場合に顕著けんちょです。

例えば、USB に macOS イメージを焼いた後に OS インストール・アプリ(Install_*.app)を削除するも、ゴミ箱から削除できなくなった、などです。

おそらく削除できないファイルのオーナー所有者root:wheel になっており、sudo chmod でも変更できないと思います。その場合は、天下の SIP 返しを喰らわせて(一時的に無効にして)から削除する必要があります。

エラーメッセージ
項目“macOS_HighSierra_10.13.6_install.app”が使用中のため、操作を完了できません。
エラーメッセージ
一部の項目をスキップする必要があったため、操作を完了できません。各項目につき、“ファイル”>“情報を見る”と選択し、“ロック”が選択解除されていることを確認してください。次に、“共有とアクセス権”セクションを確認してください。項目がロックされていないこと、および“読み出しのみ”または“アクセス不可”に指定されていないことを確認したら、やり直してください。
削除を試みるも失敗する
$ # 該当ファイルの確認 @ ゴミ箱
$ cd ~/.Trash && ls -lah
total 0
drwx------+  3 keinos  staff    96B  9 10 10:08 .
drwxr-xr-x+ 78 keinos  staff   2.4K  9 10 10:19 ..
drwxrwxrwx   3 keinos  staff    96B  6  4 09:46 macOS_HighSierra_10.13.6_install.app

$ # InstallESD.dmg が最初に削除に失敗している
$ sudo rm -rf ~/.Trash/*.app
Password:
rm: /Users/keinos/.Trash/macOS_HighSierra_10.13.6_install.app/Contents/SharedSupport/InstallESD.dmg: Operation not permitted
rm: /Users/keinos/.Trash/macOS_HighSierra_10.13.6_install.app/Contents/SharedSupport: Directory not empty
rm: /Users/keinos/.Trash/macOS_HighSierra_10.13.6_install.app/Contents: Directory not empty
rm: /Users/keinos/.Trash/macOS_HighSierra_10.13.6_install.app: Directory not empty
個別にファイルを削除しようとするも失敗する
$ cd ~/.Trash/macOS_HighSierra_10.13.6_install.app/Contents/SharedSupport

$ # ファイルのオーナーと権限を確認
$ ls -lah
total 9222688
drwxr-xr-x  3 keinos  staff    96B  6  4 09:48 .
drwxr-xr-x  3 keinos  staff    96B  6  4 09:48 ..
-rw-r--r--  1 root   wheel   4.4G  6  4 09:46 InstallESD.dmg

$ # オーナーの変更できず
$ sudo chown keinos:staff InstallESD.dmg
Password:
chown: InstallESD.dmg: Operation not permitted

$ # root に切り替えて削除するも失敗
$ sudo su

sh-3.2# whoami
root

sh-3.2# ls
InstallESD.dmg

sh-3.2# rm -rf InstallESD.dmg
rm: InstallESD.dmg: Operation not permitted

参考文献

TS; DR (なんか色々細かいこと)

「システム環境設定」の「セキュリティとプライバシー」にある「フルディスクアクセス」に「ターミナル」アプリを追加して許可する。

  • 手順

    • アップルメニュー → [システム環境設定][セキュリティとプライバシー][プライバシー] - [フルディスクアクセス](鍵を解除)「+」ボタン押下 → 「アプリケーション」フォルダの「ユーティリティ」にある「ターミナル」を追加
    • 【注意】この作業の前に、ターミナルは終了していること

macOS Mojave(OSX 10.14)以降でセキュリティ設定がさらに厳しくなったため、セキュリティに関わるディレクトリ(ホームディレクトリなど)のファイルへアクセスするアプリは、たとえ sudo 付きであっても「Operation not permitted」が出るようになりました。これは、 du ls mv cp といった基本コマンドでも同じです。

設定変更後の出力結果

sudoなしでもOK
$ du -d 1 -h ~
3.8M	/Users/admin/Music
8.0K	/Users/admin/.docker
8.0K	/Users/admin/.local
  0B	/Users/admin/Pictures
6.0M	/Users/admin/.phpls
 55M	/Users/admin/Desktop
 10G	/Users/admin/Library
212K	/Users/admin/.bash_sessions
  0B	/Users/admin/Public
  0B	/Users/admin/Movies
  0B	/Users/admin/Applications
  0B	/Users/admin/.Trash
326M	/Users/admin/Documents
147M	/Users/admin/Downloads
1.6M	/Users/admin/.cache
 11G	/Users/admin

Permission denied」と表示される場合

$ du -d 1 -h ~
du: ./.DocumentRevisions-V100: Permission denied
du: ./.TemporaryItems: Permission denied
du: ./.Trashes: Permission denied

sudo を付けて実行すれば大丈夫です。(要パスワード)

$ sudo du -d 1 -h ~
Password:
 36M	./.DocumentRevisions-V100
  0B	./.TemporaryItems
 12K	./.Trashes

所感

去年(2018 年)から Mac の HighSierra で空き容量が足りないと頻繁に注意されていたので、思い切って平成最後の OS クリーン・インストールをすることにしました。

その際、OS も同じく頻繁に勧められていた Mojave にアップグレードすることにしたのです。(OSX 10.13 → 10.14)

しかし、Xcode を除く最低限必要なアプリに絞ったのに、思った以上に空き容量が確保できません。「ゲームもしないし、データはクラウドに置いてるし」と、たかをくくって小容量の MBP を選択したツケが回ってきました。

そこで du コマンドで各サブディレクトリの容量を確認1しようとしたところ、du: <略>: Operation not permitted のアクセス権エラーが乱発しました。

管理者アカウントでも NG で、sudo を付けても同じく NG でした。(記事上部の「検証環境と現象の完全ログ」参照)

HighSierra のころから、ディレクトリやファイルによっては「Operation not permitted」は表示されていたのですが、Mojave からユーザーのホームディレクトリ下でも表示されるようになりました。

「これは、シンボリック・リンクを張り間違えたの、か?」と心配になりましたが、特に問題はなさげ・・・です。

色々触ってみると、どうやら Mojave 以降でセキュリティ設定がさらに厳しくなった印象を受けます。

となると、HighSierra の時のように SIP2 がらみの設定だと仮定すると厄介です。リカバリーモードで csrutil disable のターミナル操作などが必要3になるからです。

しかし、新しく入れた OS に余計な設定はしたくありませんし、アプリの動作検証のために設定を元に戻すのも大変です。

それでも容量は確認しないといけないため、「下手に新たにアプリを入れるのもなぁ」と思って検索してみた4ところ、英語でドンピシャの良質記事がありました5。助かりました。

Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily


参考文献

  1. ディレクトリ以下のディスク容量を調べるduコマンド」@ Qiita

  2. システム整合性保護(System Integrity Protection)」@ Wikipedia

  3. 初心者向け MacでOperation not permittedの解決方法」@ Qiita

  4. Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily

188
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
188
83