सवाल आप 'आरएम-आरएफ /' कमांड के साथ कितने दूर होंगे?


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

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

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

यह सवाल एक था सप्ताह के सुपर उपयोगकर्ता प्रश्न
  7 जुलाई, 2011 को पढ़ें ब्लॉग प्रविष्टि अधिक जानकारी के लिए या अपना खुद का जमा करें सप्ताह का प्रश्न


199
2017-07-20 13:48


मूल


यह मजाकिया है कि आपने इस सवाल से पूछा। मैं सिर्फ एक और मंच पर एक और आरएम-एफ सवाल का जवाब दे रहा था और कुछ समय पहले पढ़ा गया एक लेख याद करना शुरू कर दिया था। सौभाग्य से मैंने इसे इस तरह के समय से बचाया:  क्लासिक यूनिक्स डरावनी कहानी इस तथ्य के अलावा कि यह देखना दिलचस्प है कि यह कितना दूर जाएगा ... मुझे लगता है कि यह एक बहुत अच्छी तरह से लिखा लेख है और आमतौर पर एक अच्छा पढ़ा जाता है! - akseli
मैंने अभी कोशिश की है sudo rm -rf / tinycore / microcore linux पर और ऐसा लगता है कि ओएस कई निर्देशिकाओं (/ sys और अन्य) को हटाए जाने से बचाता है। - n0pe
मैंने कोशिश की rm -f /bin/rm एक बार। दुर्भाग्यवश, यह काम करता था, और मैंने अगले घंटे का सही संस्करण प्राप्त किया rm जीएनयू कोरुटल्स से वापस। - squircle
एक सेकंड रुको, मैं कोशिश करूंगा ... - Martijn Courteaux
मैं इसे हर समय सेब स्टोर में करता हूं - eggie5


जवाब:


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

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

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


188
2017-07-20 14:36



ठीक वही जो मेरे द्वारा खोजा जा रहा था। अब दुनिया भर में लेने के लिए इस शक्ति का उपयोग करने के लिए। - n0pe
विशेष रूप से +1 के लिए +1 --no-preserve-root क्योंकि आमतौर पर इसका उल्लेख नहीं किया जाता है। - Matěj G.
@ मैक्समैकी, यह ध्यान देने योग्य है कि हैकर्स को यह बहुत जल्दी मिला कम से कम उपयोगी उपयोगकर्ता वे उपयोगकर्ता को कर सकते हैं। यह किसी भी डेटा को नष्ट कर देता है जिसका उपयोग नकदी लाभ के लिए किया जा सकता है, और हैकर को मशीन का और शोषण करने से रोकता है। एक कीट के साथ एक बिल्ली की तरह, आप इसे मारना नहीं चाहते हैं, आप बस थोड़ी देर के लिए खेलना चाहते हैं क्योंकि यह मजेदार है। - zzzzBov
ओपी के दूसरे प्रश्न का उत्तर देने के लिए, हाँ आरएम खुद को हटा देगा। निष्पादन योग्य को संशोधित या हटाने के लिए पूरी तरह से संभव है, भले ही इसे चलाने का एक उदाहरण हो। यह भी चल रहा है, और परिवर्तन से अप्रभावित होगा। - thomasrutter
मैं "chmod -R उपयोगकर्ता: उपयोगकर्ता *" का उल्लेख करना चाहता हूं, क्योंकि यह भी एक पुनरावर्ती और महंगी गलती है। मैंने इसे एक बार किया था, और जब तक मैं निरस्त हो सकता था तब तक आधा रास्ते / घर आ गया था। / बिन / बूट / आदि / देव स्वामित्व में थे। सौभाग्य से सर्वर चल रहा था जबकि मैंने अगले कुछ घंटों को मैन्युअल रूप से बिताया और संदर्भ प्रणाली से स्वामित्व को रीसेट कर दिया। हालांकि, बाद में कोई भी सु या सूडो का उपयोग नहीं कर सकता था। आखिरकार पता चला कि / bin / su के पास इसके सेट्यूड बिट सेट नहीं थे। भविष्य के लिए नोट लें: चोइंग / बिन / सु इसके सेट्यूड बिट को रीसेट करता है! - Andy Lee Robinson


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

लिनक्स पर आरएम-आरएफ चलाना (वीडियो)

बोनस पॉइंट्स यदि आप प्रक्रियाओं को नाम दे सकते हैं क्योंकि वे मरना शुरू कर देते हैं।


41
2017-07-20 23:23





एक वीएम सेट अप करें और मज़े की कोशिश करें?

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

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

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


22
2017-07-20 13:52



मैंने वीएम में कोशिश करने के बारे में भी सोचा नहीं था। अभी कोशिश करने जा रहे हैं! ओह यह मजेदार है। - n0pe
गलती से मेजबान सिस्टम के टर्मिनल को आदेश लिखता है - slhck
मैंने पोस्ट किया गया लेख देखें। "क्लासिक यूनिक्स डरावनी कहानी!" - akseli
मैं अभी काम पर हूं और एक लोकप्रिय डिस्ट्रो (उबंटू / स्लैक / सस्से / फेडोरा) के पूर्ण इंस्टॉल के माध्यम से जाने का समय नहीं है। अगर कोई और वीएम डिस्क फ़ाइल क्लोन कर सकता है और इसे हमारे लिए आज़मा सकता है, तो यह बहुत ही अच्छा होगा। - n0pe
अमेज़ॅन ईसी 2 के साथ इसे अपने एएमआई में से एक को आग लगाना चाहिए कि पहले से ही लिनक्स स्थापित है और आग लग गई है ... - David d C e Freitas


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

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

एसएनआईपी 881 प्रविष्टियां

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


11
2017-07-20 14:23



हाँ मुझे उन त्रुटियों / चेतावनियां भी मिलती हैं। क्या यह मानक आपको लगता है? - n0pe
/ proc, / sys, कभी-कभी / dev, और किसी भी माउंट पॉइंट ऑपरेटिंग सिस्टम के गुण होते हैं और हटाया नहीं जा सकता है। - pjc50
@ Pcj50 से सहमत, वे सचमुच हार्ड डिस्क पर फ़ाइलें नहीं हैं, इसलिए उन्हें "हटाना" अर्थपूर्ण नहीं है। - CarlF


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

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

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

डरावनी शैतान मठ के denizens यह उचित और उचित होने के लिए माना जाता है।


7
2017-07-21 00:06





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

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

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

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

4
2017-07-20 15:58



"यह इंगित करते हुए कि अगर कोई" / "रिकर्सिवली को हटाने का प्रयास करता है, तो आखिरकार" .. "और"। "को हटाने का प्रयास किया जाएगा, और हम जो भी कर रहे हैं वह आरएम को इस सिद्धांत को पूर्व निर्धारित करने की इजाजत दे रहा है। आश्चर्यजनक रूप से, उन्होंने खरीदा ! "- एर, वह हटाने की अनुमति नहीं देगा कोई भी निर्देशिका? वास्तविक कल्पना केवल अस्वीकार .. और। वास्तविक कमांड लाइन तर्कों में, यह "आखिरकार निकालने का प्रयास" के बारे में कुछ भी नहीं कहता है - Random832
यह किसी भी निर्देशिका को हटाने की अनुमति क्यों नहीं देगा? मूल निर्देशिका केवल एकमात्र चिंतित है और इसे स्पष्ट रूप से हटाने का अर्थ है "।" और "..", जो भी वर्तमान निर्देशिका है। मानक व्याख्या में सामान्य ज्ञान वर्जित नहीं है। - jlliagre
तर्क की वह पंक्ति शुद्ध प्रतिभा है। - Nate C-K
मानक निर्दिष्ट करता है कि आरएम जारी रखने की अनुमति नहीं है अगर एक तर्क में स्ट्रिंग है "।" या ".." बेसनाम घटक के रूप में। आप हटा नहीं सकते /foo/.. भले ही आप अंदर न हों /foo। ऐसा होता है नहीं निर्दिष्ट करें कि आपको वर्तमान निर्देशिका को हटाने की अनुमति नहीं है (उदा। rm -r `pwd`) या वर्तमान निर्देशिका के माता-पिता। - Random832
वास्तव में, मैंने कथन को गलत समझा और आप सही हैं। उम्मीद है कि मानक लोगों ने मानक अनुपालन के रूप में बेहतर व्यवहार स्वीकार कर लिया है। बड़े हिस्सों को हटाकर यदि सभी फाइल सिस्टम जल्दी से ओएस को मानक मानक बनाते हैं तो वैसे भी। - jlliagre


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


3
2017-07-20 17:12



यह सही है, क्योंकि वे स्मृति में ठीक से लोड हो गए हैं? - n0pe
मुझे यकीन नहीं है कि यह मानना ​​सुरक्षित है; कर्नेल बहुत अच्छी तरह से हटाए गए फ़ाइल को मेमोरी में लोड कर सकता है और इसे डिस्क पर तुरंत हटा सकता है, और जब तक फ़ाइल खुलती नहीं है तब तक यह इन-मेमोरी कॉपी रखें (उदाहरण के लिए आरएम चल रहा है)। - Ambroz Bizjak
मैं अनुमान लगा रहा हूँ। यदि कोई प्रोग्राम चल रहा है, तो इसे हटाने से इसे कम से कम मेरे लिनक्स बॉक्स पर नहीं हटाया जाता है। (मुझे याद है कि मैंने इसका परीक्षण नहीं किया है, ओह, कुछ साल।) - CarlF
rm  मर्जी खुद को एफएस से हटा दें - द कार्यक्रम स्मृति में पूरी तरह से लोड किया गया है, नहीं फ़ाइल - warren
@MaxMackie: ऐसा नहीं है क्योंकि वे स्मृति में लोड होते हैं, लेकिन क्योंकि एक खुले फ़ाइल संदर्भ में हार्ड-लिंक के समान शक्ति होती है (यानी यदि फ़ाइल में कम से कम एक हार्ड लिंक है, तो यह डिस्क से नहीं हटाया जाएगा)। - Lie Ryan


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


1
2017-07-20 13:55



"[मिटा नहीं गया] केवल उस प्रक्रिया को जो ओएस के लिए आवश्यक था" - ओह, चिंता न करें। विंडोज के विपरीत, लिनक्स खुशी से कुछ मिटा देगा, भले ही फ़ाइल ओएस-क्रिटिकल हो तथा उपयोग में। /boot, /sbin, /etc, /bin, /vmlinuz? बाम, चला गया। शुभकामनाएं उन लोगों के बिना बूटिंग - वास्तव में, शुभकामनाएं कर रही हैं कुछ भी एक बार हटाए जाने के बाद। - Piskvor
अगर मुझे याद है कि कुछ फाइलें हटा दी गई थीं, और मैंने अपने लिनक्स को 4 घंटे से अधिक समय तक चलने दिया। लेकिन फिर भी, यह जानना अच्छा होता है कि क्या होता है, जैसे कि chmod 777 / * -fR करना;) - Anarko_Bizounours
"chmod 777 / * -fR" - यह सिस्टम को बहुत ही असुरक्षित बना सकता है, हालांकि बहुत उपयोगकर्ता के अनुकूल है। - Bart van Heukelom
@ BartvanHeukelom, कुछ उपकरण त्वरित स्व-परीक्षण करेंगे, या सिस्टम द्वारा उचित स्वामित्व और अनुमतियों के लिए परीक्षण किया जाएगा और अगर malconfigured कार्य करने से इंकार कर दिया जाएगा। - killermist
chmod -fR 777 / हानिकारक है क्योंकि यह सेटुइड और सेटगिड बिट्स को बंद कर देता है। - G-Man


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

लेकिन अपने मूल प्रश्न का उत्तर देने के लिए, हाँ - 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 अनुकरणक

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


1
2017-09-27 15:17