ฉันไม่สามารถลบไดเรกทอรีต้นไม้ด้วย rm -rf


9

นี่มันแปลกมากสำหรับฉัน ฉันใช้เคอร์เนล 2.6.37.2 และวิ่ง:

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

ฉันได้รับอนุญาตปฏิเสธเมื่อคัดลอกตามที่คาดไว้และในที่สุดฉันก็กด Control-C ฉันได้รับPermission deniedไฟล์จำนวนมากเมื่อพยายามลบไดเรกทอรีและไฟล์ใหม่

ตามบันทึกแล้วฉันพบพฤติกรรมแปลก ๆ นี้เพราะเพื่อนส่งส.tgzแนปช็อตของเขาให้/procฉัน ฉันแยกไดเรกทอรีและเมื่อฉันตรวจสอบเสร็จแล้วฉันพบปัญหาเดียวกัน

rm -rf รากทำงานได้

lsattr แสดงแอตทริบิวต์ e (ซึ่งเป็นสิ่งที่ไฟล์ / ไดเรกทอรีทั้งหมดของฉันแสดง)


ฉันได้ทั่วไปในเรื่องของคำถามของคุณเล็ก ๆ น้อย ๆ /procเพราะปัญหาหลักคือไม่ได้เกี่ยวกับ ถึงตอนนี้มันจะสายไปหน่อย แต่ถ้าคุณคิดคำตอบหลังจากโพสต์คำถามคุณก็ควรตอบคำถามเองและปล่อยให้คนอื่นที่อาจมีปัญหาคล้ายกัน
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


16

หากมีไดเรกทอรีที่ไม่ว่างซึ่งคุณไม่มีสิทธิ์เขียนคุณไม่สามารถลบเนื้อหาได้

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

เหตุผลก็คือว่าrmจะผูกพันตามสิทธิ์เช่นคำสั่งอื่น ๆ และได้รับอนุญาตให้ลบต้องใช้สิทธิ์ในการเขียนbar fooสิ่งนี้จะไม่ใช้เมื่อคุณเรียกใช้rmในฐานะรูทเนื่องจากรูทมีสิทธิ์ในการลบไฟล์เสมอ

ในการทำให้ทรีไดเรกทอรีถูกลบทิ้งให้สร้างไดเรกทอรีทั้งหมดที่อยู่ในนั้นเขียนได้ (การอนุญาตของไฟล์ปกติไม่สำคัญเมื่อมาถึงการลบด้วยrm -f) คุณสามารถใช้คำสั่งเหล่านี้:

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

ยังคงเป็นผลลัพธ์เดียวกัน "ไม่อนุญาตให้ใช้งาน"
Legionar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.