मैंने एक भ्रष्ट टार फ़ाइल को अनट्रेड किया, और कुछ निर्देशिका के साथ समाप्त करने में कामयाब रहा जिसे मैं हटा नहीं सकता, यदि मैं इसे हटाने की कोशिश करता हूं, तो ऐसा लगता है कि इसे नहीं पाया जा सकता है, लेकिन ls
यह दिखाता है कि यह मौजूद है, दोनों बैश के साथ और अजगर के साथ इसी तरह के व्यवहार के अलावा, ठीक इसके बाद जब मैं इसे हटाने की कोशिश करता हूं rm -rf
, ls
शिकायत करता है कि यह नहीं मिल सकता है, तो यह इसे सूचीबद्ध करता है (नीचे देखें rm -rf
)। find
आदेश से पता चलता है फ़ाइल मौजूद है, लेकिन अभी भी मैं इसे नष्ट करने के लिए एक तरह से नहीं सोच सकते हैं।
यहाँ मेरे प्रयास हैं:
यहाँ आप दोनों देखते हैं ls
और find
सहमत हैं कि हमारे पास एक निर्देशिका है,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
लेकिन मैं इसे हटा नहीं सकता:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove `./mikeaâ\302\201\302\204cnt': Is a directory
rl]$ ls
mikeaâ??cnt
cd
हालांकि मैं इसे कर सकता हूं और यह खाली है:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
नीचे देखें कि यह एक साधारण फ़ाइल नहीं है, लेकिन एक निर्देशिका है, प्लस ls
मजाकिया व्यवहार करता है क्योंकि rm -rf
यह कहता है कि यह फ़ाइल नहीं ढूँढ सकता है तो इसे सीधे बाद में सूचीबद्ध करता है:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove `mikeaâ\302\201\302\204cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
तो यह अजगर के साथ प्रयास है, फ़ाइल मिल गई है, लेकिन नाम एक नाम के रूप में उपयोग करने योग्य नहीं है जिसे हटाया जा सकता है:
rl]$ python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import shutil
>>> os.listdir('.')
['mikea\xc3\xa2\xc2\x81\xc2\x84cnt']
>>> shutil.rmtree(os.listdir('.')[0] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/shutil.py", line 204, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/usr/lib64/python2.6/shutil.py", line 202, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mikea\xc3\xa2\xc2\x81\xc2\x84cnt'
यहां तक कि जब मैं टैब को पूरा करने वाले नाम का उपयोग करता हूं, तो वह उपयोग करने योग्य नहीं है:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
अजगर के नाम से पता चलता है कि मुझे यह मिलता है।
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
क्या इस भ्रष्ट डायर से छुटकारा पाने के लिए मैं कुछ कर सकता हूं? अंतर्निहित फ़ाइल सिस्टम (NFS) कार्यशील लगता है और कोई अन्य समस्या रिपोर्ट नहीं की जाती है, और मुझे भ्रष्ट टार फ़ाइल तक ऐसी कोई समस्या नहीं है।
संपादित करें: यहाँ कॉल करने के लिए find
स्वयं के -exec
विकल्प का उपयोग किया जा रहा हैrm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
लेकिन फ़ाइल अभी भी वहाँ है, ( ls
शिकायत है कि यह नहीं मिल सकता है, लेकिन फिर इसे वैसे भी दिखाता है)
दूसरा संस्करण:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
व्यवहार अभी भी अपरिवर्तित है, फ़ाइल अभी भी मौजूद है
तीसरा संस्करण:
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} +
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
ऐसा लगता है mikeaâcnt
कि अजगर के प्रयास के उत्पादन को देखने से कहीं अधिक नाम है mikea\xc3\xa2\xc2\x81\xc2\x84cnt
, और इस स्क्रीनशॉट:
चौथा EDIT: यह एक वाइल्ड कार्ड के साथ प्रयास है:
rl]$ echo *
mikeaâcnt
rl]$ echo mike*
mikeaâcnt
rl]$ rm -rf mike*
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
और मेरा स्थान:
rl]$ locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
5 वां संपादन:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
लेकिन व्यवहार भी बदल गया है, अब ls
और cd
यह करें:
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt
mikeaâcnt: No such file or directory.
यह हटाने के प्रयासों के बाद हुआ है, मैं सोच रहा हूं कि यह NFS के मुद्दे हो सकते हैं जैसा कि यहां एक उत्तर में vinc17 द्वारा सुझाया गया है।
6 संपादित करें: इस के उत्पादन में है lsof
औरls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Ä ^ lcnt lsof: mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt पर स्थिति त्रुटि: ऐसी कोई फ़ाइल या निर्देशिका नहीं
ऊपर गलत है, यहाँ सही lsof
मंगलाचरण है: (आरएल माता पिता की निर्देशिका है)
rl]$ /usr/sbin/lsof | grep mike | grep rl
tcsh 11926 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14733 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14734 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14735 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14736 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
rl]$
rl]$ ls -a
ls: cannot access mikeaâcnt: No such file or directory
. .. mikeaâ??cnt
7 वीं संपादित करें: यह काम नहीं करेगा, (मैंने यह सब करने से पहले कोशिश की थी, लेकिन मैंने आउटपुट को नहीं बचाया), लेकिन इसमें फ़ाइल के समान ls
और समस्या है rm
।
8 वां संस्करण: यह सुझाव के रूप में हेक्स वर्णों का उपयोग कर रहा है:
rl]$ ls --show-control-chars | xxd
0000000: 6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.
rl]$ rmdir $'mikea\6d69\6b65\61c3\a2c2\81c2\8463\6e74\0acnt'
rmdir: failed to remove `mikea\006d69\006b651c3\a2c2\\81c2\\8463\006e74': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
9 वां संपादन: stat
कमांड के लिए:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
यह सभी आउटपुट से और भी अधिक लगता है, टिप्पणियों में सुझाए गए अनुसार बग या अन्य NFS दुर्व्यवहार है।
संपादित करें 10: यह बहुत बड़े, इसके आउटपुट या इन दो कमांडों के बाद से एक जिस्ट में स्ट्रेस आउटपुट है:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
संपादित करें 11: इसलिए उपरोक्त के पहले rmdir
मैंने देखा कि मैं cd
निर्देशिका में आ सकता हूं , लेकिन बाद में rmdir
मैं cd
फिर से नहीं हो सकता , कल की तरह। .
और ..
फ़ाइलों उपस्थित थे:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
अंतिम संपादन: मैंने इस पर एक स्थानीय व्यवस्थापक को देखा और इसे सर्वर पर लॉग इन करके और वहां से हटाकर निपटा दिया गया। उनसे स्पष्टीकरण यह है कि यह नाम में अनुचित चरित्र सेट के साथ एक समस्या हो सकती है।
mv
। शायद आप उसके बाद इसे हटा सकते हैं। वैकल्पिक रूप से, आप निर्देशिका को एक गहरे फ़ोल्डर स्तर (शायद वाइल्डकार्ड के साथ) ले जाने का प्रयास कर सकते हैं और फिर उस फ़ोल्डर को हटा सकते हैं जिसे आपने इसे स्थानांतरित किया है।
find
इसेexec
विकल्प का उपयोग करने के बजाय एक अलग कमांड में आउटपुट कर रहे हैं ?