อะไรคือเหตุผลของลำดับ“ rm” ที่เฉพาะเจาะจงในมุกตลก xkcd?


14

นี่เป็นส่วนหนึ่งของxkcd comic stripซึ่งความคิดคือผู้เขียนไม่สามารถเขียนโปรแกรมเรียงลำดับได้ดังนั้นเขาจึงเพิ่มรหัสเพื่อลบไฟล์ทั้งหมด

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

AFAIK วิธีที่เป็นที่นิยมในการลบทุกอย่างคือเพื่อrm /ให้ทุกอย่างที่เริ่มต้นจากรูทถูกลบ นี่คือคำสั่งสุดท้ายและคำสั่งสองคำสั่งก่อนหน้านั้นลองไปrmที่ไดเรกทอรีปัจจุบันและเนื้อหาของโฮมไดเรกทอรี

ทำไมไม่เพียงrm /?

คำตอบ:


19

หากคุณเริ่มต้นที่ด้านบนสุดอาจเป็นไปได้ว่าคุณจะต้องกำจัดสิ่งที่rm(หรือส่วนที่สำคัญอื่น ๆ ของระบบ) ต้องดำเนินการต่อไปและความชั่วร้ายจะไม่สมบูรณ์

คำสั่งเหล่านี้จะทำให้แน่ใจว่าอย่างน้อย cwd และโฮมไดเร็กตอรี่ของผู้ใช้นั้นจะหายไปก่อนที่จะไปทำงานกับนิวเคลียร์


5
JFTR เป็น rm ถูกโหลดใน mem ควรทำงานและทำงานต่อไปแม้ว่าตัวแปรที่จำเป็นจะถูกลบออก หลังจากคุณเรียกใช้rm -rf /จากเซสชันแบบโต้ตอบเชลล์ของคุณควรทำงานต่อไป
Ulrich Dangel

8
rms ล่าสุดจะล้มเหลวในคำสั่งสุดท้ายด้วยrm: it is dangerous to operate recursively on ‘/’; นอกเหนือจากนั้นrmไม่ต้องการการเข้าถึงทรัพยากรใด ๆ หลังจากการเริ่มต้น เหตุผลในการใช้หลายคำสั่งอาจเป็นเพราะผู้ใช้อาจมีสิทธิ์การเข้าถึงที่แตกต่างกันในไดเรกทอรี
Stéphane Gimenez

@UlrichDangel ผมพบว่าวิธีที่ยากบน Solaris กลับเวลานาน ...
vonbrand

1
มันจะ. คุณต้องใช้rm --no-preserve-root /เพื่อให้สิ่งนี้ใช้งานได้จริง
Max

1
คำสั่งเหล่านี้จะทำให้แน่ใจว่าอย่างน้อย cwd และโฮมไดเร็กตอรี่ของผู้ใช้นั้นจะหายไปก่อนที่จะไปทำงานกับนิวเคลียร์ ถ้าเราเรียกใช้สคริปต์นั้นเมื่อเราอยู่ใน "/ bin /" :) สองคำสั่งสุดท้ายจะไม่ทำงานเลย
XzKto

8

เพียงเพื่อแสดงระดับการทำลายล้างที่เพิ่มขึ้น: ลบไดเรกทอรีปัจจุบันจากนั้น$HOMEก็ทำลายทั้งหมดในที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.