「Operation not permitted」で du
しようもない
Mac を Mojave にしてからターミナルで du コマンドを実行すると「
du: 〜: Operation not permitted
」と表示されるのでdu
しようもないのです。2020/08/28 追記: Catalina でも同じ現象が出ました。
せやかて sudo
でも同じで「du
んだけ〜」とか思ってたら、ls
mv
cp
crontab
などの他のコマンドだけでなく Docker、VSCode でも出るので、チョイチョイ叱られるため困りました。
$ # ホームディレクトリ直下にあるサブディレクトリ容量の表示
$ 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 の実行
$ 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 (今北産業)
-
デフォルトのセキュリティ設定がさらに厳しくなった(macOS Mojave, OSX 10.14 以降)
-
実行ユーザー下のディレクトリ(ホームやゴミ箱など)であっても、ユーザーデータにアクセスするアプリは明示的に許可しないといけなくなった
-
システム環境設定で該当アプリにフルディスクアクセスを許可する必要があります(この場合「ターミナル」)
「ターミナル」や「iTerm」アプリに限らず、ユーザ操作なくディスクアクセスがあるアプリは明示的に追加が必要です。例えば crontab
の場合はcron
コマンド本体、Docker Desktop の場合はDocker.app
、VSCode の場合はVisual Studio Code.app
などです。
上記を試してもゴミ箱の「特定のファイル」だけが削除できない場合、おそらく原因は別です。
にっちもさっちもゴミ箱が空にできない
ゴミ箱の特定のファイルが、どうにも Operation not permitted
で削除できない場合があります。
OS は、処理に必要な一時的なファイル(ロック・ファイルなど)を作成することがありますが、処理後に削除されます。この時、OS が後処理を行う前 or 行っている最中にユーザが重要なファイルをゴミ箱に移動してしまった場合に、この現象が発生したりします。特に iCloud の同期中に大きなファイルなどの操作をした場合に顕著です。
例えば、USB に macOS イメージを焼いた後に OS インストール・アプリ(Install_*.app
)を削除するも、ゴミ箱から削除できなくなった、などです。
おそらく削除できないファイルのオーナーが root:wheel
になっており、sudo chmod
でも変更できないと思います。その場合は、天下の SIP
返しを喰らわせて(一時的に無効にして)から削除する必要があります。
- 初心者向け MacでOperation not permittedの解決方法 @ Qiita
- 起動時ショートカットのメモ(起動時のジャーンの直後に押下)
- リカバリーモード:
⌘
(command
) +R
押しっぱなし (Recovery mode
) - セーフモード:
Shift
押しっぱなし (Safe mode
)
- リカバリーモード:
項目“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
参考文献
- Can't delete a file in the trash @ discussions.apple.com
- macOS Ventura doesn't let me delete "Install macOS Mojave.app" @ discussions.apple.com
上記を試してもインストールしたアプリが実行できない場合、問題は設置先にある可能性があります。
ニッチなアプリがどうにも実行できない
アプリやコマンドを、パッケージマネージャーでなくインストーラーを使ってインストールした場合、Linux/UNIX の古い習慣により macOS では許可されていないディレクトリにインストールされることがあります。
OS X 10.11 (El Capitan) 以降、SIP によりシステムの要となるディレクトリ(/System
/usr
/bin
/sbin
/var
)には任意のアプリを置けなくなりました。
さらに macOS 10.15 (Catalina) からは、これらのシステム・ディレクトリは読み取り専用のパーティション(ボリューム)に置かれることとなりました。つまり、マウントされた先に SIP を無効にしてプログラムを置いたとしても "Read-only file system" エラーが出るようになります。
任意のアプリは、基本的にユーザ・ディレクトリ(~
)の下(例えば ~/Application
~/Library
~/.local
など)か、/Applications
/Library
/usr/local
の下に置く必要があります。
- About System Integrity Protection on your Mac | Support @ apple.com
TS; DR (なんか色々細かいこと)
「システム環境設定」の「セキュリティとプライバシー」にある「フルディスクアクセス」に「ターミナル」アプリを追加して許可する。
-
手順
- アップルメニュー →
[システム環境設定]
→[セキュリティとプライバシー]
→[プライバシー]
-[フルディスクアクセス]
→(鍵を解除)
→「+」ボタン押下
→ 「アプリケーション」フォルダの「ユーティリティ」にある「ターミナル」を追加 - 【注意】この作業の前に、ターミナルは終了していること
- アップルメニュー →
macOS Mojave(OSX 10.14)以降でセキュリティ設定がさらに厳しくなったため、セキュリティに関わるディレクトリ(ホームディレクトリなど)のファイルへアクセスするアプリは、たとえ sudo
付きであっても「Operation not permitted
」が出るようになりました。これは、 du
ls
mv
cp
といった基本コマンドでも同じです。
設定変更後の出力結果
$ 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 の時のように SIP
2 がらみの設定だと仮定すると厄介です。リカバリーモードで csrutil disable
のターミナル操作などが必要3になるからです。
しかし、新しく入れた OS に余計な設定はしたくありませんし、アプリの動作検証のために設定を元に戻すのも大変です。
それでも容量は確認しないといけないため、「下手に新たにアプリを入れるのもなぁ」と思って検索してみた4ところ、英語でドンピシャの良質記事がありました5。助かりました。
「Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily
参考文献
-
「ディレクトリ以下のディスク容量を調べるduコマンド」@ Qiita ↩
-
「システム整合性保護(System Integrity Protection)」@ Wikipedia ↩
-
「初心者向け MacでOperation not permittedの解決方法」@ Qiita ↩
-
「
"Operation not permitted"
mac
mojave
」の検索結果 @ Google ↩ -
「Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily ↩