TL;DR
ターミナルで Operation not permitted が発生している場合、以下の3つの修正方法で90%のケースをカバーできます:
- **「システム設定」→「プライバシーとセキュリティ」→「フルディスクアクセス」**に移動し、Terminal(またはお使いのシェルアプリ)を追加してください。
- システムファイルを変更しようとしている場合は、まずSIPを確認してください:
csrutil status。 - 通常のファイルの問題の場合は、
ls -laでオーナーを確認し、chmod/chownで修正してください。
このエラーの原因
Operation not permitted(errno 1)は4つの異なる状況で発生します。それぞれの修正方法は全く異なります:
- フルディスクアクセスが未許可 — Catalinaからターミナルが
~/Desktop、~/Documents、~/Downloads、メールデータなどにアクセスするためにFDAの明示的な許可が必要になりました。FDAがなければ、自分のユーザーであってもアクセスできません。 - システム整合性保護(SIP) — SIPは
/System、/usr、/bin、/sbinをロックします。sudoでもオーバーライドすることはできません。 - ファイル/ディレクトリのパーミッション — 古典的なUNIXの問題: オーナーが間違っている、モードビットが間違っている、またはファイルにBSDの変更不可フラグ(
uchg/schg)が設定されています。 - サンドボックス制限 — サンドボックス化されたアプリはファイルシステム上の任意のパスに自由にアクセスできません。
修正1: Terminalにフルディスクアクセスを許可する
ホームフォルダ内でエラーが発生する場合、10回中9回はこの修正が有効です。
- 「システム設定」(macOS Ventura以降)または**「システム環境設定」**(Monterey以前)を開きます。
- **「プライバシーとセキュリティ」→「フルディスクアクセス」**に移動します。
- **「+」**をクリックし、
/Applications/Utilities/からTerminal.appを追加します。 - iTerm2、Warp、またはその他のシェルを使用している場合は、そのアプリも追加してください。FDAはアプリケーションごとに付与されます。
Terminalを再起動してから再試行してください。同じコマンドがエラーなく実行されれば成功です。
修正前後の簡単な確認方法:
ls ~/Library/Mail
# FDAなし: Operation not permitted
# FDAあり: ディレクトリの内容が表示される
修正2: SIPの確認と対処
SIPはOSのコアパスを保護します。ここではsudoは効きません。これは仕様によるものです。
csrutil status
# System Integrity Protection status: enabled.
/System/Library、/usr/bin、または/sbinを変更しようとしていますか?SIPが正常に機能しています。SIPと戦わないでください。
ほとんどの場合、回避策を使う方が賢明です。/usr/bin/python3を直接編集する代わりに、pyenvでPythonのバージョンを管理するか、Homebrewを使って/opt/homebrew(Apple Silicon)または/usr/local(Intel)にツールをインストールしましょう。同じ結果を得られ、SIPと格闘せずに済みます。
カーネル拡張機能の開発など、本当にSIPを無効にする必要がある場合の手順:
- リカバリーモードで再起動します: Intelの場合はCmd+Rを押し続け、Apple Siliconの場合はオプション画面が表示されるまで電源ボタンを押し続けます。
- ユーティリティメニューからTerminalを開きます。
csrutil disableを実行し、通常通り再起動します。
作業が完了したら再度有効にします: リカバリーに再起動してcsrutil enableを実行してください。日常使いのマシンでSIPをオフのままにしないでください。
修正3: ファイルのパーミッションを修正する
ファイルのオーナーなのにまだブロックされている場合は、実際のパーミッションを確認してください:
ls -la /path/to/file
# -r--r--r-- 1 root wheel 1024 Mar 18 10:00 myfile.txt
この出力からすべてがわかります: rootがオーナーで、誰も書き込みアクセス権を持っていません。修正方法:
# ファイルのオーナーシップを取得する
sudo chown $(whoami) /path/to/file
# スクリプトを実行可能にする
chmod +x myscript.sh
# テキストファイルの標準的な読み書き権限
chmod 644 myfile.txt
# ディレクトリ全体を再帰的に修正する
chmod -R 755 /path/to/dir
どのオクタル値を使えばいいかわからない場合は、ToolCraftのUnix権限計算機でチェックボックスを選択するだけで正確なchmodの数値が得られます。644と755のどちらを使うべきか覚えられないときに便利です。
修正4: 変更不可フラグを削除する
問題がパーミッションではなく、オーナーに関係なくファイルをロックするBSDフラグである場合があります。
# -O フラグでBSDフラグを確認できる
ls -lO /path/to/file
# -rw-r--r-- 1 user staff uchg 512 Mar 18 file.txt
# ^^^^ これが原因
# ユーザーの変更不可フラグを削除する
chflags nouchg /path/to/file
# システムロックされたファイルにはsudoが必要
sudo chflags noschg /path/to/file
uchgフラグは、Finderの「情報を見る」の「ロック」チェックボックスによって設定されます。そのチェックを入れたことを忘れていた場合、これが原因です。
修正5: Rosetta / アーキテクチャの不一致
Apple Silicon MacでRosettaを通じてx86バイナリを実行している場合、変換されたバイナリに適切なエンタイトルメントがなく、このエラーが発生することがあります。代わりにネイティブで実行してください:
# バイナリがどのアーキテクチャ向けにビルドされたか確認する
file /usr/local/bin/mytool
# mytool: Mach-O 64-bit executable x86_64
# ネイティブARMで強制実行する
arch -arm64 /usr/local/bin/mytool
修正の確認
失敗したコマンドを再実行してください。それが唯一の確認方法です。
FDAの確認:
# フルディスクアクセスを許可した後、内容が表示されるはず
ls ~/Library/Safari
# デスクトップへの書き込みテスト
touch ~/Desktop/test_file.txt && echo "書き込み完了" && rm ~/Desktop/test_file.txt
パーミッション修正の確認:
# 新しいパーミッションが正しいか確認する
ls -la /path/to/file
# 元のコマンドを再実行する
./myscript.sh
クイックリファレンス
- 保護されたユーザーディレクトリ(Desktop、Documents、Downloadsなど)→ フルディスクアクセスを許可する
- /System、/usr/bin、/sbin → SIPが正常に機能している。代替パスを探す
- 自分がオーナーのファイル →
chmod/chown - 変更不可ファイル →
chflags nouchg - sudoが効かない場合 → 本当の問題はUnixのパーミッションではなく、SIPまたはFDAです

