Rmdir (1) এবং rm (1) সহ-বিদ্যমান থাকার কারণ কী?


17

আমি প্রতিদিন বিএসডি এবং লিনাক্স ব্যবহার করি, আমার কখনও এমন পরিস্থিতি হয়নি যা আমার অবশ্যই rm (1) এর চেয়ে rmdir (1) ব্যবহার করতে পারে। আরএমডিরের অস্তিত্বের উদ্দেশ্য কী?


2
ওটি, তবে, এফডাব্লুআইডাব্লু, এটি আকর্ষণীয় (এবং বিভিন্ন) ব্যবহার দেখায়: সাইবারসিটি.বিজ
ফাফ

উত্তর:


27

মূল কারণটি সম্ভবত historicalতিহাসিক। পুরাতন, পুরানো দিনের মধ্যে ফিরে, কোন ছিল rmdir(2)এবং mkdir(2)সিস্টেম কল (আমরা 7th সংস্করণ ইউনিক্স নিয়ে আলোচনা করছি ™ এখানে), এবং rmdir(1)(প্রয়োজনীয়তা) ছিলেন একজন এর SUID রুট প্রোগ্রাম যা ব্যবহার করা unlink(2)সিস্টেম কল ডিরেক্টরি মুছে ফেলার জন্য।

Cm ম সংস্করণ ইউনিক্স ম্যানুয়ালগুলি অনলাইনে http://cm.bell-labs.com/7thEdMan এ উপলব্ধ (সর্বশেষ চেক করা 2017-04-23); এগুলি http://plan9.bell-labs.com/7thEdMan (সর্বশেষ চেক করা 2017-04-23) এও উপলব্ধ । অনলাইনে কমপক্ষে একটি বিকল্প উত্সও রয়েছে বলে মনে হচ্ছে - http://wolfram.schneider.org/bsd/7thEdManVol2/ - খণ্ড 2-তে নিবন্ধগুলির জন্য, খণ্ড 1 এ কমান্ড এবং সিস্টেম কলগুলির জন্য ফ্রিবিএসডি সাইটের লিঙ্ক সহ ।

rmকমান্ড (একটি নিয়মিত অ এর SUID প্রোগ্রাম) প্রার্থনা rmdir(1)খালি ডিরেক্টরি মুছে ফেলার জন্য কমান্ড। এটি নিজে করতে পারে না; যে রুট সুবিধার প্রয়োজন। সুতরাং, rmdir(1)কমান্ডটি ( ইউনিক্স ভি 7 এর উত্স কোডের জন্য এখানে দেখুন ) খালি ডিরেক্টরিগুলি সরাতে অস্তিত্ব ছিল, এবং rmকমান্ডটি খালি ডিরেক্টরিগুলি সরিয়ে দেয় না।

rmডিরেক্টরিগুলি সরাতে ব্যবহার করতে, আপনাকে -rবিকল্পটি দিতে হবে ।

একটি প্রতিসম যুক্তিও রয়েছে। mkdir(1)ডিরেক্টরি তৈরি করতে আপনার একটি আদেশ প্রয়োজন ; এটি rmdir(1)পূর্বাবস্থায় ফেলার জন্য একটি আদেশ থাকা যুক্তিসঙ্গত বলে মনে হচ্ছে mkdir(1)। প্লাস তারা (এই দিন) সহজ exercisors rmdir(2)এবং mkdir(2)সিস্টেম কল - হ্যাঁ, 7 ম সংস্করণ ইউনিক্স ফিরে, mkdir(1)একটি এর SUID রুট কর্মসূচি ছিল ব্যবহার mknod(2)একটি ডিরেক্টরি নোড এবং তৈরি থেকে কল link(2)কল তৈরি করতে .এবং ..ডিরেক্টরির মধ্যে এন্ট্রি ।


আহা! এই সব বোঝায়, দুর্দান্ত!

2
খুশী হলাম। আমি এখানে আমার কাছে থাকা 3BSD এর একটি অনুলিপি দেখেছি এবং সেখানে কোনও rmdir সিস্কেলের জন্য কোনও নথি নেই এবং আরএমডিয়ার (1) এখনও আনলিংক ব্যবহার করে প্রয়োগ করা হয়েছে।
অ্যান্ডি রস

4
এম কেএনওড + লিঙ্ক এবং লিঙ্কমুক্ত সিস্টেমের একটি প্রধান ক্ষতি হ'ল ডিরেক্টরি তৈরি করা কোনও পারমাণবিক ক্রিয়াকলাপ ছিল না, সুতরাং আপনি আংশিক সম্পূর্ণ ডিরেক্টরি সহ শেষ করতে পারেন। তৈরি হওয়া অসঙ্গতিগুলির জন্য ফাইল সিস্টেমগুলি পরীক্ষা করার জন্য প্রচুর প্রোগ্রাম তৈরি করা হয়েছিল; fsck(1)এক যে বেঁচে আছে।
জোনাথন লেফলার

@ জোনাথন, সেই জিনিক্সের স্মৃতি ফিরিয়ে আনছে। ইশ! হ্যাঁ, সত্যিই খারাপ জিনিসগুলি ঘটতে পারে।
ফায়াস্কো ল্যাবগুলি

6

"rm" ডিরেক্টরিতে কাজ করে না। আপনি হয় rmdir ব্যবহার করতে হবে বা পুনরাবৃত্তি মোছার জন্য -r সুইচ নির্দিষ্ট করতে হবে। কারণটি historicalতিহাসিক: unlinkএবং rmdirএটি পৃথক সিস্টেম কল এবং ইউনিক্সের প্রথম দিক থেকেই।


4
একটি সুখী পার্শ্ব-প্রতিক্রিয়া হ'ল আপনি যখন কেবল কোনও ফাইল সরানোর ইচ্ছুক হন তখন দুর্ঘটনাক্রমে কোনও ডিরেক্টরি মুছে ফেলার সম্ভাবনা কম less

ধন্যবাদ. আমি লক্ষ্য করেছি যে "rm -r" এবং "rmdir" এর সমান পরিমাণ কী স্ট্রোক রয়েছে। Rmdir খালি historicalতিহাসিক কারণে (.. কয়েক দশকের পুরানো ইউনিক্স প্রোগ্রামের সাথে সামঞ্জস্যপূর্ণ) থাকার জন্য অস্তিত্ব রয়েছে?

2
প্রকৃতপক্ষে, ইউনিক্সের প্রথম দিনগুলিতে, সিস্টেম কল হিসাবে উপস্থিত ছিল না rmdir(2)বা উপস্থিত mkdir(2)ছিল না ; ব্যবহারকারী rootব্যবহার করতে পারে mknod(2)একটি ডিরেক্টরি নোড এবং তৈরি থেকে কল link(2)কল তৈরি করতে .এবং ..ডিরেক্টরির মধ্যে এন্ট্রি; এবং ডিরেক্টরি এন্ট্রিগুলি সরাতে কলটি rootব্যবহার করতে পারে unlink(2)
জোনাথন লেফলার

3

এছাড়াও rmdir খালি ডিরেক্টরিগুলি সরিয়ে দেয় । আপনি যদি নিশ্চিত করতে চান যে কোনও ডিরেক্টরিতে আপনি কোনও অতিরিক্ত ফাইল মুছবেন না, তবে এটির rmdirচেয়েও বেশি সুরক্ষিত rm -r(আপনি যদি আরএমএসের মতো নাম না রাখেন তবে আপনাকে যা মুছতে হবে তা নিশ্চিত করতে হবে , যেমন alias rm='rm -i'~ / .bashrc বা আপনি যা ব্যবহার করছেন তা )।


1

এছাড়াও, rmdirগ্লোব্বিং (ওয়াইল্ডকার্ড) এক্সপ্রেশন সহ খালি ডিরেক্টরিগুলি সরানো সহজ করে তোলে। উদাহরণস্বরূপ, /tmpসামগ্রীগুলির সাথে কোনও ফাইল বা ডিরেক্টরি স্পর্শ না করে সমস্ত খালি ডিরেক্টরি মুছে ফেলা :

cd /tmp ; rmdir *

ব্যবহার বিবেচনা করুন rmdir /tmp/*। তাহলে /tmpডিরেক্টরির সত্যিই বড়, এই নাম প্রতি অতিরিক্ত পাঁচটি অক্ষর কারণে আর্গুমেন্ট জন্য একটু দ্রুততর স্থান ফুরিয়েছে পারে, কিন্তু প্রয়োজন হয় না cdডিরেক্টরি অনুক্রমের প্রায় আপনি চলন্ত। rmdir /tmp/* 2>/dev/nullত্রুটি বার্তাগুলি দেখা এড়ানো বিবেচনা করাও মূল্যবান (সাধারণত প্রচুর পরিমাণে উপস্থিত থাকবেন এবং প্রায় সমস্তই সেই কাজটির জন্য অপ্রাসঙ্গিক হবে)।
জোনাথন লেফলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.