/ tmp এর মধ্যে ফাইল মোছার অ্যাক্সেস নেই


0

আমি এই সমস্যাটি স্পষ্ট করার জন্য তৈরি একটি অনুরূপ পোস্ট মুছে ফেলেছি তাই এটি কোনও ডাবল পোস্ট নয়।

আমার / টিএমপি ফোল্ডারটি এলোমেলো ফাইলগুলিতে পূর্ণ। আমার প্রকৃত স্টোরেজ স্পেসটি ঠিক আছে তবে আক্ষরিক অর্থে কয়েক হাজার এই ছোট্ট ফাইল রয়েছে, খুব বেশি সময় আগে আমি ফাইলের নিছক সংখ্যার কারণে ত্রুটিগুলি পেয়ে যাব।

ক্রোন চালানোর মতো বিভিন্ন বিকল্প এবং বিভিন্ন চেষ্টা করেছি sudo rm file*তবে মিডনাইট কমান্ডার ইনস্টল করার পরে মুছার চেষ্টা করার পরে আমি এই নোটটি পেয়েছি:

"আপনি যখন অ স্থানীয় লোকাল ফাইল সিস্টেমে থাকবেন তখন শেল কমান্ডগুলি কাজ করবে না"

তো, আমি কীভাবে লোকাল করব? আমি ম্যাকের টার্মিনাল কমান্ড লাইনের মাধ্যমে চেষ্টা করে যাচ্ছি, তারপরে আমি ভিএমওয়্যারের মাধ্যমে একই জিনিসগুলি চেষ্টা করেছি কিন্তু যাইনি। আমি মিডনাইট কমান্ডার ব্যবহারের পাশাপাশি লিনাক্সের সরাসরি কমান্ড চেষ্টা করেছি। খাঁটি লিনাক্সের সাথে আমার কোনও ত্রুটি বা ইঙ্গিত rmছিল না যা কাজ না করে আমি অন্য llকমন্ড চালাচ্ছি এবং ফাইলগুলি না দেখে কমপক্ষে আমি সেই নোটটি মিডনাইট কমান্ডারের কাছ থেকে পেয়েছি।

আমার অনুমতিগুলি টেস্টিং / ডেভ সার্ভারের মতোই সেট করা আছে যা লাইভ সার্ভারের অনুরূপ যেখানে আমার সমস্যা হচ্ছে তবে এর / টিএমপি ফোল্ডারটি পরিষ্কার।


প্রতিক্রিয়া হ'ল এই ফাইলগুলি অন্য কোনও ব্যবহারকারী দ্বারা তৈরি করা হয়। দয়া করে এর প্রাসঙ্গিক আউটপুট অন্তর্ভুক্ত করার জন্য আপনার প্রশ্নটি আপডেট করুন: এলএস-এল / টিএমপি
কলিআরবটস

@ ইমাজিনারি রোবটস যে 100,000 ফাইল রয়েছে তা প্রদত্ত ফলাফলের পরিমাণটি ls -l /tmpবিশাল হবে। কেলি দয়া করে মালিক হিসাবে ফাইলগুলির সংখ্যা গণনা করতে এই কমান্ডটি ব্যবহার করুন:sudo find /tmp -type f -printf '%u\n' | sort | uniq c
zwets

@ জেওয়েটস: সঠিক। তবে, আমি দেখানোর জন্য পাঁচটি লাইন যুক্ত করেছি তবে তারা এই পোস্টটিতে 'স্টিক' রাখেনি। আমি আপনার স্নিপেটটি চালিয়েছিলাম তবে এটি প্রথমে "নুনিক: সি: এরকম কোনও ফাইল বা ডিরেক্টরি নেই" বলে পাসওয়ার্ড চেয়েছে, এক মুহুর্ত ভেবেছিল এবং ঠিক তখনই ডাব্লু / অন্য কোনও তথ্য প্রম্পটটি ফেরত দিয়েছিল? নির্বিশেষে, আমি কেবলমাত্র লক্ষ্য করেছি / tmp ফোল্ডারে অনুমতিগুলি "1777" রয়েছে যদি এটি কোনও কিছু নির্দেশ করে।
কেলি জনসন

ঠিক আছে, আমি সেই / টিএমপি ফোল্ডারের অনুমতিটি 755 এ পরিবর্তন করেছি এবং এখন আমি ফাইলগুলি মুছতে পারি। তবে আমি কেবলমাত্র মুছতে পারি যদি আমি কমপক্ষে পাঁচটি অক্ষর নির্দিষ্ট করে থাকি .. সুতরাং সুডো আরএম ফাইলিয়া * কাজ করে তবে সুডো আরএম ফাইল * হয় না। আমি আমার পথে হতে পারে!
কেলি জনসন

1
আপনি কি নিশ্চিত যে ফাইল * আদৌ বিদ্যমান? এছাড়াও, আপনার /tmpবুটে পরিষ্কার করা উচিত (সাধারণত) আপনার সিস্টেমটি পুনরায় বুট করুন এবং এটি দিয়ে সম্পন্ন করুন।
ব্রিয়াম

উত্তর:


2

প্রথমত, / টিএমপি ডিরেক্টরিগুলির জন্য সাধারণ অনুমতি বিটগুলি 1777। শীর্ষস্থানীয় 1নির্দেশ দেয় যে ডিরেক্টরিটির স্টিকি বিট সেট করা হয়েছে, যার অর্থ যদিও একাধিক ব্যবহারকারী ডিরেক্টরিতে লিখতে পারেন তবে তারা সেখানে লিখিত কোনও ফাইলের মালিকানা ধরে রাখে যাতে কেবল তারা (বা মূল) এগুলি মুছতে পারে। অতএব sudoআপনি ছাড়া কেবল আপনার নিজের ফাইলগুলি / tmp থেকে মুছতে সক্ষম হবেন। পাশাপাশি, / টিএমপি-তে থাকা কিছু ফাইলগুলি অন্য প্রক্রিয়াগুলি দ্বারা খোলা এবং / অথবা লক হতে পারে এবং লকগুলি 'বাসি' না হওয়া অবধি আপনার মুছে ফেলার চেষ্টা করা উচিত নয় - lsofউদাহরণস্বরূপ আপনি খোলার ফাইলগুলি পরীক্ষা করতে পারেন

$ sudo lsof +d /tmp

ডিরেক্টরিগুলির শীর্ষ স্তরের কোনও খোলা ফাইলগুলি দেখতে, বা

$ sudo lsof +D /tmp

/ টিএমপি এবং এর উপ-ডিরেক্টরিতে যে কোনও জায়গায় খোলার ফাইলগুলি দেখানোর জন্য - বিভিন্ন কলামের অর্থ কী তা বোঝার জন্য OUTPUTlsof ম্যানাপেজগুলির বিভাগটি দেখুন man lsof

দ্বিতীয় যে সমস্যার মুখোমুখি আপনি হচ্ছেন তা হ'ল এই জাতীয় কমান্ডগুলি rmএকাধিক ফাইলের নাম আর্গুমেন্ট নিতে পারে (প্রসারিত ওয়াইল্ডকার্ডস বা শেল গ্লোব সহ ), তর্ক তালিকার অনুমোদিত দৈর্ঘ্যের সীমা রয়েছে। উদাহরণস্বরূপ, যদি আমরা এতে 100,000 ফাইল তৈরি করি/tmp

# touch /tmp/file{000000..099999}
# ls /tmp/file* | wc -l
100000

(এতদূর ভাল) তবে আমরা যদি আরও ১০,০০,০০০ ফাইল যুক্ত করি তবে প্রসারিত শেল গ্লোব (অর্থাৎ মুছে ফেলার জন্য ফাইলগুলির তালিকা) lsকমান্ড লাইনের জন্য খুব দীর্ঘ হয়ে যায়

# touch /tmp/file{100000..199999}
# ls /tmp/file* | wc -l
-bash: /bin/ls: Argument list too long
0

এবং একইভাবে আমরা একসাথে মুছে ফেলতে পারি না rm

# rm -f /tmp/file*
-bash: /bin/rm: Argument list too long

সমাধানটি হ'ল ওয়াইল্ডকার্ড তালিকাটি পরিচালনাযোগ্য সাবসেটে বিভক্ত করা - আপনি নিজে এটি করেছিলেন তবে xargsকমান্ড যেমন ব্যবহার করে এটি স্বয়ংক্রিয়ভাবে করা সম্ভব

# echo /tmp/file* | xargs rm -f

আপনি findএকটি -execবা -execdirক্রিয়া এবং {} +যুক্তি প্রতিস্থাপন সিনট্যাক্স - দ্বারাও কমান্ডটি ব্যবহার করতে পারেনman find

-exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca-
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  `{}'
              is  allowed  within the command.  The command is executed in the
              starting directory.

উদাহরণ স্বরূপ

# find /tmp -maxdepth 1 -name 'file*' -type f -exec rm -f {} +

যদিও xargsসংস্করণটি সম্ভবত দ্রুততর হবে যদি আপনার কেবলমাত্র শীর্ষ স্তর /tmp(যেমন কোনও উপ-ডিরেক্টরি থেকে নয়) মুছতে হবে ।

ডিরেক্টরিটি পূরণ করা অব্যাহত থাকলে আপনার ব্যবহারকারীদের / প্রক্রিয়াগুলি ফাইলগুলি তৈরি করছে এবং কেন তা সত্যই তদন্ত করা উচিত। আপনি যদি /tmpঅনুমতি অনুমোদন করে থাকেন তবে আপনার সেগুলিতে পুনরায় সেট করতে হবে 1777


দুর্দান্ত ব্যাখ্যা! এখন সমস্যাটি হ'ল যদিও সমস্ত ফাইল চলে গেছে, যখন আমি পেয়ে যাব: drwxr-xr-x 3 coname www-data 34484224 অক্টোবর 10 13:00 tmp যে 3 মিল এখনও সেখানে আছে যদিও সেখানে কেবল 4 টি ফাইল রয়েছে। এছাড়াও, এটি ফোল্ডার যা দ্রুপাল টেম্প ফাইলগুলির জন্য ব্যবহার করছে। আমি সমস্ত ড্রুপাল সেটিংস পরীক্ষা করেছি এবং সেগুলি ঠিক আছে। এখন মনে হচ্ছে সার্ভারটি 'চিন্তা' না করে 'মনে রাখছে' ...?
কেলি জনসন

... পিএস ... এই মন্তব্যে কীভাবে কোড রেন্ডার হয়? আমি টিক চিহ্নগুলি চেষ্টা করেছিলাম এবং তারা কেবল রেন্ডার করে?
কেলি জনসন

কিছু প্রক্রিয়া অন্যান্য প্রক্রিয়া দ্বারা উন্মুক্ত / লক হয়ে থাকতে পারে তা ভুলে যাবেন না - আমি আমার উত্তরটি সম্পাদনা করে lsofখোলা ফাইল তালিকাভুক্তির আদেশটি উল্লেখ করতে চাইছি ।
স্টিল্ড্রাইভার

0

যদি sudo rm -rf foldernameকাজ না করে থাকে তবে নীচের পদ্ধতিটি অনুসরণ করুন

কমান্ড দিয়ে পরীক্ষা করুন

which rm 

তারপরে পথটি পরীক্ষা করুন। আমার ক্ষেত্রে এটি /bin/rmতখন রান কমান্ডের মতো ছিল

/bin/rm -rf foldername
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.