इस विशिष्ट "rm" अनुक्रम का xkcd मजाक में क्या कारण है?


14

यहाँ इस xkcd कॉमिक स्ट्रिप का हिस्सा है जहाँ विचार यह है कि लेखक एक तरह का प्रोग्राम नहीं लिख सकता है इसलिए वह सभी फ़ाइलों को हटाने के लिए कोड जोड़ता है

system("rm -rf ./");
system("rm -rf ~/*");
system("rm -rf /");

AFAIK सब कुछ हटाने के लिए विहित तरीका है rm /ताकि रूट से शुरू होने वाली सब कुछ हटा दिया जाए। यहां यह अंतिम कमांड और इससे पहले के दो कमांड हैं rmजो वर्तमान डायरेक्टरी और होम डायरेक्टरी की सामग्री के लिए प्रयास करें ।

सिर्फ क्यों नहीं rm /?

जवाबों:


19

यदि आप बहुत ऊपर से शुरू करते हैं, तो संभव है कि आप कुछ ऐसा मिटा देंगे जो rm(या सिस्टम का कोई अन्य महत्वपूर्ण हिस्सा) जारी रखना होगा, और बुराई अधूरी रह जाएगी।

ये आदेश यह सुनिश्चित करेंगे कि परमाणु जाने से पहले कम से कम cwd और उपयोगकर्ता के होम डायरेक्टरी चले गए हैं।


5
JFTR rm के रूप में rm उस मेमरी में लोड किया जाता है जिसे काम करना चाहिए और आवश्यक चर हटाए जाने पर भी काम करते रहना चाहिए। जब आप rm -rf /इंटरएक्टिव सत्र से भाग लेते हैं, तो आपका शेल अभी भी काम कर रहा है
उलरिच डेंगल

8
हाल ही rmमें अंतिम आदेश पर असफल हो जाएगा rm: it is dangerous to operate recursively on ‘/’; इसके अलावा rmआरंभीकरण के बाद किसी भी संसाधन तक पहुँच की आवश्यकता नहीं होती है। कई आदेशों का उपयोग करने का एक कारण यह हो सकता है कि उपयोगकर्ता के पास उन निर्देशिकाओं तक अलग-अलग पहुंच की अनुमति हो सकती है।
स्टीफन जिमेनेज़

@UlrichDangel, मुझे सोलारिस पर एक लंबे समय से पहले का रास्ता पता चला ...
वॉनब्रांड

1
यह। वास्तव rm --no-preserve-root /में काम करने के लिए आपको इसके लिए उपयोग करने की आवश्यकता है
मैक्स

1
"ये आदेश यह सुनिश्चित करेंगे कि परमाणु जाने से पहले कम से कम cwd और उपयोगकर्ता के घर निर्देशिका चला जाए।" जब हम "/ बिन /" :) में हैं तो हम क्या करेंगे? अंतिम दो कमांड बिल्कुल नहीं चलेंगे।
XzKto

8

बस विनाश के बढ़ते स्तर को दिखाने के लिए: वर्तमान निर्देशिका को हटा दें, फिर $HOME, अंत में सभी को नष्ट कर दें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.