سؤال إلى أي مدى ستحصل على أمر "rm -rf /"؟


لقد تساءلت في كثير من الأحيان إلى المدى الذي سيحصل عليه النظام في الواقع إذا قمت بتشغيل rm -rf /. أشك في أن نظام التشغيل سيكون قادرا على محو نفسه (؟)

السؤال مكافأة: بعد تنفيذ الأمر ، سوف rm أزلت نفسها؟

تحديث: لقد اختبرت هذا في بضعة توزيعات يونكس الرئيسية باستخدام VirtualBox والإجابات تصف بالضبط ما يحدث. إذا أعطيت المعلمات الصحيحة ، فإن rm سيزيل كل جزء مادي من البيانات على القرص. ومع ذلك ، واجهت بعض المشكلات عند استخدام إصدار rm بخلاف إصدار GNU. على سبيل المثال ، أعتقد أن لدى BusyBox نسخته الخاصة ولا يسمح لك بإزالة أكبر قدر ممكن.

كان هذا السؤال سؤال المستخدم الفائق لهذا الأسبوع.
  اقرأ 7 يوليو 2011 دخول بلوق لمزيد من التفاصيل أو أرسل ملكك سؤال الاسبوع.


199
2017-07-20 13:48


الأصل


من المضحك أنك طرحت هذا السؤال. كنت فقط أجيب على سؤال آخر - سؤال حول منتدى آخر وبدأت أتذكر مقالاً قرأته مرة أخرى. لحسن الحظ أنني أنقذته لمثل هذه الأوقات: ال قصة رعب يونكس الكلاسيكية إلى جانب حقيقة أنه من المثير للاهتمام أن نرى إلى أي مدى ستذهب ... أعتقد أنه مقال مكتوب بشكل جيد جدا وقراءة جيدة بشكل عام! - akseli
لقد حاولت للتو sudo rm -rf / على tinycore / microcore linux ويبدو أن نظام التشغيل يحمي العديد من الدلائل (/ sys وغيرها) من يتم حذفها. - n0pe
حاولت rm -f /bin/rm ذات مرة. للأسف ، نجحت ، وقضيت الساعة القادمة في الحصول على الإصدار الصحيح من rm العودة من غنو coreutils. - squircle
انتظر ثانية ، سأحاول ... - Martijn Courteaux
أفعل هذا في متجر أبل طوال الوقت - eggie5


الأجوبة:


اذا كنت تمتلك rm من نواة غنو (على الأرجح إذا كانت توزيعة لينكس عادية) ، rm -rf / سيتم رفض الحماية المضمنة (وفقا ل manpage و Wikipedia ، لم يجرب ذلك).

يمكنك تجاوز هذه الحماية مع --no-preserve-root. rm سيزيل بعد ذلك كل شيء ممكن ، دون التوقف بعد محاولة إزالة كل ملف واحد. بالطبع لن يزيل أنظمة الملفات الظاهرية مثل /proc و /sys، ولكن هذا غير ذي صلة - سيزيل كل شيء على القرص.

بعد انتهاء الأمر ، سيتم مسح القرص ، بما في ذلك نظام التشغيل. سيستمر تشغيل النواة والعمليات الحالية من الذاكرة ، لكن العديد من العمليات سوف تموت لأنها ستفشل في الوصول إلى بعض الملفات. سوف يفشل نظام التشغيل في التمهيد في المرة القادمة.


188
2017-07-20 14:36



بالضبط ما كنت أبحث عنه. الآن لاستخدام هذه السلطة لأخذ أكثر من العالم. - n0pe
+1 خاصة من أجل --no-preserve-root لأن هذا عادة لا يذكر. - Matěj G.
MaxMackie ، من الجدير بالذكر أن المتسللين وجدت بسرعة هذا ليكون الأقل شيء مفيد يمكنهم القيام به للمستخدم. إنه يدمر أي بيانات يمكن استخدامها لتحقيق مكاسب نقدية ، ويمنع الهاكر من استغلال الماكينة بشكل أكبر. مثل القطة ذات الحشرة ، أنت لا تريد أن تقتلها ، فأنت تريد فقط اللعب معها لفترة من الوقت لأنها ممتعة. - zzzzBov
للإجابة على سؤال OP آخر ، نعم RM سوف يزيل نفسه. من الممكن تمامًا تعديل أو حذف أحد الملفات القابلة للتنفيذ حتى وإن كان هناك مثيل لها قيد التشغيل. وسوف يستمر في العمل أيضًا ، ولن يتأثر بالتغيير. - thomasrutter
أود أن أذكر "chmod -R user: user *" على / ، لأنه أيضًا خطأ عودي ومكلف. فعلت ذلك مرة واحدة ، وكان قد حصلت في منتصف الطريق / المنزل في الوقت الذي أتمكن من إجهاض. تم امتلاك / bin / boot / etc / dev. ولحسن الحظ ، استمر الخادم في العمل بينما قضيت الساعات القليلة التالية يدويًا وأعد تعيين المالكين من نظام مرجعي. ومع ذلك ، يمكن لأي شخص آخر استخدام سو أو سودو بعد ذلك. اكتشف في نهاية المطاف أن / بن / سو لم يعد لديها مجموعة بت setuid. تأخذ ملاحظة للمستقبل: chowning / bin / su يعيد تعيين بت setuid! - Andy Lee Robinson


بالنسبة لأولئك الذين يحبون القيام بأشياء كهذه بصريا أثناء الاستماع إلى موسيقى تكنو.

تشغيل rm- rf على Linux (فيديو)

نقاط المكافأة إذا كان يمكنك تسمية العمليات عند بدء الموت.


41
2017-07-20 23:23





إعداد VM ومحاولة للمتعة؟

سوف تذهب بعيدا جدا ... إذا كنت تستخدم واجهة المستخدم الرسومية قد يكون لديك متعة تلاحظ الأشياء تتحلل بشكل أكثر وضوحا. (أيقونات على القوائم تتوقف عن التحميل إلخ)

إذا تركتها ، فإن نظام التشغيل سيتعافى إلى حد كبير على الرغم من أنك قد تتمكن من استعادة بعض البيانات بسهولة.

وفي كلتا الحالتين ، ستحتاج إلى إجراء إعادة تثبيت لنظام التشغيل.


22
2017-07-20 13:52



لم أفكر حتى في تجربتها في جهاز VM. ذاهب لمحاولة الآن! هذا أمر ممتع. - n0pe
يكتب عن طريق الخطأ الأمر إلى المحطة الطرفية للنظام المضيف - slhck
اطلع على المقالة التي نشرتها. "قصة الرعب الكلاسيكية يونكس!" - akseli
أنا في العمل الآن وليس لدي الوقت للذهاب من خلال تثبيت كامل من توزيعة شعبية (أوبونتو / سكاكي / سوس / فيدورا). إذا كان بإمكان أي شخص آخر استنساخ ملف قرص VM وتجربته لنا ، فسيكون الأمر رائعًا. - n0pe
مع Amazon EC2 ، يجب أن يكون سريعا لإطلاق واحدة من AMI الخاصة بهم التي لديها بالفعل تثبيت لينكس وإطلاق النار ... - David d C e Freitas


حسنا ، في محاولة على http://bellard.org/jslinux/ ينتج عنه:

rm: لا يمكن إزالة "/ dev / pts": مشغول أو مورد
  rm: لا يمكن إزالة "/ dev": الدليل ليس فارغًا
  rm: لا يمكن إزالة "/ proc / swaps": العملية غير مسموح بها
  rm: لا يمكن إزالة "/ proc / kallsyms": العملية غير مسموح بها
  rm: لا يمكن إزالة "/ proc / dma ': العملية غير مسموح بها

SNIP 881 إدخالات

rm: لا يمكن إزالة "/ proc / 149 / oom_adj ': تم رفض الإذن
  rm: لا يمكن إزالة "/ proc / 149 ': العملية غير مسموح بها
  rm: لا يمكن إزالة '/ proc': مشغول أو مورد
  rm: لا يمكن إزالة '/ tmp': مشغول أو مورد
  rm: لا يمكن إزالة '/': مشغول أو مورد


11
2017-07-20 14:23



نعم أحصل على هذه الأخطاء / التحذيرات أيضًا. هل هذا المعيار هو رأيك؟ - n0pe
/ proc ، / sys ، وأحيانًا / dev ، وأي نقاط تحميل هي خصائص نظام التشغيل ولا يمكن حذفها. - pjc50
متفق مع @ pcj50 ، تلك ليست حرفيا الملفات على القرص الصلب ، لذلك "حذف" لهم ليست ذات مغزى. - CarlF


أذكر أن هذا يمضغ على alt.sysadmin.recovery مرة أخرى في أيام من العصور ، عندما لم يكن هناك شيء من هذا القبيل /procو /dev كان مجرد دليل منتظم يحتوي على إدخالات لحفنة من inodes غير عادي ...

... ولكن ، على بعض المتغيرات من يونيكس (تذكر بلدي هو HP-UX ، ولكن هذا يمكن أن يكون خاطئ تماما) ، هل يمكن ليس قم بإزالة إدخال الدليل الأخير لبرنامج تم تشغيله. (المكتبات المشتركة؟ ما هي تلك؟)

على مثل هذه الأنظمة ، إذا بدأت واحدة في وضع الصيانة (حتى لا يتم تشغيل أي شيء ولكن صدفة الخاص بك ، ولا حتى init، ولم يتم تركيب أي أنظمة ملفات ثانوية) وفعلت exec /bin/rm -rf /، سيتم تركك مع نظام ملفات جذر فارغ تمامًا إلا أن /bin و /bin/rm سوف البقاء على قيد الحياة.

اعتبر المقيمون من دير الشيطان مخيف هذا مناسبا وسليم.


7
2017-07-21 00:06





rm -rf / لا ينبغي السماح بها في عمليات التنفيذ الأخيرة حيث تم اقتراح أنها تنتهك معيار POSIX:

"rm -rf /"الحماية على مدونة أوراكل

على أي حال ، في النهاية ، حصلنا على المواصفات المعدلة ، و Solaris 10 لديها (منذ بناء 36) نسخة من / usr / bin / rm (/ bin هو رابط sym-link إلى / usr / bin على Solaris) و / usr / xpg4 / bin / rm التي تتصرف هكذا:

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

4
2017-07-20 15:58



"بالإشارة إلى أنه إذا حاول أحد إزالة" / "بشكل متكرر ، سيحاول أحدهم في نهاية المطاف إزالة" .. "و". "، وأن كل ما نفعله هو السماح لـ rm بتحديد هذا الأمر بشكل تجريبي مسبقًا. ! "- إيه ، لن يمنع ذلك من الإزالة أي دليل؟ المواصفات الفعلية فقط لا تسمح .. و. في حجج سطر الأوامر الفعلية ، لا يقول أي شيء حول ما "تحاول إزالته في النهاية" - Random832
لماذا لا تسمح بإزالة أي دليل؟ الدليل الجذر هو المعني الوحيد هنا وإزالته يعني بوضوح إزالة "." و ".." ، أيا كان الدليل الحالي. لا يحرم المنطق السليم في التفسير القياسي. - jlliagre
هذا الخط من الجدل هو عبقري خالص. - Nate C-K
تحدد المواصفة القياسية أنه لا يُسمح بمواصلة rm إذا كانت الوسيطة تحتوي على السلسلة "." أو ".." كمكون basename. لا يمكنك إزالته /foo/.. حتى لو لم تكن /foo. نعم هو كذلك ليس حدد أنه غير مسموح لك بإزالة الدليل الحالي (على سبيل المثال ، rm -r `pwd`) أو أصل الدليل الحالي. - Random832
في الواقع ، أنا أساءت فهم البيان وأنت على صواب. ومن المأمول أن يقبل الأشخاص المعتادين السلوك الأكثر ذكاءً باعتباره متوافقًا معياريًا. ستؤدي إزالة أجزاء كبيرة إن لم يكن كل نظام الملفات إلى جعل نظام التشغيل غير متوافق بشكل قياسي على أي حال. - jlliagre


نقطة واحدة لم أشاهدها من قبل أي شخص آخر: الملفات المفتوحة حاليًا (على سبيل المثال rm نفسه) ، حتى إذا تم حذفها ، لن تختفي فعليًا محرك الأقراص حتى يتم إغلاقه.


3
2017-07-20 17:12



هذا صحيح ، لأنه يتم تحميلها في الذاكرة أليس كذلك؟ - n0pe
لست متأكدا ما إذا كان ذلك آمنًا أم لا ؛ يمكن للنواة أن تحمِّل الملف الذي تمت إزالته إلى الذاكرة وأن تزيله على القرص على الفور ، وتحفظ هذه النسخة في الذاكرة حتى يفتح الملف (على سبيل المثال ، حتى يتم تشغيل rm). - Ambroz Bizjak
أنا لا أتكهن إذا كان البرنامج قيد التشغيل ، فلن يؤدي حذفه إلى إزالته على مربعات Linux الخاصة بي ، على الأقل. (تذكر أني لم أختبر هذا في ، أو ، بضع سنوات). - CarlF
rm  سوف إزالة نفسها من FS - برنامج يتم تحميلها بالكامل في الذاكرة ، وليس ملف - warren
MaxMackie: ليس بسبب تحميلها في الذاكرة ، ولكن نظرًا لأن مرجع الملف المفتوح له نفس قوة الارتباط الثابت (بمعنى إذا كان الملف يحتوي على رابط ثابت واحد على الأقل ، فلن يتم حذفه من القرص). - Lie Ryan


لأنها حاولت مرة واحدة (على خادم أن ما التبول لي قبالة) ، تسجيل كجذر ، في المحطة ، فسوف تفقد كل شيء تقريبا. الشيء الوحيد الذي لن يتم مسحه سيكون فقط العملية التي كانت ضرورية لنظام التشغيل.


1
2017-07-20 13:55



"[لم تمحى] فقط العملية التي كانت ضرورية لنظام التشغيل" - أوه ، لا تقلق. على عكس Windows ، سوف يقوم Linux بمحو أي شيء بسعادة ، حتى إذا كان الملف نظامًا أساسيًا و في الاستخدام. /boot، /sbin، /etc، /bin، /vmlinuz؟ بام ، ذهب. حظا سعيدا دون هذه التمهيد - في الواقع ، حظا سعيدا القيام به اى شى على الإطلاق بمجرد الانتهاء من الحذف. - Piskvor
إذا كنت أتذكر أنه كان هناك بعض الملفات التي لم يتم حذفها ، وأسمح لي بتشغيل لينكس لأكثر من 4 ساعات. ولكن لا يزال ، من الجيد معرفة ما يحدث ، مثل إجراء chmod 777 / * -fR؛) - Anarko_Bizounours
"chmod 777 / * -fR" - يجب أن يجعل هذا النظام غير آمن للغاية ، على الرغم من أنه سهل الاستخدام للغاية. - Bart van Heukelom
BartvanHeukelom ، بعض الأدوات ستقوم بإجراء اختبار ذاتي سريع ، أو يتم اختبارها من قبل النظام للحصول على الملكية والأذونات الصحيحة وترفض التصرف إذا تم تكوينها. - killermist
chmod -fR 777 / ضار لأنه يطفئ البتات setuid و Setgid. - G-Man