rm: cannot remove ‘file’: Operation not permitted の原因と対処

  • URLをコピーしました!

Linux でファイルを削除しようとした際に、以下のようなエラーが出ることがあります。

rm: cannot remove 'file': Operation not permitted

通常、削除できない場合は「Permission denied」が出ますが、Operation not permitted は少し特殊です。
これは単に権限不足ではなく、ファイルに「immutable(変更不可)」属性が付与されている可能性があります。

目次

主な原因

  1. immutable 属性が付いている
    • chattr +i file が設定されていると、root であっても削除や変更ができません。
  2. ファイルシステムレベルの制御
    • 特殊なファイルシステム(例: NFS, 読み取り専用マウント)で発生する場合があります。
  3. SELinux / AppArmor による制御
    • 特定のディレクトリ・ファイルに対して制限がかかっている可能性があります。

解決方法

1. immutable 属性を確認

まず lsattr コマンドで属性を確認します。

lsattr file

出力例:

----i--------- file

i が付いていれば immutable です。

2. immutable 属性を解除

属性を解除するには chattr -i を実行します。

sudo chattr -i file

解除後、再度削除できます。

rm file

3. ディレクトリ全体に適用されている場合

ディレクトリごと immutable になっていることもあります。
その場合は再帰的に解除します。

sudo chattr -R -i directory/

4. マウントオプションの確認

削除できない場合は、対象のファイルシステムが 読み取り専用 (read-only) でマウントされていないか確認します。

mount | grep /path/to/mount

必要に応じて再マウントします。

sudo mount -o remount,rw /mountpoint

5. SELinux / AppArmor の影響

audit.logdmesg を確認して、セキュリティ制御が原因になっていないか調べます。

SELinux が原因の場合、一時的に無効化して検証できます。

getenforce
# Enforcing の場合
sudo setenforce 0   # 検証用

(AppArmor も同様にプロファイルを確認)

まとめ

  • rm: Operation not permitted権限不足ではなく属性・ファイルシステム制御が原因
  • 最も多いのは immutable 属性 (chattr +i) が設定されているケース。
  • lsattrchattr -i で解除すれば削除可能。
  • 読み取り専用マウントや SELinux/AppArmor も併せて確認する。

👉 「Permission denied」と「Operation not permitted」の違いを知っておくと、原因を切り分けやすいです。

目次