'Rm -rf /' कमांड के साथ आपको कितनी दूर मिलेगी?


200

मैं अक्सर सोचता हूं कि अगर आप चलते हैं तो सिस्टम वास्तव में कितना दूर हो जाएगा rm -rf /। मुझे संदेह है कि ओएस खुद को मिटाने में सक्षम होगा (?)

बोनस प्रश्न : कमांड निष्पादित होने के बाद, rmखुद को हटा दिया होगा ?

अद्यतन: मैंने वर्चुअल यूनीबॉक्स का उपयोग करते हुए मुख्य यूनिक्स वितरण के एक जोड़े में यह परीक्षण किया है और उत्तर वास्तव में ऐसा होता है। यदि सही पैरामीटर दिए गए हैं, तो rm डिस्क पर मौजूद हर भौतिक डेटा को हटा देगा। हालांकि, मैं कुछ मुद्दों में भाग गया जब GNU एक के अलावा rm के एक संस्करण का उपयोग कर रहा था। उदाहरण के लिए, मेरा मानना ​​है कि बिजीबॉक्स का अपना संस्करण है और यह आपको उतनी दूर नहीं जाने देता जितना कि आप संभावित रूप से कर सकते हैं।

यह प्रश्न सप्ताह का एक सुपर यूजर प्रश्न था । अधिक विवरण के लिए
7 जुलाई, 2011 ब्लॉग प्रविष्टि पढ़ें या अपना प्रश्न सप्ताह प्रस्तुत करें


8
यह मजेदार है कि आपने यह सवाल पूछा। मैं अभी दूसरे फोरम पर एक और rm -f प्रश्न का उत्तर दे रहा था और मुझे एक लेख याद आने लगा जो मैंने कुछ समय पहले पढ़ा था। : सौभाग्य से मैं इस तरह समय के लिए यह बचाया क्लासिक यूनिक्स डरावनी कहानी तथ्य यह है कि यह देखने के लिए कितनी दूर जाना होगा ... मुझे लगता है कि यह एक बहुत ही अच्छी तरह से लिखा लेख है दिलचस्प है और एक आम तौर पर अच्छा पढ़ा है इसके अलावा!
अक्सेली

3
मैंने अभी-अभी sudo rm -rf /tinycore / microcore linux पर कोशिश की है और ऐसा लगता है कि OS कई डायरेक्ट्री (/ sys और अन्य) को डिलीट होने से बचाता है।
n0pe

47
मैंने rm -f /bin/rmएक बार कोशिश की । दुर्भाग्य से, यह काम किया, और मैंने अगले घंटे rmको जीएनयू कोरुटिल्स से वापस सही संस्करण प्राप्त करने में बिताया ।
स्क्वेर्ल

17
एक सेकंड रुको, मैं कोशिश करूँगा ...
मार्टिज़न कोर्टो

38
मैं हर समय सेब की दुकान पर ऐसा करता हूं
eggie5

जवाबों:


188

यदि आपके पास rmजीएनयू कोर्यूटिल्स हैं (तो संभवतः यह एक नियमित लिनक्स डिस्ट्रो है), rm -rf /बिल्ट-इन प्रोटेक्शन (मैनपेज और विकिपीडिया के अनुसार, ऐसा करने की कोशिश नहीं की गई ) से इनकार कर दिया जाएगा।

आप इस सुरक्षा को ओवरराइड कर सकते हैं --no-preserve-rootrmहर एक फ़ाइल को निकालने का प्रयास करने के बाद बिना रुके, संभवत: वह सब कुछ हटा सकता है। बेशक यह वर्चुअल फाइलसिस्टम को नहीं हटाएगा जैसे /procऔर /sys, लेकिन यह अप्रासंगिक है - यह आपकी डिस्क पर सब कुछ हटा देगा।

कमांड खत्म होने के बाद, आपको डिस्क को खाली कर दिया जाएगा, जिसमें OS भी शामिल है। मेमोरी से कर्नेल और वर्तमान प्रक्रियाएँ चलती रहेंगी, लेकिन कई प्रक्रियाएँ मर जाएँगी क्योंकि वे कुछ फ़ाइल तक पहुँचने में विफल हो जाएँगी। अगली बार OS बूट करने में विफल रहेगा।


67
ठीक वही जो मेरे द्वारा खोजा जा रहा था। अब इस शक्ति को दुनिया भर में लेने के लिए उपयोग करें।
05 15:11

34
+1 विशेष रूप से इसके लिए --no-preserve-rootजिसका आमतौर पर उल्लेख नहीं किया गया है।
माटुज जी।

22
@MaxMackie, यह ध्यान देने योग्य है कि हैकर्स ने बहुत तेज़ी से पाया कि यह एक उपयोगकर्ता के लिए सबसे कम उपयोगी चीज हो सकती है। यह किसी भी डेटा को नष्ट कर देता है जिसे नकद लाभ के लिए इस्तेमाल किया जा सकता है, और हैकर को मशीन का आगे शोषण करने से रोकता है। एक कीड़े के साथ एक बिल्ली की तरह, आप इसे मारना नहीं चाहते हैं, आप बस थोड़ी देर के लिए इसके साथ खेलना चाहते हैं क्योंकि यह मजेदार है।
zzzzBov

5
ओपी के अन्य प्रश्न का उत्तर देने के लिए, हाँ rm स्वयं को हटा देगा। किसी निष्पादन योग्य को संशोधित करने या हटाने के लिए पूरी तरह से संभव है, जबकि इसके चलने का एक उदाहरण है। यह भी चलता रहेगा, और परिवर्तन से अप्रभावित रहेगा।
थोमसट्रेटर

3
मैं "chmod -R उपयोगकर्ता: उपयोगकर्ता *" का उल्लेख / करना चाहूंगा, क्योंकि यह एक पुनरावर्ती और महंगा गलती भी है। मैंने इसे एक बार किया था, और जब तक मैं गर्भपात कर सकता था, तब तक आधा घर मिल चुका था। / बिन / बूट / आदि / देव स्वामित्व में थे। सौभाग्य से सर्वर चालू रहा जब मैंने अगले कुछ घंटे मैन्युअल रूप से बिताए और एक संदर्भ प्रणाली से मालिकाना रीसेट कर दिया। हालाँकि, बाद में कोई भी su या sudo का उपयोग नहीं कर सकता था। आखिरकार पता चला कि बिन / सु को अब अपना सेट बिट सेट नहीं था। भविष्य के लिए ध्यान दें: chowning / bin / su अपने सेतु बिट को रीसेट करता है!
एंडी ली रॉबिन्सन

42

उन लोगों के लिए जो तकनीकी संगीत सुनते हुए नेत्रहीन इस तरह से सामान करना पसंद करते हैं।

लिनक्स पर rm- rf चलाना (वीडियो)

बोनस अंक यदि आप प्रक्रियाओं को नाम दे सकते हैं क्योंकि वे मरने लगते हैं।


22

एक वीएम सेट करें और मनोरंजन के लिए प्रयास करें?

यह काफी दूर तक जाएगा ... यदि आप एक गुई का उपयोग कर रहे हैं, तो आप मज़ेदार चीजें देख सकते हैं जो अधिक स्पष्ट रूप से नीचा दिखाते हैं। (मेनू पर चिह्न लोड करना बंद करो आदि)

यदि आप इसे जाने देते हैं, तो ओएस बहुत अधिक वसूली से परे होगा, हालांकि आप आसानी से कुछ डेटा वापस प्राप्त करने में सक्षम हो सकते हैं।

किसी भी तरह से, आप ओएस को फिर से स्थापित करना चाहते हैं।


7
मैंने वीएम में इसे आजमाने के बारे में सोचा भी नहीं था। अब कोशिश करने जा रहा हूँ! यह मजेदार है।
n0pe

40
गलती से होस्ट सिस्टम के टर्मिनल को कमांड लिखता है
बजे

1
मेरे द्वारा पोस्ट किया गया लेख देखें। "क्लासिक यूनिक्स हॉरर स्टोरी!"
अक्सेली

1
मैं अभी काम कर रहा हूं और एक लोकप्रिय डिस्ट्रो (ubuntu / slack / suse / fedora) की पूरी स्थापना के माध्यम से जाने का समय नहीं है। अगर कोई और वीएम डिस्क फ़ाइल को क्लोन कर सकता है और हमारे लिए कोशिश कर सकता है, तो यह बहुत बढ़िया होगा।
n0pe

2
अमेज़ॅन EC2 के साथ यह उनके एएमआई में से एक को आग लगाने के लिए त्वरित होना चाहिए जो पहले से ही लिनक्स स्थापित है और आग से दूर है ...
डेविड डी सी ई फ्रीटास

11

ठीक है, इसे http://bellard.org/jslinux/ पर आज़माकर देखें :

rm: '/ dev / pts' को हटा नहीं सकता: युक्ति या संसाधन व्यस्त
rm: '/ dev'
को नहीं निकाल सकता : निर्देशिका खाली rm नहीं: '/ proc / swaps' को नहीं हटा सकता: ऑपरेशन
rm को अनुमति नहीं दे सकता: 't remove' / proc / kallsyms ': ऑपरेशन की अनुमति नहीं
rm: नहीं निकाल सकते ' / proc / dma ': अनुमति नहीं

SNIP 881 प्रविष्टियाँ

rm: '/ proc / 149 / oom_adj' को
हटा नहीं सकता : अनुमति से इनकार rm: '/ proc / 149'
को नहीं हटा सकता : ऑपरेशन rm की अनुमति नहीं : '/ proc' को नहीं निकाल सकता: युक्ति या संसाधन व्यस्त
rm: '/ tmp' को नहीं हटा सकते: डिवाइस या संसाधन व्यस्त
rm: नहीं निकाल सकते '/': डिवाइस या संसाधन व्यस्त


1
हाँ, मैं उन त्रुटियों / चेतावनियों को भी प्राप्त करता हूँ। क्या यह मानक आपको लगता है?
n0pe

5
/ proc, / sys, कभी-कभी / dev, और कोई भी माउंटपॉइंट ऑपरेटिंग सिस्टम के गुण होते हैं और इन्हें हटाया नहीं जा सकता।
15:50 बजे pjc50

1
@ Pcj50 के साथ आकर, वे हार्ड डिस्क पर वस्तुतः फाइलें नहीं हैं, इसलिए उन्हें "हटाना" सार्थक नहीं है।
CarlF

7

मुझे याद है कि यह याओरे के alt.sysadmin.recoveryदिनों में वापस चबाया जा रहा था, जब ऐसी कोई बात नहीं थी /proc, और /devसिर्फ एक नियमित निर्देशिका थी जिसमें असामान्य इनोड्स के एक समूह के लिए प्रविष्टियां थीं ...

... लेकिन, यूनिक्स के कुछ वेरिएंट पर (मेरा रिकॉल HP-UX है, लेकिन यह पूरी तरह से गलत हो सकता है), आप उस प्रोग्राम के लिए अंतिम निर्देशिका प्रविष्टि को नहीं हटा सकते थे जो चल रहा था। (साझा पुस्तकालय? वे क्या हैं?)

ऐसी प्रणालियों, यदि आप रखरखाव मोड में एक शुरू कर दिया (ताकि कुछ भी नहीं चल रहा था, लेकिन अपने खोल, यहां तक कि नहीं init, और कोई माध्यमिक फाइल सिस्टम घुड़सवार थे) और था exec /bin/rm -rf /, तो आप एक पूरी तरह से खाली जड़ फाइल सिस्टम के साथ रह जायेंगे को छोड़कर कि /binऔर /bin/rmहोगा बना रहना।

डरावना शैतान मठ के डेनिजन्स ने इसे उचित और उचित माना।


4

rm -rf / हाल के कार्यान्वयन पर अनुमति नहीं दी जानी चाहिए क्योंकि यह सुझाव दिया गया है कि यह POSIX मानक का उल्लंघन करता है:

" rm -rf /" ओरेकल ब्लॉग पर सुरक्षा

वैसे भी, अंत में, हम कल्पना को संशोधित करते हैं, और सोलारिस 10 के पास (36 के बाद से) / usr / bin / rm (/ bin एक वर्जन-लिंक है / Solaris पर usr / bin) और / usr / xpg4 / bin / rm जो इस प्रकार व्यवहार करता है:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

2
"यह इंगित करते हुए कि यदि कोई हटाने का प्रयास करता है" / "पुनरावर्ती रूप से, कोई अंततः हटाने का प्रयास करेगा" .. "और"। ", और यह कि हम जो भी कर रहे हैं वह rm को इस स्वाभाविक रूप से पूर्व-निर्धारण करने की अनुमति दे रहा है। आश्चर्यजनक रूप से, उन्होंने खरीदा। "- एर, जो किसी भी निर्देशिका को हटाने से इनकार नहीं करेगा ? वास्तविक कल्पना केवल नापसंद है .. और। वास्तविक कमांड-लाइन तर्कों में, यह कुछ भी नहीं कहता है कि आप "अंततः निकालने का प्रयास" क्या करते हैं
रैंडम 832

1
यह किसी भी निर्देशिका को हटाने को अस्वीकार क्यों करेगा? रूट डायरेक्टरी केवल यहां से संबंधित है और इसे हटाने से स्पष्ट रूप से निष्कासन होता है "।" और "..", जो भी वर्तमान निर्देशिका है। सामान्य ज्ञान मानक व्याख्या में निषिद्ध नहीं है।
जुलियाग्रे

1
तर्क की वह रेखा शुद्ध प्रतिभा है।
नैट CK

मानक निर्दिष्ट करता है कि rm को जारी रखने की अनुमति नहीं है यदि किसी तर्क में स्ट्रिंग है "।" या ".." बेसन घटक के रूप में। /foo/..यदि आप अंदर नहीं हैं तो भी आप नहीं निकाल सकते /foo। यह निर्दिष्ट नहीं करता है कि आपको वर्तमान निर्देशिका (जैसे rm -r `pwd`) या वर्तमान निर्देशिका के माता-पिता को निकालने की अनुमति नहीं है ।
228:

2
दरअसल, मैंने बयान को गलत समझा और आप सही हैं। उम्मीद है, मानक लोगों ने मानक व्यवहार के रूप में होशियार व्यवहार को स्वीकार किया। बड़े हिस्से को हटाना अगर सभी फ़ाइल सिस्टम को जल्दी से वैसे भी ओएस को गैर मानक नहीं बना देगा।
जूलियरे

3

एक बिंदु जो मैंने किसी और के द्वारा नहीं देखा था: जो फाइलें वर्तमान में खुली हुई हैं (उदाहरण के लिए स्वयं rm), भले ही हटा दी गई हों, वास्तव में बंद होने तक ड्राइव से fom गायब नहीं होगी।


यह सही है, क्योंकि वे मेमोरी में लोड हैं?
n0pe

मुझे यकीन नहीं है कि अगर यह मान लेना सुरक्षित है; कर्नेल बहुत अच्छी तरह से हटाए गए फ़ाइल को केवल मेमोरी में लोड कर सकता है और इसे तुरंत डिस्क पर हटा सकता है, और इस इन-मेमोरी कॉपी को तब तक रख सकता है जब तक कि फाइल खुली न हो (जैसे rm चल रहा है)।
अम्ब्रोज़ बिज्जक

मैं अटकल नहीं लगा रहा हूं। यदि कोई प्रोग्राम चल रहा है, तो उसे हटाना मेरे लिनक्स बॉक्स पर नहीं हटाता है, कम से कम। (माइंड यू, मैंने यह परीक्षण नहीं किया है, ओह, कुछ वर्षों में।)
कार्लएफ

4
rm एफएस से खुद को हटा देगा - कार्यक्रम पूरी तरह से मेमोरी में लोड होता है, न कि फाइल
वॉरन

4
@MaxMackie: इसलिए नहीं क्योंकि वे मेमोरी में लोड होते हैं, बल्कि इसलिए कि एक ओपन फाइल रेफरेंस में हार्ड-लिंक की तरह ही पावर होती है (यानी अगर किसी फाइल में कम से कम एक हार्ड लिंक है, तो वह डिस्क से डिलीट नहीं होगी)।
रेयान

1

इसे एक बार आज़माने के लिए (एक सर्वर पर जो मुझे पेशाब कर रहा है), रूट के रूप में लॉग इन किया, टर्मिनल में, आप लगभग सब कुछ खो देंगे। केवल एक चीज जिसे मिटाया नहीं जाएगा वह केवल वही प्रक्रिया होगी जो ओएस के लिए आवश्यक थी।


12
"[मिटाया नहीं] केवल वह प्रक्रिया जो ओएस के लिए आवश्यक थी" - ओह, चिंता न करें। विंडोज के विपरीत, लिनक्स खुशी से कुछ भी मिटा देगा, भले ही फाइल ओएस-क्रिटिकल हो और उपयोग में हो। /boot, /sbin, /etc, /bin, /vmlinuz? बाम, गया। उन लोगों के बिना गुड लक बूटिंग - वास्तव में, एक बार डिलीट खत्म होने के बाद कुछ भी करना गुड लक ।
पिस्कवॉर

अगर मुझे याद है कि कुछ फाइल डिलीट नहीं हुई थी, और मैंने अपना लिनक्स 4 घंटे से ज्यादा चलने दिया। लेकिन फिर भी, यह जानना अच्छा है कि क्या होता है, जैसे कि चामोद 777 / * -fR;) करना
Anarko_Bizounours

3
"chmod 777 / * -fR" - यह सिस्टम को बहुत असुरक्षित बनाना चाहिए, हालांकि बहुत उपयोगकर्ता के अनुकूल है।
बार्ट वैन हीकेलोम

1
@BartvanHeukelom, कुछ उपकरण एक त्वरित आत्म-परीक्षण करेंगे, या उचित स्वामित्व और अनुमतियों के लिए सिस्टम द्वारा परीक्षण किया जाएगा और दुर्भावनापूर्ण व्यवहार होने पर कार्य करने से इनकार करेंगे।
हत्यारे जूल

1
chmod -fR 777 /हानिकारक है क्योंकि यह सेतु और सेटगिड बिट्स को बंद कर देता है।
जी-मैन

1

आप कितनी दूर जा सकते हैं, यह मूल रूप से विशिष्ट यूनिक्स / लिनक्स वितरण पर निर्भर है।

लेकिन आपके आधार प्रश्न का उत्तर देने के लिए, हाँ - rmकमांड को इसके साथ ही किसी अन्य मानक कमांड /binऔर अन्य फ़ोल्डरों में हटा दिया जाएगा ।

यहाँ सरल परीक्षण है जो मैंने लिनक्स उबंटू 15.04 में वीएम का उपयोग करके किया है।

  1. वर्चुअल मशीन के माध्यम से आरंभ करें vagrant:

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
    
  2. तब जब आप मानक तरीके से सभी फाइलों को हटाने की कोशिश कर रहे हैं, यह आपको नहीं होने देता है:

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -fr /
    rm: it is dangerous to operate recursively on '/'
    rm: use --no-preserve-root to override this failsafe
    
  3. तो कोशिश करते हैं --no-preserve-root। हमेशा वर्चुअल मशीन में लॉग इन करें (इसलिए आप कर रहे हैं vagrant@vagrant-ubuntu-vivid-64:~$), फिर चलाएं (घर पर कोशिश न करें):

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -vfr --no-preserve-root /
    removed directory: '/lost+found'
    removed directory: '/opt'
    removed '/bin/nc'
    removed '/bin/less'
    removed '/bin/wdctl'
    removed '/bin/nano'
    ...
    removed '/bin/rmdir'
    removed '/bin/sh'
    removed '/bin/rm'
    ...
    removed directory: '/bin'
    removed directory: '/usr/games'
    removed '/usr/bin/byobu-launcher-install'
    removed '/usr/bin/ipcmk'
    removed '/usr/bin/sum'
    removed directory: '/usr/bin'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    removed '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    removed directory: '/usr/lib/gcc/x86_64-linux-gnu/5'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    removed directory: '/run/initramfs'
    removed directory: '/media'
    rm: cannot remove '/proc/fb': Operation not permitted
    rm: cannot remove '/proc/fs/ext4/sda1/options': Operation not permitted
    ...
    removed '/vmlinuz'
    removed '/boot/config-3.19.0-23-generic'
    removed '/boot/grub/grubenv'
    ...
    removed directory: '/boot'
    removed '/lib64/ld-linux-x86-64.so.2'
    rm: cannot remove '/dev/hugepages': Device or resource busy
    rm: cannot remove '/dev/mqueue': Device or resource busy
    rm: cannot remove '/dev/shm': Device or resource busy
    removed '/dev/vcsa7'
    ...
    removed '/dev/mem'
    removed '/dev/rfkill'
    removed '/dev/vga_arbiter'
    ...
    rm: cannot remove '/sys/fs/ecryptfs/version': Operation not permitted
    removed directory: '/etc'
    removed directory: '/mnt'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    removed '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/id'
    removed '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    removed '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    removed directory: '/vagrant/.vagrant/machines/default/virtualbox'
    removed directory: '/vagrant/.vagrant/machines/default'
    removed directory: '/vagrant/.vagrant/machines'
    removed directory: '/vagrant/.vagrant'
    removed '/vagrant/Vagrantfile'
    rm: cannot remove '/vagrant': Device or resource busy
    

    इसके बाद यह शेल प्रॉम्प्ट में वापस आ जाता है जैसे कुछ भी नहीं हुआ है, लेकिन आप अभी बनाए गए कुछ के अलावा किसी भी कमांड को निष्पादित नहीं कर सकते हैं kill, इसलिए आप अपनी नौकरी समाप्त कर सकते हैं और अपने सत्र को मार सकते हैं :)

    उदाहरण के लिए:

    $ rm
    rm: command not found
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    $ which kill
    -bash: /usr/bin/which: No such file or directory
    $ kill -9 $$
    Connection to 127.0.0.1 closed.
    

इसलिए इसने सभी चीजों को हटा दिया, जिसमें शामिल हैं rm, lsऔर अन्य सभी कमांड, लेकिन फिर भी आप लॉग-इन कर रहे हैं। कुछ विशेष फ़ोल्डर हैं, जिन्हें इस तरह के कुछ उपकरणों से हटाया नहीं गया था /dev, /procया /sysजो नियमित निर्देशिका / फाइलें नहीं हैं, लेकिन यह छद्म-फाइलसिस्टम है जो प्रक्रिया और कर्नेल डेटा को इंटरफेस प्रदान करता है।

यदि आपके पास वैग्रैंट या लिनक्स नहीं है, तो आप कुछ जावास्क्रिप्ट लिनक्स x86 एमुलेटर के साथ खेल सकते हैं ।

यदि आप ऐसी आपदा से उबरने की संभावनाओं में रुचि रखते हैं, तो जाँच करें:

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