Saya tidak dapat menghapus pohon direktori dengan rm -rf

9

Ini sepertinya sangat aneh bagi saya. Saya menjalankan kernel 2.6.37.2 dan berlari:

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

Saya mendapatkan beberapa izin yang ditolak ketika menyalin seperti yang diharapkan dan saya akhirnya menekan Control-C. Saya mendapatkan Permission deniedbanyak file ketika mencoba untuk menghapus direktori dan file baru.

Sebagai catatan, saya menemukan perilaku aneh ini karena seorang teman mengirimi saya .tgzsebuah snapshot dari /procdir- nya . Saya mengekstrak direktori dan ketika saya selesai melihat-lihat, saya memiliki masalah yang sama.

rm -rf sebagai root berhasil.

lsattr memperlihatkan atribut e (yang ditunjukkan oleh semua file / direktori saya).

cacat
sumber
Saya telah menggeneralisasi judul pertanyaan Anda sedikit karena masalah intinya bukan tentang /proc. Ngomong-ngomong, ini agak terlambat untuk kali ini, tetapi jika Anda mengetahui jawabannya setelah memposting pertanyaan, tidak apa-apa untuk menjawabnya sendiri , dan serahkan untuk orang lain yang mungkin mengalami masalah serupa.
Gilles 'SO- berhenti bersikap jahat'

Jawaban:

16

Jika ada direktori tidak kosong di mana Anda tidak memiliki izin menulis, Anda tidak dapat menghapus isinya.

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

Alasannya adalah bahwa rmitu terikat oleh izin seperti perintah lain, dan izin untuk menghapus barmemerlukan izin tulis foo. Ini tidak berlaku ketika Anda menjalankan rmsebagai root karena root selalu memiliki izin untuk menghapus file.

Untuk membuat pohon direktori dapat dihapus, buat semua direktori di dalamnya dapat ditulisi (izin file biasa tidak masalah saat dihapus rm -f). Anda dapat menggunakan salah satu dari perintah ini:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Masih hasil yang sama "Operasi tidak diizinkan"
Legionar