web-dev-qa-db-ja.com

rm -rfでディレクトリツリーを削除できない

これは私には非常に奇妙に思えます。私はカーネル2.6.37.2を実行しており、実行しました:

~]$ cp -r /proc/ here
~]$ rm -rf here

期待通りにコピーするといくつかの許可が拒否され、最終的にControl-Cを押します。 Permission denied新しいディレクトリとファイルを削除しようとすると、多くのファイルに。

メモとして、友人が.tgz彼のスナップショットの/proc dir。私はディレクトリを抽出し、それを調べ終わったとき、同じ問題がありました。

rm -rfはrootで機能します。

lsattrはe属性を示します(これは私のすべてのファイル/ディレクトリに表示されるものです)。

9
flumpb

空でないディレクトリに書き込み権限がない場合、その内容を削除することはできません。

$ mkdir foo
$ touch foo/bar
$ chmod a-w foo
$ rm -rf foo
rm: cannot remove `foo/bar': Permission denied

その理由は、rmが他のコマンドと同様に権限にバインドされており、barを削除する権限にはfooへの書き込み権限が必要なためです。 rootが常にファイルを削除する権限を持っているため、rmをrootとして実行する場合、これは当てはまりません。

ディレクトリツリーを削除可能にするには、その中のすべてのディレクトリを書き込み可能にします(通常のファイルの権限は、rm -fで削除する場合は関係ありません)。次のいずれかのコマンドを使用できます。

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +