ลบไฟล์บน Linux โดยใช้หมายเลข inode


15

ถ้าคุณสร้างไฟล์บน Unix / Linux ที่มีตัวอักษรพิเศษเช่นคุณไม่สามารถลบออกได้ด้วยtouch \"la* rm "la*คุณต้องใช้หมายเลขไอโหนด (คุณสามารถทำได้ถ้าคุณเพิ่ม\ก่อนชื่อฉันรู้ แต่คุณต้องเดาว่าเป็นผู้ใช้ที่ใช้ในการสร้างไฟล์)

ฉันตรวจสอบ manpage เพื่อหา rm แต่ไม่มีการพูดถึงหมายเลข inode การทำrm inodenumberไม่ได้ผลเช่นกัน

คำสั่งสำหรับสิ่งนี้คืออะไร?

คำตอบ:


24

วิธีการอื่น ๆ ได้แก่ :

หลบหนีตัวอักษรพิเศษ:

[~] $ rm \ "la \ *

ใช้คำสั่ง find และค้นหาเฉพาะไดเรกทอรีปัจจุบัน คำสั่ง find สามารถค้นหาหมายเลข inode และมี-deleteสวิตช์สะดวก:

[~] $ ls -i
7404301 "la *

[~] $ ค้นหา -maxdepth 1 -type f -inum 7404301
./"la*

[~] $ ค้นหา -maxdepth 1 -type f -inum 7404301 -delete
[~] $ ls -i
[~] $

เฮ้การใช้ find แน่นอนจะง่ายกว่าคำแนะนำของฉันฉันไม่เคยสังเกต -inum :)

ค้นหามีจำนวนมากของสวิทช์ที่ดีที่จะได้รับการสำรวจก็เครื่องมือมีดทหารสวิสของฉันจะซื่อสัตย์ค่อนข้าง :)
จอห์นที

t: โอ้จริงเหรอ
akira

Solaris ไม่มีตัวเลือก "-delete" ของ "-maxdepth"
guthrie

คุณควร จำกัด การค้นหาด้วย-xdevตัวเลือกเนื่องจากระบบไฟล์ที่เมาท์อื่นอาจมีไฟล์ที่ไม่เกี่ยวข้องที่มีหมายเลขไอโหนดเดียวกัน
Jonas Berlin

5

บางทีฉันอาจจะพลาดบางสิ่งบางอย่าง แต่ ...

rm '"la*'

อย่างไรก็ตามชื่อไฟล์ไม่มี inodes ไฟล์ทำ การพยายามลบไฟล์โดยไม่ลบชื่อไฟล์ทั้งหมดที่ชี้ไปจะทำให้ระบบไฟล์ของคุณเสียหาย


นี่จะใช้งานได้กับไดเรกทอรีปัจจุบันเท่านั้น แต่แท้จริงแล้วเป็นสาเหตุที่ถูกต้องสำหรับข้อกังวล โง่ที่ฉันคิดถึงมัน ยังไม่ได้ลบไฟล์
KdgDev

3
ไม่แน่นอน ไฟล์จะถูกลบออกเฉพาะเมื่อไม่มีชื่อไฟล์ที่ชี้ไปยังไฟล์นั้นอีกและไม่มีกระบวนการที่เปิดไว้
Ignacio Vazquez-Abrams

5

หากคุณจริงๆต้องการทำเช่นนี้ - และกรณีการใช้งานของคุณไม่ได้จริงๆมีลักษณะเหมือนที่คุณจำเป็นต้องที่ทุกท่านอาจจะพยายามระบบแฟ้มเครื่องมือการแก้จุดบกพร่อง หากคุณเต็มใจที่จะสูญเสียทุกสิ่งนั่นคือ

ตัวอย่างเช่นสำหรับ ext2 / debugfs3/4 คำสั่งมีตัวเลือก "kill_file" ที่ดูเหมือนจะใช้ inode ดังที่กล่าวไว้ในคำตอบอื่น ๆ สิ่งนี้จะทำให้ระบบไฟล์ของคุณเสียหายเนื่องจากจะมีรายการไดเรกทอรีที่ชี้ไปยังไฟล์ที่ไม่มีอยู่จริง การเรียกใช้fsckหลังจากนั้นอาจสามารถซ่อมแซมได้ ไม่น่าเป็นไปได้ที่คุณสามารถทำได้บนระบบไฟล์ที่เมาท์

แต่ฉันขอแนะนำให้คุณใช้การหลีกเลี่ยง / การอ้างอิงที่เหมาะสมและลบไฟล์ดังกล่าวด้วยrmคำสั่งปกติตามที่ระบุไว้ในการตอบกลับก่อนหน้า - และใช้rm -iเพื่อความปลอดภัยเป็นพิเศษเมื่อจัดการกับชื่อไฟล์ที่มีอักขระกลมเช่น *


1

ในขณะที่ฉันขอแนะนำวิธีการ "หลีกเลี่ยงอักขระพิเศษ" มีclriคำสั่งเสมอเมื่อคุณต้องการความเสียหายของระบบไฟล์ที่แก้ไขได้


2
ควรสังเกตว่าclriปกติจะปรากฏเฉพาะในระบบ Oracle (เช่น SunOS)
can-ned_food


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