আমি একটি দুর্নীতিগ্রস্ত টার ফাইলটি সনাক্ত করেছি এবং এমন কোনও ডিরেক্টরি যা আমি মুছে ফেলতে পারি না তা শেষ করে পরিচালিত করেছি, যদি আমি এটি মুছে ফেলার চেষ্টা করি তবে মনে হয় এটি পাওয়া যায় না, তবে 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
এই দুর্নীতিবাজ দির থেকে মুক্তি পেতে আমি কি কিছু করতে পারি? অন্তর্নিহিত ফাইল সিস্টেম (এনএফএস) কার্যকরী বলে মনে হচ্ছে এবং অন্য কোনও সমস্যা প্রতিবেদন করা হয়নি, এবং দুর্নীতিগ্রস্ত টার ফাইল না হওয়া পর্যন্ত আমার এ জাতীয় কোনও সমস্যা হয়নি।
সম্পাদনা: এখানে কল করার 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
এবং এই স্ক্রিনশটটি দেখার চেয়ে নামটির থেকে আরও বেশি কিছু রয়েছে বলে মনে হয় :
চতুর্থ সম্পাদনা: ওয়াইল্ড কার্ডের সাহায্যে এটি চেষ্টা করা হচ্ছে:
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.
মোছার চেষ্টার পরে এটি ঘটেছে, আমি ভাবছি যে এটি এনএফএস সমস্যা হতে পারে এখানে ভিনক 17 এর উত্তরগুলির মধ্যে একটিতে প্রস্তাবিত হিসাবে ।
6 ষ্ঠ সম্পাদনা করুন: এই আউটপুট হয় lsof
এবংls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ ntcnt lsof: মাইকেএল স্ট্যাটাস ত্রুটি \ 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
।
অষ্টম সম্পাদনা: এটি হেক্সস চরগুলি হিসাবে পরামর্শ মতো ব্যবহার করছে:
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]$
নবম সম্পাদনা: stat
আদেশের জন্য:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
এটি সমস্ত আউটপুট থেকে আরও বেশি সম্ভাবনাময় বলে মনে হয়, মন্তব্যে প্রস্তাবিত একটি বাগ বা অন্যান্য এনএফএসের খারাপ আচরণ রয়েছে।
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
, গতকালের মতো similar .
এবং ..
ফাইল উপস্থিত ছিলেন:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
চূড়ান্ত সম্পাদনা: আমি এটির উপরে একটি স্থানীয় প্রশাসককে দেখেছি এবং এটি সার্ভারে নিজেই লগ ইন করে সেখান থেকে মুছে ফেলার সাথে মোকাবিলা করা হয়েছিল। তাদের কাছ থেকে ব্যাখ্যাটি হ'ল এটি অক্ষরে অক্ষর অনুসারে অক্ষর সেটগুলির সাথে সমস্যা হতে পারে।
mv
। সম্ভবত আপনি এটি পরে মুছে ফেলতে পারেন। বিকল্পভাবে, আপনি ডিরেক্টরিটিকে আরও গভীর ফোল্ডার স্তরে (সম্ভবত একটি ওয়াইল্ডকার্ড সহ) নিয়ে যাওয়ার চেষ্টা করতে পারেন এবং তারপরে আপনি যে ফোল্ডারে সরিয়ে নিয়েছেন সেটি মুছে ফেলার চেষ্টা করতে পারেন।
find
কেবলমাত্র এটিরexec
বিকল্পটি ব্যবহার না করে কোনও আলাদা কমান্ডের আউটপুটটি পাইপ করার কোনও কারণ আছে ?