डीबगॉफ़ में ext4 फ़ाइल सिस्टम पर "फ़ाइलेन / एमी" (स्लैश के साथ) नामक फ़ाइल को कैसे हटाएं?


26

E2fsprogs के साथ खेलते हुए debugfs, परिवर्तन / दुर्घटना से, एक फ़ाइल नाम filen/ameबनाया गया था। स्पष्ट रूप से फॉरवर्ड स्लैश चरित्र /विकारों में विशेष विभाजक चरित्र के रूप में कार्य करता है।

फिर भी debugfsमैं नाम की फ़ाइल को हटाना चाहता था filen/ame, लेकिन मुझे थोड़ी सफलता मिली, क्योंकि /चरित्र को फ़ाइल नाम के हिस्से के रूप में व्याख्यायित नहीं किया गया है?

क्या डीबगफ़्स स्लैश वाली इस फ़ाइल को हटाने का एक तरीका प्रदान करता है? यदि हां, तो कैसे?

मैंनें इस्तेमाल किया:

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?


क्या फ़ॉर्वर्डलैश से बचना ( filen\/ame) काम नहीं करता है?
JAB

17
+1, और बधाई। आप "फ़ाइल नाम में अजीब चरित्र" के केवल दो मामलों में से एक को खोजने में कामयाब रहे हैं, जहां एक शेल कमांड में चरित्र को सही ढंग से उद्धृत और / या भागने से समस्या का समाधान नहीं होगा। (अन्य एक फ़ाइल नाम में एक अशक्त बाइट होगा, हालांकि मुझे संदेह है कि, ज्यादातर फाइल सिस्टम पर, यह सिर्फ नाम को काट देगा।)
इल्मरी करोनें

जवाबों:


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ऑरेस विकल्प होता है जो पूर्ण जांच के लिए ले जाएगा "भले ही फाइल सिस्टम साफ लगे"।
डेविड फ़ॉर्स्टर

3

एफएसके काम करने पर बधाई; अगर किसी कारण से यह काम नहीं करता है तो उसके ls -i1बाद उत्तर दिया जाता है ।umountclri

संदर्भ: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

मैंने वास्तव में इस पद्धति का परीक्षण किया है।


यदि यह लिनक्स है (जो ऐसा लगता है), यह ध्यान देने योग्य है कि clriयह एक अलग कमांड नहीं है (जैसा कि यह कुछ अन्य यूनिक्स सिस्टम पर है), यह अंदर एक सबकॉमैंड है debugfs
हॉब्स

@ घोड़ों: मेरा असामान्य तो बनाना चाहिए। ओह रुको, nvm clri बस गूंज थी "clri $ 2" | debugfs "$ 1"
जोशुआ

आपके निर्देशों को वैसे भी fsck चलाने की आवश्यकता है - जो समस्या को ठीक कर देगा, संदेश के Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?बजाय दूसरे उत्तर में दिए गए नोट के साथ - लेकिन क्लारी करना एक अतिरिक्त कदम है। इस डिबगफ़ के भीतर से इसे शुद्ध रूप से हल करने का कोई तरीका प्रतीत नहीं होता है।
रैंडम 832

@ Random832: मैंने पिछले वर्षों में इसे fsck नहीं किया था। :(
जोशुआ

-1

यदि आप फ़ाइल को निर्देशिका में ले जाते हैं, तो आप उस फ़ाइल में निर्देशिका को हटा सकते हैं।

mkdir foo 
mv filen* foo
rm -rf foo

1
यह किसी अन्य अजीब फ़ाइलनाम के लिए काम करेगा, लेकिन यह उस फ़ाइलनाम के लिए काम नहीं करेगा जो इसमें /है।
zwol
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.