มีสถานการณ์ที่จำเป็นต้องใช้ rm -rf -no-keep-root หรือไม่?


27

ฉันได้เห็นคำถามบางอย่างเกี่ยวกับที่นี่ที่ผู้คนทำโดยบังเอิญrm -rf --no-preserve-rootหรือrm -rf *เช็ดออกระบบไฟล์ส่วนใหญ่หรือทั้งหมดก่อนที่พวกเขาจะตอบสนอง

มีเหตุผลในการใช้งาน--no-preserve-rootไม่ว่าจะเป็นการใช้งานปกติในฐานะผู้พัฒนาหรือในฐานะผู้ดูแลระบบหรือไม่?


4
ฉันไม่สามารถจินตนาการถึงกรณีที่มีประโยชน์ใด ๆ ... ฉันคิดว่าตัวเลือกนี้มีอยู่เพื่อรับหลักการของยูนิกซ์เท่านั้น (ในแง่ของการรักษาสิ่งเดียวกันโดยไม่มีข้อยกเว้น) คุณอาจต้องการข้อยกเว้นในกรณีของ/แต่ส่วนใหญ่เป็น "กรณีทั่วไป" ยังคงเป็นตัวแทน กล่าวอีกนัยหนึ่ง: »ไม่ใช่หน้าที่ของคอมพิวเตอร์ที่จะบอกฉันว่าต้องทำอะไร«และมันก็ไม่ควร
Andreas Wiese

มันมีอาวุธที่เป็นไปได้ที่จะใช้เมื่อ SkyNet เข้าครอบครอง
Mitch Dart

คำตอบ:


26

สำคัญ:ระบบ UEFI ที่ทันสมัยจะเมาท์เฟิร์มแวร์ภายใต้/sysไดเรกทอรีและทำให้พร้อมใช้งานกับระบบปฏิบัติการ ห้ามรันคำสั่งนี้บนระบบที่ทันสมัยเพราะมันจะลบเฟิร์มแวร์นี้โดยเฉพาะการก่ออิฐเครื่องของคุณ


สถานการณ์ที่ง่ายที่สุดที่ฉันนึกได้คือคนที่ต้องการลบข้อมูลทั้งหมดออกจากไดรฟ์ อาจมีเหตุผลที่ถูกต้องอย่างสมบูรณ์ในการทำสิ่งนี้และวิธีที่ง่ายที่สุดที่ฉันคิดคือ

rm -rf --no-preserve-root /

ปรากฎว่าสิ่งนี้ได้รับจริงเป็นตัวอย่างในinfo rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

อีกเหตุผลที่ดีสมบูรณ์แบบคือการที่คุณต้องการที่จะลบไฟล์ระบบติดตั้งที่คุณได้chrootเข้า -ed ในกรณีนั้นrm -rf --no-preserve-root /จะลบระบบในchrootสภาพแวดล้อม แต่จะทำให้ระบบของคุณไม่เสียหาย

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

อย่างไรก็ตามนี่เป็นข้อ จำกัด ที่ค่อนข้างใหม่มันถูกเพิ่มเข้ามาในข้อมูลจำเพาะ POSIX รุ่นที่ 7 (อันก่อนหน้านี้อยู่ที่นี่) ก่อนหน้านั้นrm -rf /เป็นคำสั่งที่ถูกต้องสมบูรณ์ ในบันทึกประวัติ.และ..ไดเรกทอรีได้รับการปกป้องจากrmตลอดมาตั้งแต่ปี 1979 เมื่อrmได้รับความสามารถในการลบไดเรกทอรีครั้งแรก เพิ่มเติมเกี่ยวกับที่นี่


21
อย่าใช้สิ่งนี้เพื่อลบข้อมูลทั้งหมดหากระบบของคุณเป็น UEFI (คอมพิวเตอร์เครื่องใหม่) การทำเช่นนี้จะลบตัวแปรเฟิร์มแวร์ทั้งหมดและทำให้เมนบอร์ดไม่มีประโยชน์เหมือนอิฐ
Suici Doga

5
@SuiciDoga: ที่มาหรือคำอธิบายเพิ่มเติม? ไม่ควรจัดเก็บเฟิร์มแวร์เมนบอร์ดบน HDD มิฉะนั้นจะหายไปหากคุณดึงไดรฟ์ออก
Tarka

15
@Tarka: / sys / firmware / efi / efivars / อาจถูกเมาท์และการลบซ้ำอาจลบ vars เหล่านั้นออก มันไม่ควรจะสร้างระบบ แต่เป็นไปได้ ดูthenextweb.com/insider/2016/02/01/...
cyanic

4
@Tarka พวกเขาไม่ได้เก็บไว้ใน HDD และการดึงไดรฟ์จะไม่ส่งผลกระทบต่อพวกเขา /แต่สำหรับเหตุผลที่ฉันยังไม่เข้าใจพวกเขาจะติดตั้งเพื่อให้อยู่ภายใต้การเข้าถึงได้จริง
terdon

20
วิธีที่ถูกต้องในการทำให้ไดรฟ์ว่างเปล่าคือการฟอร์แมตพาร์ติชันใหม่ (หรือแบ่งพาร์ติชันโดยรวม) ระบบไฟล์บางระบบอาจไม่ใช่ฮาร์ดดิสก์ดังนั้นการใช้rm -rf /คุณอาจทำให้เครื่องระยะไกลว่างเปล่าผ่านการเมานต์ NFS / CIFS / SSHFS ของใครบางคน
Score_Under

12

การมีอยู่ของ--no-preserve-rootสวิตช์ไม่ได้เป็นการเพิ่มฟังก์ชันการทำงานเพิ่มเติม แต่เพื่อแทนที่การลดการใช้งานอย่างมีสติ สวิตช์นี้มีแนวโน้มที่จะขึ้นอยู่กับปรัชญาที่คอมพิวเตอร์ควรทำในสิ่งที่ได้รับการบอกกล่าวและคำสั่งนั้นควรมีไว้เพื่อแสดงการกระทำที่ต้องการ สวิตช์นี้ pre-date UEFI และจากประสบการณ์ของฉันฉันบอกว่ามันล้าสมัย

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

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

เชิงอรรถที่สนุกสนาน: การป้องกันไม่ใช่ความตั้งใจ สำหรับบล็อก Sun Microsystems การลบ/ไดเรกทอรีจะเป็นการลบไดเรกทอรีการทำงานปัจจุบันโดยปริยายซึ่งเป็นการละเมิดข้อพิจารณาพิเศษที่ได้ทำไว้แล้วสำหรับไดเรกทอรี.และ ..นี่คือเหตุผลที่คณะกรรมการมาตรฐานของพวกเขาอนุญาตข้อยกเว้นพิเศษนี้ - ไม่ใช่เพื่อป้องกันอุบัติเหตุ การเปลี่ยนแปลงนี้เริ่มใช้กับ Solaris 10 build 36

http://archive.is/5lmc9


ขอบคุณสำหรับลิงค์! หวังว่าจะได้รับการกล่าวถึงในอดีตเนื่องจากฉันสงสัยว่าสาเหตุของการเปลี่ยนแปลงคืออะไร
Cameron Gagnon

ข้อมูลเพิ่มเติมที่น่าสนใจ - ขอบคุณ
มาร์ค

1

บางทีนี่อาจไม่ใช่คำตอบที่ผู้ถามดั้งเดิมต้องการ แต่มีกรณีการใช้งานที่ต้องการลบไฟล์ทั้งหมดซ้ำจากไดเรกทอรีราก แม้ว่ามันจะไม่ผ่านrmคำสั่ง แต่เป็นส่วนหนึ่งของกระบวนการswitch_root (8)ในระหว่างการบูทระบบลินุกซ์ของคุณ

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