rm -rf ทำอะไร?


25

สิ่งที่ไม่rm -rfควรทำเมื่อใช้ในการลบไฟล์หรือไดเรกทอรี?

วิธีทำ-rและ-fตัวเลือกการทำงานร่วมกัน?



16
@DanDascalescu เพราะมันเป็นคำตอบเล็กน้อยโดยการอ่านหน้าคนซึ่งควรจะเป็นพอร์ตแรกของใครก็ได้ที่จะตอบคำถามเช่นนี้
David Richerby

9
ลองและดู (สปอยเลอร์: ทำไม่ได้)
imallett

3
โดย Golly! คำถามนี้ต้องเป็นเรื่องตลกจาก DevRobot! คุณจะทำให้ระดับกรรมของคุณเป็นไปได้อย่างไรโดยไม่ปรึกษากับหน้าคน ตอนนี้ ... คุณเป็นมนุษย์หรือไม่!
Cbhihe

2
อ่านเหมือนการเล่นตลกทั้งหมด ราวกับว่ามีคนพยายามถามว่า "ฝนทำมาจาก H2O หรือไม่" (คำตอบที่ดีคือ: ปกติแล้ว แต่ในอนาคตเมื่อมนุษย์ถูกทำลายครึ่งหนึ่งของโลก 50% ของมันจะกลายเป็นกรด (เหมือนในฝนกรด)
syntaxerror

คำตอบ:


52

คำสั่งเป็นเช่นเดียวกับrm -rfrm -r -f

จากrmหน้าคน (พิมพ์man rmในเทอร์มินัลเพื่อดูมัน) -r:

remove directories and their contents recursively

และ-f:

ignore nonexistent files and arguments, never prompt

ดังนั้นเมื่อรวมกันแล้วพวกเขาทำทั้งสองอย่าง

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

โปรดใช้คำสั่งนี้ด้วยความระมัดระวัง!


@ พอลเฉือนจะทำอะไร ฉันใช้คำสั่งนี้เพื่อลบ dirs บ่อยครั้งและ w / oa slash
Octopus

1
@Octopus, เครื่องหมายทับด้วยตัวเองบ่งชี้ถึงไดเรกทอรีราก rm -rf /ในทางทฤษฎีจะลบทุกไฟล์ในคอมพิวเตอร์ของคุณที่อยู่ในไดเรกทอรีที่คุณได้รับอนุญาตให้เขียน หากคุณรูทนั่นหมายถึงการกำจัดทั้งระบบ (ในทางปฏิบัติมันใช้งานไม่ได้เพราะ GNU rmมีกรณีพิเศษที่ปฏิเสธที่จะอนุญาตrm -r /เว้นเสียแต่ว่าคุณจะพูด--no-preserve-rootด้วย)
cjm

10
เหมือนกันทั้งหมดฉันไม่แนะนำให้ลองrm -rf /ดูว่ามันถูกต้องหรือไม่
cjm

2
@mattburnett มันเป็นสิ่งที่อันตรายใน VM เช่นกัน: คุณอาจมีการเมาท์ที่ไม่ได้อยู่ใน VM โดยเฉพาะอย่างยิ่งฉันเชื่อว่าเป็นเรื่องปกติที่จะเมานต์หนึ่งในไดเรกทอรีของเครื่องโฮสต์บน VM เพื่อแชร์ไฟล์ระหว่างโฮสต์และ VM
hvd

1
@attburnett ฉันมี VMs ฉันไม่มี VM ที่ถูกกักกัน ฉันไม่ได้เรียกใช้โปรแกรมปฏิบัติการที่ไม่รู้จัก :)
hvd

22

นอกจากคำตอบที่ถูกต้องก่อนหน้านี้ฉันต้องการจะสอนวิธีตกปลา:

เมื่อคุณไม่แน่ใจว่าคำสั่งทำงานอย่างไรมีตัวเลือกอะไรบ้างและทำงานอย่างไรให้เปิดเทอร์มินัลและประเภท

man <command>

ตัวอย่างเช่น:

man rm

เมื่อเข้าไปที่นั่นแล้วคุณสามารถค้นหาตัวเลือก หน้าคู่มือสามารถอ่านได้ยาวมากดังนั้นในประเภทเทอร์มินัล:

/<pattern>

ตัวอย่างเช่นทำ:

/-f

คุณสามารถลงจอดเพื่อ:

-f, --force
              ignore nonexistent files and arguments, never prompt

สำหรับ -r do:

-r, -R, --recursive
              remove directories and their contents recursively

คุณสามารถเลื่อนไปมาระหว่างผลการค้นหาโดยใช้n(ถัดไป) และN(ก่อนหน้า)

โบนัส:

หากคุณต้องการทำบางสิ่ง แต่ไม่ทราบชื่อคำสั่งให้ใช้aproposในการค้นหาใน man pages:

apropos <pattern>

ตัวอย่างเช่น:

apropos directory listing

8

rmสั้นสำหรับการลบ การrตั้งค่าสถานะคือการลบไดเรกทอรีและเนื้อหาซ้ำ ๆ และfวิธีการบังคับและมันแทนที่การแจ้งเตือนการยืนยันใด ๆ


3
อย่างเคร่งครัดพูดr flag is to remove directories ไม่ถูกต้อง .. มันจะลบไดเรกทอรีพร้อมกับเนื้อหามันเป็นการดำเนินการซ้ำ .. ตามคำพูดของคุณมันจะลบไดเรกทอรีสิ่งที่เกี่ยวกับตำบลไฟล์ภายใต้มัน? เป็นรายการไดเรกทอรีมีการทำแผนที่ชื่อ inode เพียงนี้ไม่ได้ทำให้รู้สึกใด ๆ ..
heemayl

คุณพูดถูกฉันจะแก้ไขคำตอบของฉัน
Chris

1
-r ลบไดเรกทอรีและเนื้อหาซ้ำ ๆ
Jim Balter

3

ตามที่ได้รับการกล่าวถึงแล้วrm -rf <ARG>นั้นหมายถึงการลบไฟล์แบบเรียกซ้ำโดยที่<ARG>เป็นไดเร็กตอรี่ (ซึ่งสามารถเป็นไฟล์ได้)

จุดทั้งหมดของ-r(การลบแบบเรียกซ้ำ) คือrmไม่สามารถลบไดเรกทอรีได้หากไม่ว่างเปล่าเนื่องจากการเรียกระบบพื้นฐานที่rmใช้ ( ยกเลิกการเชื่อมโยง ) ทำงานเฉพาะกับไดเรกทอรีที่ว่างเปล่า ดังนั้นสิ่งที่-rธงทำคือการค้นหาความลึกก่อนลงไปในไดเรกทอรีและลบไฟล์ก่อนแล้วเมื่อไดเรกทอรีว่างเปล่า - มันจะลบมัน เอฟเฟกต์แบบเดียวกันนี้ทำได้โดยใช้findคำสั่งพร้อม-deleteแฟล็ก (เมื่อคุณไม่ได้ระบุการกรองตาม-typeแต่เป็นอีกเรื่องหนึ่ง)

สำหรับ-fสองสิ่งคือป้องกันไม่ให้พรอมต์ว่าคุณต้องการลบไฟล์หรือไม่ (เช่นเมื่อคุณลบไฟล์ที่ผู้ใช้รายอื่นเป็นเจ้าของจากภายในไดเรกทอรีจะไม่แสดงrm: remove write-protected regular empty file 'f1'?พรอมต์คำยืนยัน) และไม่สนใจ ไฟล์ที่ไม่มีอยู่ ตัวอย่างเช่นด้วยชื่อไฟล์ที่ไม่มีอยู่คุณควรได้รับrm: cannot remove 'nonexistent': No such file or directoryข้อผิดพลาด

ดูสิ่งนี้ด้วย:

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