সর্বশেষ (2017 হিসাবে) জন্য POSIX বৈশিষ্ট সংস্করণ rm
ইউটিলিটি এখানে (এবং আগের সেখানে ) এবং মুছে ফেলার নিষিদ্ধ .
এবং ..
।
যদি ডট বা ডট-ডট ফাইলগুলির মধ্যে কোনও অপারেন্ডের মূল নাম অংশ হিসাবে চিহ্নিত করা হয় (এটি চূড়ান্ত পথের নাম উপাদান) বা যদি কোনও অপারেন্ড মূল ডিরেক্টরিতে সমাধান করে তবে rm স্ট্যান্ডার্ড ত্রুটিতে ডায়াগনস্টিক বার্তা লিখবে এবং কিছুই করবে না যেমন অপারেশন সঙ্গে আরও।
@ জেলিয়াগ্রে দ্বারা উল্লিখিত হিসাবে, অংশটি SUSv4 /
এ একটি সংযোজন।
প্রাচীনতম সর্বজনীনভাবে উপলভ্য ইউনিক্সের অনুমান যা আমি খুঁজে পেয়েছি ( XPF4 CAE rev2 (1994)), ইতিমধ্যে এটি নির্দিষ্ট করেছে .
এবং ..
সরানো যাবে না, যদিও জিএনইউ ফাইলল্টিজ চেঞ্জলগে মন্তব্য করা হয়েছে যে এটি পুরাতন পসিক্স স্পেক্সগুলিতে ইতিমধ্যে ছিল।
মনে রাখবেন এটি প্রযোজ্য dir/..
এবং ../
পাশাপাশি, তবে কিছু বাস্তবায়ন (ইউএনআইএক্স-প্রত্যয়িত সোলারিস 11 এবং ম্যাকোস সহ) এখনও rm -rf ../
বা এর বিরুদ্ধে সুরক্ষা দেয় না rm -rf .*/
)।
ইতিহাস
প্রারম্ভিক unices
ইউনিক্স ভি 3 (1973) এ -r
বিকল্পটি rm
যুক্ত করা হয়েছে যদিও এটি কেবল ডিরেক্টরিগুলির সামগ্রী মুছে ফেলছিল, তবুও আপনাকে rmdir
ডিরেক্টরিগুলি সরানোর জন্য ব্যবহার করতে হবে।
এটি ইউনিক্স ভি 7-তে পরিবর্তিত হয়েছিল (1979 সালে, রিলিজটি বোর্ন শেলকেও প্রবর্তন করেছিল এবং যেখান থেকে বেশিরভাগ ইউনিসি উদ্ভূত হয়েছিল)। rm -r
এখন ডিরেক্টরিগুলি সরানো হয়েছে এবং ..
ডিরেক্টরি ট্রি মুছবে না । Man পৃষ্ঠা পদ বলে:
..
অজান্তেই এমন কিছু করার অসামাজিক পরিণতি এড়াতে কেবল ফাইলটি সরিয়ে নেওয়া নিষিদ্ধ rm -r .*
।
(যদিও কেউ যুক্তিযুক্ত হতে পারে যে rm -r .*
এটি এখনও অসামাজিক.
) কারণ এটি অন্তর্ভুক্ত রয়েছে বলে সমস্ত কিছু মুছে ফেলা হয়।
এটি এখনও মুছে ফেলতে স্বীকার করে নি .
যদিও এটি লিঙ্কগুলি .
বা ..
এন্ট্রিগুলিকে লিঙ্কযুক্ত করে না । সুতরাং, rm -r .
বর্তমান ডিরেক্টরি খালি করার একটি কার্যকর উপায় ছিল।
আরও মনে রাখবেন যে সেফগার্ডটি কেবল আক্ষরিক ..
যুক্তির জন্য ছিল , না dir/..
বা এর জন্য নয় ./..
। সুতরাং, rm -rf ./.*
তবুও অভিভাবক ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত কিছু মুছে ফেলা হবে।
এটি দেখতে আকর্ষণীয় যে এটি ইতিমধ্যে যে সমস্যাগুলি / ভুল ত্রুটিগুলি দ্বারা গ্লোবগুলি অন্তর্ভুক্ত করতে পারে .
এবং ..
তাদের সম্প্রসারণে কাজ করেছিল তা কার্যকর হয়েছিল। যে Forsyth, শেল প্রয়াত 80s মধ্যে (মূল Minix শেল এবং pdksh ভিত্তি), সংশোধন করা হয় zsh
(1990) এবং fish
(2005) কিন্তু অন্যান্য শাঁস এবং বিশেষ না POSIX মধ্যে sh
ভাষা সম্প্রসারণ প্রয়োজন .*
অন্তর্ভুক্ত করা .
এবং ..
যদি সেগুলি দিয়ে ফিরে আসে readdir()
( bash
সমস্যাগুলি কেবল আংশিকভাবে সম্বোধন করে shopt -s dotglob
যেখানে গ্লোবগুলি ( .xxx
সেগুলি ব্যতীত ) অন্তর্ভুক্ত হয় না .
বা ..
এবং এর মাধ্যমে ksh
আপনি এটি সমাধান করতে পারেন FIGNORE='@(.|..)'
)।
হুবহু নিষেধাজ্ঞার .
পাশাপাশি যুক্ত করা সর্বদা পরিষ্কার হয় না এবং প্রতিটি ইউনিক্সের সাথে পরিবর্তিত হয়। নীচে কয়েকটি অনুসন্ধান।
BSD গুলোর
এর বাধা দিত .
2.9BSD (1983) এবং 2.10BSD (1987) মধ্যে এবং 4.2BSD (1983) এবং 4.3BSD (1986) মধ্যে একদা যোগ করা হয়েছিল (দেখুন এই পরিবর্তন UNIX-ইতিহাস-রেপো তে 1985 timestamped )।
$ wget -qO- http://www.tuhs.org/Archive/PDP-11/Distributions/ucb/2.9BSD/root.tar.gz |
zgrep -ao 'rm: canno[[:print:]]*'
rm: cannot remove `..'
$ wget -qO- http://www.tuhs.org/Archive/PDP-11/Distributions/ucb/2.10bsd.tar.gz |
zgrep -ao 'rm: canno[[:print:]]*'
rm: cannot remove `.' or `..'
rm: cannot remove `.' or `..'\n");
জন্য dir/.
এবং dir/..
দেখুন 1988 সালে এই পরিবর্তন (বাসদ 4.3 নিট / 1)।
এই আজ পর্যন্ত, rm
এর FreeBSD 'র (এবং MacOS মত ডেরাইভেটিভস) এখনও উপর বর্তমান বা পেরেন্ট ডাইরেক্টরি empties rm -rf ./
বা rm -rf ../
যদিও (ব্যাপারে rm -rf .*/
)।
সিস্টেম ভি
ভি 7 এর পরে এটিএন্ডটি ইউনিক্স ডেরিভেটিভসের জন্য উত্স বা বাইনারি উভয়ই প্রকাশ্যে উপলভ্য হওয়ায় আমার কাছে তেমন তথ্য নেই। তার অনলাইন ম্যানুয়ালটিতে, এইচপিইউক্স (সিস্টেম III এর ভিত্তিতে) এখনও উল্লেখ করেছে যে এটি কেবলমাত্র ..
কার্যকরভাবে নিষিদ্ধ করেছে যখন এটি উভয়কেই কার্যকরভাবে নিষেধ করে যা সম্ভবত এটি অন্তত SysIII মুছে ফেলার নিষেধ করেনি .
( সম্পাদনা : এখন সিসিআইআইআই rm
উত্স কোডটি দেখছেন , এটি ইউনিক্স ভি 7 এর পরে কার্যত অপরিবর্তিত)।
অন্য সমস্ত অনলাইন ম্যানুয়াল আমি মুছে ফেলার উল্লেখ পরীক্ষা করেছি .
বা ..
নিষিদ্ধ যা POSIX অনুসারী হওয়ার আশা করা হয়।
সোলারিস rm
এখনও উপর বর্তমান বা পেরেন্ট ডাইরেক্টরি empties rm -rf ./
বা rm -rf ../
।
গনুহ
গনুহ fileutils জন্য প্রথম পরিবর্তণের সকল ঐতিহাসিক তথ্য রয়েছে।
যদিও মূলত মুছে ফেলা .
বা ..
নিষেধ করা হয়নি, ..
প্রথমে এবং তারপর উভয় (সহ dir/.
), সমস্তই 1990 এবং 1991 এর মধ্যে নিষিদ্ধ ছিল ।
অন্যান্য
যেমনটি আমরা দেখেছি, zsh
এর .*
(বা কোনও গ্লোব) বিস্তৃতি কখনই অন্তর্ভুক্ত করে না .
বা ..
(এমনকি sh
এমুলেশন মোডেও)। rm
Builtin (যা আপনি যদি পেতে zmodload zsh/files
) অতএব আচরণ করে না .
বা ..
বিশেষভাবে। সুতরাং, যে সঙ্গে zsh
builtin, আপনি পারেন rm -rf .
বা rm -rf ..
খালি .
বা ..
, কিন্তু rm -rf .*
সরানো হবে না .
বা ..
।
, Busybox সালে rm
, এর মোছা চালিয়ে যাওয়া বাধা দিত .
এবং ..
(2001) 0.52 মধ্যে যোগ করা হয়েছিল
rm
, কিন্তু আমি ভেবেছিলাম এটা উল্লেখ আপনি এখনও সঙ্গে অপ্রত্যাশিত ফলাফল থাকতে পারে যে মূল্য ছিলchmod
,chown
ইত্যাদি যখন মিলে.*
।