লিনাক্সে ব্যবহারকারীর মালিকানাধীন একটি খালি নয় এমন ডিরেক্টরিটি কীভাবে সরিয়ে ফেলবেন?


10

যদি ডিরেক্টরি "foo" ব্যবহারকারীর এ এর ​​মালিকানাধীন থাকে এবং এতে একটি ডিরেক্টরি "বার" থাকে যা মূলের মালিকানাধীন থাকে তবে ব্যবহারকারী এ কেবল এটি দিয়ে তা মুছে ফেলতে পারে rmdir, কারণ "foo" ব্যবহারকারী এ দ্বারা লিখিত হয় is

তবে ডিরেক্টরিতে "বার" ডিরেক্টরিতে যদি অন্য একটি রুটের মালিকানাযুক্ত ফাইল থাকে তবে ডিরেক্টরিটি সরানো যায় না, কারণ এতে থাকা ফাইলগুলি অবশ্যই প্রথমে সরানো উচিত, তাই এটি খালি হয়ে যায়। তবে "বার" নিজেই লিখনযোগ্য নয়, সুতরাং এতে ফাইলগুলি সরিয়ে ফেলা সম্ভব নয়।

এর আশেপাশে কোন পথ আছে? বা, অন্যথায় কেন এটি প্রয়োজনীয় তা আমাকে বোঝান।

উত্তর:


7

ব্যাখ্যার 1: একটি ডিরেক্টরি ফাইল সিস্টেমের একটি উপ-স্থান। এটিতে সাব-ডাইরেক্টরিগুলি তৈরি করে এটি আরও সাব-স্পেসস্পেসে বিভক্ত করা যেতে পারে। ডিরেক্টরি মালিক foosubspace ভিতরে সবকিছু নিয়ন্ত্রণ থাকতে হবে: foo/bar, foo/bar/qux, ইত্যাদি

ব্যাখ্যা 2: একটি ডিরেক্টরি ফাইল সিস্টেমের একটি উপ-স্থান। প্রতিটি ডিরেক্টরি কিছু অন্য ডিরেক্টরিতে সংযুক্ত থাকে, যাকে এর প্যারেন্ট বলে। ডিরেক্টরিটির মালিকের fooউপস্থানের অভ্যন্তরের সমস্ত কিছুর উপর নিয়ন্ত্রণ রয়েছে; তবে, একটি উপ-ডিরেক্টরিতে foo/bar, এর মালিকের fooনিয়ন্ত্রণ থাকে barযা সংযুক্ত করা fooযায় তবে যা ভিতরে যায় তার সাথে নয় bar: কেবলমাত্র তার মালিকেরই barনিয়ন্ত্রণ থাকে।

ব্যাখ্যার পক্ষে প্রমাণ 2: যেমন আপনি উল্লেখ করেছেন যেভাবে অনুমতিগুলি কাজ করে। এছাড়াও, কিছু ইউনিক্স ফাইল সিস্টেম একটি ডিরেক্টরিকে একাধিক পিতামাতার সাথে সংযুক্ত করার অনুমতি দেয়: এটিকে একাধিক হার্ড লিঙ্ক বলা হয়। (নিয়মিত ফাইলগুলির জন্য একাধিক হার্ড লিঙ্ক থাকা সাধারণ, তবে এটি সাধারণত ডিরেক্টরিগুলি লুপ তৈরির ঝুঁকির কারণে নিরুৎসাহিত করা বা নিষিদ্ধ করা হয়, যেখানে ডিরেক্টরিটি তার নিজের পিতামহ N বার মুছে ফেলা হয় - সুতরাং আপনি এটি মূল থেকে পেতে পারবেন না) ডিরেক্টরি, যা খুব সাধারণ প্রত্যাশা a কোনও ডিরেক্টরিতে যদি 0 টি سخت লিঙ্ক থাকে তবে খালি নয়: কাজটি করার সমস্যাটিও রয়েছে: যেহেতু ডিরেক্টরিটি অপরিবর্তিত রয়েছে, আপনি এটি মুছতে চান তবে এর সাথে আপনি কী করবেন? বিষয়বস্তু?)

ব্যাখ্যার পক্ষে প্রমাণ 1: অনুশীলনে, ডিরেক্টরিগুলির একক পিতা বা মাতা থাকে এবং তাই গাছের কাঠামো তৈরি হয়। এবং আপনি অ্যাক্সেস করতে পারেন না foo/bar/quxযদি না আপনি অনুমতি চালানো আছে fooভাল হিসাবে হিসাবে bar(অবশ্য ব্যতীত সেখানে কিছুটা অস্পষ্ট উপায়ে অ্যাক্সেস দেওয়া হবে যে barঅ্যাক্সেস দেওয়া হচ্ছে না foo)। সুতরাং উচ্চ স্তরের বিষয়টি গুরুত্বপূর্ণ।

আরও ব্যবহারিক নোটে, আপনার পরিস্থিতিতে ব্যবহারকারী এ করতে পারেন

mkdir আবর্জনা
এমভি ফু / বার আবর্জনা /
rmdir foo

1
এটি একটি দুর্দান্ত উত্তর (পুনরুদ্ধার করা), তবে আপাত অসঙ্গতি আমার কাছে হতাশ থেকেই যায়। এবং আবর্জনায় বার বার সরানোর ব্যবহারিক উদাহরণ কাজ করে, আমাদের আবর্জনা নামক একটি ডিরেক্টরি রয়েছে যা অপসারণ করা যায় না। আমি এই একই সমস্যা পেয়েছি, এটি ব্যবহারকারী এ এবং ব্যবহারকারী বি বাদে, যেখানে বি এ এর ​​মালিকানাধীন একটি ডিরেক্টরিতে কিছু আটকেছিল যা এটিকে মুছে ফেলতে চায়।
পল হুপার

এটি একটি ভাল ব্যাখ্যা, তবে mvসমস্যাটি সমাধানের জন্য শেষ পর্যন্ত উদাহরণটি রাস্প্বিয়ান (আমার জন্য অন্য কোনও সিস্টেমে চেষ্টা করে নি) এর জন্য আমার পক্ষে কাজ করে না। তদ্ব্যতীত, এই সমস্যাটি গবেষণা করে, আমি mvঅন্য কোথাও উল্লিখিত সমাধান হিসাবে ব্যবহার করতে দেখিনি । প্রকৃতপক্ষে, অনুমতিগুলি কীভাবে কাজ করে তা সম্পর্কে আমার বোঝার উপর ভিত্তি করে, এটি বোধগম্য হয় যে mvআমি যখন চেষ্টা করেছি তখন ব্যর্থ হয়। আমি কিছু অনুপস্থিত করছি? অথবা এই কার্যকারিতা সম্ভবত পরিবর্তিত হয়েছে? @ গিলস @ পলহুপার
এফভিজেস

@fvgs কিছুই পরিবর্তন হয়নি, তবে আপনার পরিস্থিতি থেকে এটির থেকে আলাদা অনুমতি থাকতে পারে। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি একটি নতুন প্রশ্ন জিজ্ঞাসা করুন ( সার্ভার ফল্টের পরিবর্তে ইউনিক্স এবং লিনাক্সে কারণ এই প্রশ্নটি যদি এখন এসএফ-তে জিজ্ঞাসা করা হয় তবে এটি অফ-টপিক হিসাবে বিবেচিত হবে) এবং আপনার অবস্থার সমস্ত বিবরণ দিন।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলস আপনি দয়া করে আমাকে কিছু ডকুমেন্টেশন, রেফারেন্স, বা আপনার জন্য বর্ণিত আচরণের উল্লেখ সম্পর্কে উল্লেখ করতে পারেন mv? আমি mvবার ডিরেক্টরিটির নাম পরিবর্তন করতে ব্যবহার করতে সক্ষম এর অর্থ এটি mvসফল হয় যতক্ষণ না আমি বর্তমান ডিরেক্টরিটির বাইরে বা অন্য কোনও ডিরেক্টরিতে বার সরাতে চেষ্টা করি না। তবে আপনি যে উদাহরণটি দিয়েছেন (যা একটি ডিরেক্টরিকে বার করে দেয়) আমার পক্ষে কাজ করে না (অনুমতি অস্বীকৃত)। আপনি যে উদাহরণ দিয়েছিলেন তাতে কি প্রশ্নে বর্ণিত নির্দিষ্ট ব্যতীত নির্দিষ্ট শর্তাদি ধরা হয়?
fvgs

@fvgs আমার উদাহরণটি কোনও barডিরেক্টরিকে স্থানান্তরিত করে না , এটি এটি আপনার নিজের ডিরেক্টরিতে স্থানান্তরিত করে moves garbageএকই ফাইল সিস্টেমে যে কোনও জায়গায় থাকতে পারে, অবিবাহিতভাবে প্রয়োজন foo
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

0

এর চারপাশের একমাত্র উপায় হ'ল হয় পিতামাত্ত্বিক ডিরেক্টরিতে সেটগিড বা সেটুইড ব্যবহার করা বা এসিএল ব্যবহার করা।

ডিরেক্টরি সেটজিড দিয়ে সেট করুন

chmod g+s foo

এটির সাথে একটি ডিফল্ট এসিএল সেট করুন

setfacl -d -R -m g:group:rwx foo

এটি এটিকে এই পথে ডিফল্ট এসিএল হিসাবে সেট করে। আপনার অবশ্যই ফাইল সিস্টেমটি মাউন্ট করতে হবে যাতে এসিএল বিকল্পের সাহায্যে এই পথটি রয়েছে!

আপনি আমাকে কেন এটি চান বলে এখন বলুন।


ঠিক আছে, সমস্যাটি একটি ধারাবাহিকতা। আমার নিজের ডিরেক্টরিতে থাকা অন্য ব্যবহারকারীর মালিকানাধীন কোনও ফাইল বা একটি খালি ডিরেক্টরি মুছে ফেলা থেকে আমাকে কিছুই থামায় না, তবে এটি খালি না হলে আমি নিজের ডিরেক্টরি মুছে ফেলা থেকে লক আউট হয়েছি।
অ্যালেক্স বি

যদি এটি হয় তবে আমি সরবরাহিত বিকল্পগুলির মধ্যে একটি ব্যবহার করব। তারা আপনার জন্য ভাল কাজ করবে।
wzzrd

আমি প্রায়শই আমার ডেস্কটপে একাধিক অ্যাকাউন্ট ব্যবহার করি (যার মধ্যে একটি "মূল নন-রুট" অ্যাকাউন্ট)। make installরুট থেকে শুরু করে যখন কোনও কিছু তৈরি করা শুরু হয় তখন আমিও এ জাতীয় পরিস্থিতি পেতে পারি ।
vi।

অভিভাবক ডিরেক্টরিতে সেটগিড সাহায্য করে না। রুট হিসাবে কাজ করার পরে cd ~user && mkdir qqq && touch qqq/qqqআমি chmod g+s .এবং ব্যবহারকারী দ্বারা qqq থেকে মুক্তি পেতে পারি না rm -Rf qqq
vi।

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