ওয়াইল্ডকার্ড সহ সুডো ব্যবহার করে মূলের মালিকানাধীন ডিরেক্টরি থেকে ফাইলগুলি সরান


2

ধরা যাক আমার কাছে একটি ফোল্ডার রয়েছে, /var/log/nginxযা সুরক্ষিত (রুটের মালিকানাধীন এবং অন্য কেউ এতে পড়তে বা লিখতে পারে না)। এমনকি সুডো ব্যবহার sudo rm -f /var/log/nginx/ab*করেও, "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" ছাড়া আমি করতে পারি না। এটি করার জন্য আমাকে কি আসলে একটি শট শেল লোড করতে হবে, বা অন্য কোনও উপায় আছে?

উত্তর:


6

কারণ

শেলটি তারকাচিহ্নের মতো কোনও গ্লোব অক্ষর (ওয়াইল্ডকার্ড) ব্যাখ্যা করে এবং প্রসারিত করে। কমান্ডটির এই ব্যাখ্যাটি বর্তমান শেলটিতে ঘটে ( sudoকমান্ড কার্যকর হওয়ার আগে ) যার ডিরেক্টরিটি পড়ার অনুমতি নেই। যেহেতু বর্তমান শেল ফাইল উল্লিখিত glob প্যাটার্ন মেলে না খুঁজে পেতে পারেন, পথনাম সম্প্রসারণ আউট বাহিত হয় না এবং শেল পাসের rm, -fএবং /var/log/nginx/ab*(ক আক্ষরিক তারকা) এর আর্গুমেন্ট হিসাবে sudoকমান্ড।

sudoকমান্ড, ঘুরে, আরম্ভ করা rmকমান্ড যার একটি পাথ সহ একটি ফাইল মুছে ফেলার জন্য চেষ্টা করে /var/log/nginx/ab*(একটি তারকা একটি ইউনিক্স ফাইলের নাম জন্য একটি আইনি চরিত্র)। যেহেতু এই জাতীয় ফাইলটি আসলে উপস্থিত নেই তাই এটি তার ব্যর্থতার কথা জানায়। জিএনইউ সহ rmএই ত্রুটি বার্তাটি সুস্পষ্ট; পূর্ণ নিচে ত্রুটি বার্তা নির্দেশ করে যে সরানো হচ্ছে (একক) ফাইল উপস্থিত না থাকলে:

rm: cannot remove `/var/log/nginx/ab*': No such file or directory

সমাধান

সমাধানটি ফাইল-নাম সম্প্রসারণের জন্য প্রয়োজনীয় অনুমতি সহ একটি নতুন শেল সুপার्युসার হিসাবে চালু করতে হবে:

sudo bash -c "rm -f /var/log/nginx/ab*"

উপরের কমান্ডটি একটি নতুন শেল শুরু করে যা মূল হিসাবে -cচালিত হয় এবং শেলটি দ্বারা চালিত কমান্ডটি পাস করার জন্য বিকল্পটি ব্যবহৃত হয়। যেহেতু কমান্ডটি উদ্ধৃত হয়েছে, বর্তমানের শেল দ্বারা তারকাচিহ্ন ব্যাখ্যা করা যায় না এবং এটি নতুন রুট শেলের মতো হ'ল rmকমান্ডটি প্রবর্তন করার আগে পথের নামগুলি প্রসারিত করতে দেয় ।


1

এটি হয় আপনার ফাইলের নাম বা তাদের ফাইলের নামগুলিতে সম্ভাব্য স্পেস নিয়ে সমস্যা।

সুতরাং নিম্নলিখিত workarounds চেষ্টা করুন:

  1. --বিকল্পগুলির শেষটি বোঝানোর আগে চেষ্টা করুন, যেমন:

    sudo rm -vf -- /var/log/nginx/ab*
    
  2. ব্যবহার find:

    sudo find /var/log/nginx -name "ab*" -print -delete
    
  3. আপনি যদি ভাবেন যে আপনার ফাইলগুলি লিনাক্সে সুরক্ষিত আছে, তবে প্রথমে সুরক্ষাটি সরিয়ে দেওয়ার চেষ্টা করুন:

    chattr -i ab*
    

ওহে. findকমান্ডটি একটি ভাল উত্তর হওয়ায় আমি এটিকে উত্সাহিত করেছি । যাইহোক, --প্রথম কর্মসূচিতে বিকল্পগুলির শেষটি চিহ্নিত করা হয়েছে (ফাইলের নামগুলি যদি একটি দিয়ে শুরু হয় -তবে এটি কার্যকর) তবে এটি ব্যবহারকারীর নিজস্ব শেলটি গ্লোব প্যাটার্নটি প্রসারিত করার চেষ্টা করে (আমার উত্তরে বর্ণিত হিসাবে) সমস্যার সাথে সহায়তা করে না।
অ্যান্টনি জিওগেইগান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.