কখন থেকে পসিক্স এবং জিএনইউ আরএম / মুছে না?


23

এখন বেশ কয়েক বছর ধরে, জিএনইউ rmইউটিলিটি অপশনটি /না ডেকে না মুছবে না --no-preserve-root। তবে, কমান্ডটি rm -rf /যৌথ অবচেতন অবস্থায় একটি দীর্ঘকাল ধরে বিপজ্জনক হিসাবে দায়ের করা হয়েছে এবং লোকেরা এখনও প্রায়শই এটি "ভীতিজনক" আদেশ হিসাবে উদ্ধৃত করে।

আমি ভাবছিলাম কখন এই নিয়মটি rmমুছে ফেলা যায় না তা /প্রথম প্রকাশিত হয়েছিল। আমি পসিক্স চশমা পরীক্ষা করে দেখেছি এবং আমি দেখতে পাচ্ছি যে পসিক্স: ২০০ this এ এই সুরক্ষা বৈশিষ্ট্যটি অন্তর্ভুক্ত রয়েছে, পসিক্স: 2001 নয়। যেহেতু প্রতিটি নতুন উপ-রিলিজের সাথে সময়ে সময়ে পসিক্স স্পক্সের অনলাইন সংস্করণগুলি আপডেট হয়, তাই আমি ওয়েবব্যাক মেশিনটিও পরীক্ষা করেছিলাম এবং ২০১০ থেকে পসিক্স : ২০০৮ এর প্রাসঙ্গিক পৃষ্ঠাটি পেয়েছি এবং এটি নিশ্চিত করতে সক্ষম হয়েছি যে নিয়মটি rmমুছে ফেলা যায় না /ইতিমধ্যে তালিকাভুক্ত ছিল।

সুতরাং, আমার প্রশ্নগুলি হ'ল:

  • POSIX চশমাগুলিতে rmসরানো যায় না এমন নিয়মটি কখন ছিল /? এটি কি সিঙ্গেল ইউনিক্স স্পেসিফিকেশন সংস্করণ 4 এর আসল 2008 সংস্করণে ছিল বা এটি একটি সংশোধনীতে যুক্ত করা হয়েছিল?
  • এই সীমাবদ্ধতাটি কখন জিএনইউতে যুক্ত হয়েছিল rm? আমি বেশ নিশ্চিত যে এটি পসিক্সে যুক্ত হওয়ার আগেই ছিল তবে এটি কখন ঘটল?


1
সম্পর্কিত: অস্টিন গ্রুপের ব্যাখ্যা # 019 (2003), যা পরিবর্তনের বর্ণনা দিয়েছে (তবে বাস্তবায়ন করেনি)।
মাইকেল হোমার

উত্তর:


28

আপনি পসিক্স ২০০৮ এর সমস্ত সংস্করণের HTML সংস্করণ অনলাইনে খুঁজে পেতে পারেন:

এটি ২০০৮ সংস্করণে যুক্ত হয়েছিল।

প্রযুক্তিগত কর্নঞ্জা সাধারণত নতুন বৈশিষ্ট্য যুক্ত করে না।

আপনি আগের সংস্করণটি দেখতে পারেন ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (পোসিক্স 2004) তে এই পাঠ্যটি নেই।

এই মানটি পরবর্তী সংস্করণে অন্তর্ভুক্তির জন্য 2003-05-09 অস্টিন গ্রুপ সম্মেলনে নতুন পাঠ্য গৃহীত হয়েছিল ।

এটি একই বছরের মার্চ মাসে সান মাইক্রোসিস্টেমসের জন বেক দ্বারা অনুরোধ করা হয়েছিল (লিঙ্কটির জন্য ওপেনগ্রুপ নিবন্ধকরণ প্রয়োজন, এছাড়াও এখানে উন্নয়নের অনুরোধ নম্বর 5 দেখুন )।

জন বেক লিখেছেন, মঙ্গলবার ১১ মার্চ ২০০৩ এ:

@ page 820 line 31681-31683 section rm comment {JTB-1}

Problem:

Defect code :  3. Clarification required

An occasional user mistake, with devastating consequences, is to
write a shell script with a line such as:
      rm -rf $VARIABLE1/$VARIABLE2
or
      rm -rf /$VARIABLE1
without verifying that either variable is set, which can lead to
      rm -rf /
being the resulting command.  Since there is no plausible
circumstance under which this is the desired behavior, it seems
reasonable to disallow this.  Such a safeguard would, however,
violate the current specification.

Action:

Either extend the exceptions for . and .. on the noted lines
to list / as well, or specify that the behavior of rm if an
operand resolves to / is undefined.

জিএনইউ 2003-10-09 এর এই প্রতিশ্রুতিতেrm যুক্ত হয়েছে --preserve-rootএবং --no-preserve-rootবিকল্পগুলি করেছে , তবে কেবল 2006-09-03 এর প্রতিশ্রুতিতে এটি ডিফল্ট হয়ে গেছে , সুতরাং কোর্টিলগুলিতে 6.2--preserve-root

ফ্রিবিএসডি 2004-10-04 কমিট করার পর থেকে স্ল্যাশ সংরক্ষণ করে চলেছে ( "আমার অন্তর্বাসটি আসলে কী শিখা-প্রমাণ রয়েছে তা" কমিট লগের সাথে সন্ধান করুন), তবে প্রাথমিকভাবে যখন তা ছিল না , যতক্ষণ না তারা এক দশক পরে চেক করতে ভুলে যায় যে পসিএক্স এখন ছিল এটি পজিক্স মোডেও সম্পন্ন করা হয়েছিল এমন সময়ে এটি নির্ধারণ করাPOSIXLY_CORRECT

ফ্রিবিএসডি প্রাথমিক প্রতিশ্রুতিতে উল্লেখ করা হয়েছে যে সোলারিস ইতিমধ্যে সেই সময়ে এটি করছিল।

@ জেডিপিবি (নীচে মন্তব্যে) সোলারিস উত্স সম্পর্কে আরও বিশদ দেওয়ার জন্য এবং সূর্যের অভ্যন্তরীণ গল্পের সংযোগটি খুঁজে পেয়েছিল এবং পরামর্শ দিয়েছে যে অস্ট্রিন গ্রুপকে অনুরোধ করার আগে সোলারিসের ইতিমধ্যে সেফগার্ড ছিল।

এটি বাদ দিয়ে যুক্ত করার যুক্তি ব্যাখ্যা করে। যদিও কেউ কেবল নিজেকেই দোষারোপ করতে পারে rm -rf /, সেখানে এমন একটি ঘটনা রয়েছে যেখানে কোনও স্ক্রিপ্ট তা করতে পারে কিনা তা rm -rf -- "$1/$2"পরীক্ষা না করে $1/ সরবরাহ করা $2হয়েছিল যা সোলারিস প্যাচটিকে অপব্যবহার করার সময় কিছু সান গ্রাহকদের খারাপ ক্ষতি করে (সেই লিঙ্ক অনুসারে)।

মুছে ফেলা নিষেধ .এবং এর ..বহু আগে এবং আবার যুক্ত করা হয়েছিল সম্ভাব্য দুর্ঘটনার বিরুদ্ধে সুরক্ষার জন্য। rmএখনও একটি বিপজ্জনক আদেশ। এটি এর অর্থ যা বোঝায় তা করে: আপনি যা বলছেন তা সরিয়ে দিন।

rm -rf /*
cd /tmp &&  rm -rf .*/   # on some systems where rm -rf ../ still removes
                         # the content of ../ and shells that still
                         # may include . and .. in glob expansions.
rm -rf -- "$diretcory"/* # note the misspelled variable name
dir='foo '; rm -rf $dir/*

সবকিছু মুছে ফেলবে। শেল ফাইলের নাম সমাপ্তি যখন আপনি করেন তখন এ জাতীয় সমস্যাগুলির কারণ হিসাবে পরিচিত

rm -rf someth<Tab>/*

এতে প্রসারিত:

rm -rf something /*

কারণ somethingতাই ঘটেছে ডিরেক্টরি হতে না।

শেলগুলি পছন্দ করে tcshবা একটি ওয়াইল্ডকার্ডের সাথে zshকল করার চেষ্টা করার সময় একটি অতিরিক্ত প্রম্পট যোগ করবে ( ডিফল্টরূপে নয়)।rm*tcsh



1
একটি তরুণ কো-অপ-এসএ হিসাবে, আমি সুনোস ডাব্লু / rm -rf .*তার বাড়ির দির থেকে কোনও ব্যবহারকারীর ডিরেক্টরিতে লুকানো ফাইলগুলি মুছে ফেলার চেষ্টা করেছি । এর কিছুক্ষণ পরে, সমস্ত ফোনের লাইনগুলি জ্বলজ্বল করে ...
অ্যারন ডি মারাকো

আমি bet rm -rf। * = Rm -rf / সেখানে পৌঁছানোর জন্য এক বিভ্রান্ত উপায়ে বাজি ধরেছি।
Escoce

@ গুরুআড্রিয়ান নিশ্চিত, * এর অর্থ সমস্ত কিছুর সাথে মেলে *
Escoce

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