`Cp` এবং` rm` ডিরেক্টরিগুলি আলাদাভাবে কেন আচরণ করে?


10

কেন মত সরঞ্জাম না cpএবং rmনিয়মিত ফাইল থেকে আচরণ ডিরেক্টরি আলাদাভাবে? তারা উভয়ই ব্যবহারকারীকে স্পষ্টভাবে উল্লেখ করতে হবে যে সে পুনরাবৃত্ত আচরণ করতে চায় বা অন্যথায় তারা ডিরেক্টরিগুলি নিয়ে কোনওভাবেই ডিল করবে না।

কম্পিউটারগুলির সাথে আমার প্রথম মিথস্ক্রিয়া (কিছুক্ষণ আগে) একটি উইন্ডোজ / জিইউআই / পয়েন্ট-এবং-ক্লিক / টেনে আনার এবং ড্রপ পরিবেশে ছিল, এটি সর্বদা স্বাভাবিক বলে মনে হয়েছিল যে লক্ষ্যগুলি নির্বিশেষে এই অপারেশনগুলি একই আচরণ করবে।

আমি যখন ওয়াইল্ডকার্ড সহ কমান্ড দিই তখন এই আচরণটি আমাকে হতাশ করে। আমি যদি কোনও ডিরেক্টরিতে ( *) ফাঁকা না করে সাবডিয়ার বাদে সবকিছু মুছে ফেলতে চাই তবে কী হবে ?

আমি কেবল এটিই কল্পনা করতে পারি যে ব্যবহারকারীকে নিজেকে পায়ে গুলি করা থেকে বিরত রাখতে এটি এক ধরণের সুরক্ষা বৈশিষ্ট্য, তবে এটি কয়েকটি ইউনিক্স নীতি সম্পর্কে আমার বোঝার বিরোধিতা করে:

  • ইউনিক্স সাধারণত ব্যবহারকারীকে নিজের থেকে রক্ষা করে না। এটি সর্বদা ধরে নিয়েছে যে ব্যবহারকারী জানেন যে সে কী করছে।
  • ইউনিক্সের জন্য সবকিছুই একটি ফাইল। ডিরেক্টরি কেবল অন্য ফাইল নয়? কেন তাদের সাথে আলাদা আচরণ করা হয়?

আমার প্রশ্নগুলো:

  • এই আচরণটি কোনও প্রযুক্তিগত সীমাবদ্ধতা থেকে উদ্ভূত হয় বা এটি ইচ্ছাকৃত পছন্দ?

এবং পরবর্তী ক্ষেত্রে,

  • এই পছন্দটি প্রেরণার কারণগুলির কোনও historicalতিহাসিক বিবরণ রয়েছে কি?

জন্য rmঅন্তত, যদি আপনি এটা ফাইল ও ডিরেক্টরিগুলি মধ্যে পার্থক্য উপেক্ষা করা, আপনি আপনার লাগাতে পারেন ~/.bashrcফাইল: alias rm='rm -r'
বেনজিওবি

1
এছাড়াও বিভিন্ন তবে সম্পর্কিত প্রশ্নটি দেখুন ইউনিক্স.স্ট্যাকেক্সেঞ্জার.কম
সেকশনস

1
আপনি উইন্ডোজ ফাইল ম্যানেজারের সাথে সিপি এবং আরএম তুলনা করতে পারবেন না। Cmd.exe আরম্ভ করুন এবং অনুলিপি চেষ্টা করুন এবং আচরণ এবং তুলনা করুন।
অট--

উত্তর:


11

ডেরোবার্টস কেন ইউনিক্স এমভি প্রোগ্রামের জন্য ডিরেক্টরিগুলির জন্য -আর (রিকার্সিভ) বিকল্পের প্রয়োজন নেই তবে সিপি দরকার নেই? মূলত আপনার প্রশ্নের উত্তর দেয়: একটি নিয়মিত ফাইল অনুলিপি করা বা অপসারণ একটি ডিরেক্টরি সহ একই ক্রিয়াকলাপ করা থেকে আলাদা, কারণ একটি ডিরেক্টরিতে আপনাকে এতে থাকা সমস্ত ফাইল প্রক্রিয়া করতে হবে। সুতরাং অপারেশন মৌলিকভাবে পৃথক।

আরও লক্ষণীয় যে এখানে একটি বিশেষ ইউটিলিটি রয়েছে rmdirযা কেবলমাত্র খালি ডিরেক্টরিতে কাজ করতে পারে। সত্যতা যাচাই না করেই এই সিদ্ধান্তে পৌঁছে যায় যে সম্ভবত প্রাথমিকভাবে rmকেবল অ-ডিরেক্টরিগুলি সরিয়ে ফেলতে সক্ষম হয়েছিল এবং rmখালি ডিরেক্টরিগুলি পুনরাবৃত্তভাবে ব্যবহার করে এবং সেগুলি মুছে ফেলার জন্য গভীর অপসারণ অর্জন করতে হয়েছিল rmdir


rmdirডিরেক্টরিটি মুছতে ব্যবহৃত সিস্টেম কলটির নামও। ডিরেক্টরিটি সিস্টেম কলের জন্য ডিরেক্টরিটি অবশ্যই খালি থাকতে হবে এবং একই নামের ইউটিলিটি হ'ল "সামনের দিকে", unlinkআদেশ এবং ইউটিলিটির অনুরূপ ।
জর্ডানম

হুবহু - এটাই আমাকে বিশ্বাস করতে পরিচালিত করে যে মূলত rmডিরেক্টরিগুলি মুছে ফেলার জন্য সম্ভবত অক্ষম ছিল (কারণ কমান্ড লাইন ইউটিলিটিগুলি প্রায়শই সাইকেলের চারপাশে কেবল তুলনামূলকভাবে সহজ মোড়ক থাকে)।
পিটার্ফ

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

2
শেষ ব্যবহারকারীর পিওভের কাছ থেকে এটি সত্যিই অদ্ভুত বলে মনে হচ্ছে তবে আপনি আসলে কারণগুলি সম্পর্কে জিজ্ঞাসা করেছিলেন। :) র‍্যাপারগুলির ক্ষেত্রে - এটি সমস্ত নির্ভর করে যে তারা কতটা "সাধারণ" (এবং আপনি এখনও "সরল" বলতে চান)। আধুনিক rmস্পষ্টতই কেবল একটি সহজ মোড়ক নয় (এটি একই সাথে ম্রো ফাইলগুলি এবং ডিরেক্টরিগুলিও সরিয়ে দিতে সক্ষম)। যদি আপনি এটিকে -rবিকল্পটি দেওয়া পছন্দ করেন না, আপনার শেলের আলিয়জিং কার্যকারিতা ব্যবহার করুন বা আপনার নিজের র‍্যাপার তৈরি করুন যা এটি স্থাপন করবে (যা ধীরে ধীরে হবে তবে আপনি যে শেলটি ব্যবহার করছেন তার থেকে আলাদা)।
পিটার্ফ

2

কিছু ইউনিক্স স্বাদে, আরএম এর ম্যান পেজ এটি ফাইলকে লিঙ্কমুক্ত করার জন্য একটি আদেশ হিসাবে নির্দিষ্ট করে।
ইউএনআইএক্স-এ ফাইলগুলি আইওনড নামক ফাইল সিস্টেমে অবজেক্টস হয়, ফাইল সিস্টেমে কোনও আইডি বাদে কোনও নাম বা অবস্থান নেই। তাদের নামগুলি বিভিন্ন ডিরেক্টরিতে তাদের উল্লেখ করা হয়, যা এক ধরণের ফাইল যা এতে তালিকাভুক্ত ফাইলগুলি (বা ডিরেক্টরিগুলি যেহেতু তারা ফাইল হয়) সূচী করে।
কোনও ফাইলকে সংযুক্ত করার সময়, ফাইলটির রেফারেন্স গণনা হ্রাস পায় এবং এটি 0 এ পৌঁছে গেলে এটি প্রকৃতপক্ষে মুছে ফেলা হয়, যেহেতু এটি ফাইল সিস্টেমের দ্বারা নিখরচায় চিহ্নিত করা হয়েছে এবং এটির ব্লক / এক্সটেন্টগুলিও নিখরচায় চিহ্নিত করা হয়েছে।

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

সুতরাং ইউএনআইএক্স ব্যবহারকারীদের জীবনকে স্বাচ্ছন্দ্য করার বৈশিষ্ট্য হিসাবে, "ইউনিক্স স্পিরিট" স্ট্যান্ডার্ড হিসাবে ইউএনআইএক্স ব্যবহারকারীদের বৈশিষ্ট্য হিসাবে যুক্ত করা হয়েছিল, কারণ এটি ইউনিক্স ইউটিলিটিগুলির থেকে ক্লাসিক হিসাবে ইউনিক্স ইউটিলিটিগুলি ডিরেক্টরিতে নেমে আসা এবং ফাইলগুলির মধ্যে সরিয়ে ফেলা,

তদ্ব্যতীত, ইউনিক্সের প্রারম্ভিক সময়ে, সিস্টেমগুলির প্রচুর স্মৃতি ছিল না এবং ডিরেক্টরিটির পুনরাবৃত্ত কাঠামোর ম্যাপিংয়ের পারফরম্যান্স পেনাল্টি ছিল এবং কখনও কখনও কাজটি বিভক্ত না করে করা অসম্ভব ছিল।

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

টিএল; ডাঃ ভিড়ের জন্য: ইউএনআইএক্সের
ডিরেক্টরিগুলি ফাইলের এক ধরণের, এটি সত্য, তবে যেহেতু ফাইলগুলির সিস্টেমের মেটাডেটা হিসাবে সিস্টেমগুলির মধ্যে তাদের মধ্যে থাকা তথ্যগুলি ভিন্নভাবে বিবেচনা করা হয়, তাই ফাইলগুলি ম্যানিপুলেটিং কমান্ডগুলি ডিরেক্টরিগুলি ছাড়া ডিরেক্টরিতে কাজ করতে পারে না নির্ভরশীল মেটাডেটাও হেরফের করতে তাদের আচরণে পরিবর্তন।

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