วิธีการลบไฟล์ชื่อ“ filen / ame” (with slash) บนระบบไฟล์ ext4 ใน debugfs?


26

เล่นกับ e2fsprogs debugfsโดยการเปลี่ยนแปลง / อุบัติเหตุไฟล์ที่filen/ameถูกสร้างขึ้น เห็นได้ชัดว่าตัวละครสแลชไปข้างหน้า/ทำหน้าที่เป็นตัวคั่นพิเศษในชื่อพา ธ

ยังคงใช้debugfsฉันต้องการลบไฟล์ที่ชื่อfilen/ameแต่ฉันประสบความสำเร็จเพียงเล็กน้อยเนื่องจาก/ตัวละครไม่ได้ตีความว่าเป็นส่วนหนึ่งของชื่อไฟล์หรือไม่

debugfs มีวิธีลบไฟล์นี้ที่มีเครื่องหมายทับหรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร

ฉันใช้:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

ผลลัพธ์ใด:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

ฉันพยายามต่อไปนี้เพื่อลบfilen/ameไฟล์:

debugfs -w -R "rm filen/ame" /tmp/ext4fs

แต่สิ่งนี้ไม่ได้ผลและผลิตได้เฉพาะ:

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

นอกเหนือจากการเปลี่ยนเนื้อหาของโหนดไดเรกทอรีด้วยตนเองแล้วยังมีวิธีลบไฟล์โดยใช้debugfsหรือไม่?


การหลีกเลี่ยง forwardslash ( filen\/ame) ไม่ทำงานหรือไม่
JAB

17
+1 และขอแสดงความยินดี คุณจัดการเพื่อค้นหาหนึ่งในสองกรณีเท่านั้นของ "ตัวละครแปลก ๆ ในชื่อไฟล์" ที่เพียงแค่พูดอย่างถูกต้องและ / หรือการหลบหนีตัวละครในคำสั่งเชลล์จะไม่แก้ปัญหา (อีกอันหนึ่งจะเป็นค่า null ในชื่อไฟล์ถึงแม้ว่าฉันสงสัยว่าในระบบไฟล์ส่วนใหญ่ที่เพิ่งจะตัดทอนชื่อ)
Ilmari Karonen

คำตอบ:


33

หากคุณต้องการแก้ไขและไม่เพียง แต่พยายามdebugfsคุณสามารถให้fsckทำงานให้คุณได้ ทำเครื่องหมายระบบไฟล์ว่าสกปรกและทำงานfsck -yเพื่อเปลี่ยนชื่อไฟล์:

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

3
e2fsckมี-fตัวเลือก orce ที่จะนำไปสู่การตรวจสอบเต็มรูปแบบ“ แม้ว่าระบบไฟล์จะดูสะอาด”
David Foerster

3

ขอแสดงความยินดีกับ fsck ที่ทำงาน; ถ้าด้วยเหตุผลบางอย่างมันไม่ได้ทำงานคำตอบคือได้ls -i1ตามมาด้วยแล้วumountclri

Ref: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

ฉันทดสอบวิธีนี้จริงๆแล้ว


ถ้านี่เป็นลินุกซ์ (ซึ่งดูเหมือนว่า) มันเป็นมูลค่า noting ที่clriไม่ได้เป็นคำสั่งที่แยกจากกัน (มันเป็นในบางระบบปฏิบัติการ Unix) debugfsก็ภายใน
ฮอบส์

@hobbs: ต้องทำให้ฉันผิดปกติแล้ว โอ้เดี๋ยวก่อน nvm clri เป็นเพียงเสียงสะท้อน "clri $ 2" | debugfs "$ 1"
Joshua

คำแนะนำของคุณจำเป็นต้องใช้ fsck อยู่แล้ว - ซึ่งจะแก้ไขปัญหาด้วยข้อความEntry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?แทนที่จะเป็นคำตอบที่ระบุไว้ในคำตอบอื่น ๆ - แต่การทำ clri เป็นขั้นตอนพิเศษ ดูเหมือนจะไม่มีวิธีการแก้ไขปัญหานี้อย่างหมดจดจากภายใน debugfs
Random832

@ Random832: ฉันไม่ได้แก้ไข fsck ของตัวเองในยุคที่ผ่านมา :(
Joshua

-1

หากคุณย้ายไฟล์ไปยังไดเรกทอรีคุณสามารถลบไดเรกทอรีด้วยไฟล์นั้นได้

mkdir foo 
mv filen* foo
rm -rf foo

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