เพียง 'rm -rf' ลบไฟล์ใด ๆ หรือไม่?


16

ฉันเพิ่งวิ่งrm -rfไม่rm -rf /แต่ไม่มีอะไรเกิดขึ้น ฉันเพิ่งได้รับผลเช่นนี้:

สถานีปลายทาง

ฉันกลัวเพราะฉันกังวลว่าอาจลบบางไฟล์ได้ แต่ก็ไม่ได้ เพียงแค่แน่ใจว่าสิ่งนี้สามารถลบไฟล์ใด ๆ จากไดเรกทอรีของฉันได้หรือไม่?


36
หากคุณไม่แน่ใจ (100% แน่นอน) จากนั้นอย่าเรียกใช้คำสั่ง
Solar Mike

5
อย่าพิมพ์คำสั่งที่คุณไม่เข้าใจ สิ่งที่คุณต้องการคือ หรือ a / และคุณจะต้องลบสิ่งต่าง ๆ มากมาย
เนลสัน

18
หากคุณต้องการทดลองใช้คำสั่งที่อาจเป็นอันตรายลองพิจารณาติดตั้งเครื่องเสมือน
musicman523

6
ทดลองทุกสิ่งที่คุณต้องการ (ตราบเท่าที่ข้อมูลของคุณได้รับการสำรองอย่างปลอดภัย) เป็นซอฟต์แวร์เท่านั้นและคุณสามารถติดตั้งใหม่ได้ตลอดเวลาหากมีสิ่งผิดปกติเกิดขึ้น อย่าปล่อยให้ใครฝึกคุณให้กลัวคอมพิวเตอร์
ฮอบส์

3
เรียกใช้คำสั่งอย่างแน่นอนหากคุณไม่แน่ใจ 100% มีหลายวิธีในการเรียนรู้และการใช้งานจริงเป็นหนึ่งในนั้น Caveat emptor และมีการสำรองข้อมูลอย่างชัดเจนและใช้ VMs และทุกสิ่ง แต่การไม่วิ่งหนีความกลัวจะช่วยให้คุณเติบโต ควรชัดเจนว่าต้องระมัดระวังเป็นพิเศษ (เช่น, rm) แต่สำหรับคำสั่งอื่น ๆ / ส่วนใหญ่เช่นคำสั่งการจัดการข้อความที่อิงกับไปป์การลองใช้คำสั่งเหล่านั้นบ่อยครั้งเป็นวิธีที่ง่ายที่สุด / ง่ายที่สุดที่คุณสามารถทำได้ ร่วมกับการศึกษาหน้าคนอย่างเห็นได้ชัด
AnoE

คำตอบ:


49

ไม่rm -rfจะไม่ลบไฟล์ใด ๆ เนื่องจากคุณไม่ได้ระบุอาร์กิวเมนต์ให้กับคำสั่ง


5
และด้วยเหตุ-fนี้จึงไม่ใช่ข้อผิดพลาดในการเรียกใช้โดยไม่ต้องมี args rm -rจะบ่นเกี่ยวกับ "ตัวถูกดำเนินการที่หายไป" แต่จะ-fระงับสิ่งนั้นและจะระงับข้อผิดพลาดสำหรับไฟล์ที่ไม่มีอยู่ (ตัวอย่างเช่นสคริปต์สามารถใช้rm -rf /foo/bar/*เพื่อล้างไดเรกทอรีที่อาจว่างอยู่แล้วโดยไม่ต้องทำ2>/dev/nullข้อผิดพลาดสควอช)
Peter Cordes

34

จากหน้าคู่มือ :

rm ลบแต่ละไฟล์ที่ระบุ

ซึ่งหมายความว่าคุณสามารถใช้เพื่อลบรายการไฟล์พร้อมกันเช่นด้วย

rm -rf test1.txt test2.txt

โชคดีสิ่งที่คุณทำคือผ่านรายการไฟล์ที่ว่างเปล่าดังนั้นจึงไม่ได้ลบอะไรเลย นอกจากนี้สิ่งที่@SolarMike พูดว่า : ถ้าคุณไม่ทราบว่าคำสั่งไม่ไม่ใช้มัน macOS ถูกออกแบบมาเพื่อ 'ซ่อน' การดำเนินการ Unix ที่เป็นอันตราย (แต่อาจมีประสิทธิภาพ) ทั้งหมดจากผู้ใช้


7
FYI การ-rตั้งค่าสถานะนั้นไม่จำเป็นเว้นแต่คุณจะลบไดเรกทอรีซ้ำ หากเป็นเพียงไฟล์rmก็เพียงพอแล้ว - -fสำหรับการบังคับใช้จะไม่ถามคุณว่า "คุณแน่ใจ" สำหรับทุกไฟล์
ทิมเอส.

9
นอกจากนี้ -f จะนำไปสู่ข้อความการใช้งานที่ไม่ปรากฏขึ้นเมื่อคุณใช้อย่างไม่ถูกต้อง rm -rfนี่คือเหตุผลที่มีการส่งออกที่ทุกคนเมื่อวิ่ง OP ไม่มี หากพวกเขาเรียกใช้ 'rm -r' โดยไม่มีไฟล์ / ไดเรกทอรีที่ระบุพวกเขาจะได้รับข้อความการใช้งานนี้: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter นั่นไม่เป็นความจริงเลย - มันจะยังคงพยายามที่จะลบ/มันจะข้ามไฟล์ที่ไม่มีอยู่xyz*(ซึ่งจะไม่ขยายเพราะขาดการแข่งขัน)
ปุย

3
@barrycarter พฤติกรรมนั้นขึ้นอยู่กับการกำหนดค่าแบบวงกลมของเชลล์ อย่างน้อยในค่าเริ่มต้นของ bash บน macOS มันจะลบaและจริง ๆแล้วbสำหรับฉัน - แม้ว่าจะไม่ได้ระบุ-fก็ตาม ทำคำสั่งเดียวกันด้วยecho rm -f a b c*แทนเพื่อดูพฤติกรรมจริง
ปุย

2
@barrycarter และปุย: สิ่งที่เกิดขึ้นขึ้นอยู่กับว่าตัวแปรเปลือกnonomatchมีการตั้งค่าหรือไม่
โทมัส Padron-McCarthy

13

สำหรับมือใหม่ / Linux / Unix:

rm เพียงอย่างเดียวไม่ได้ทำอะไรเพราะคุณไม่ได้บอกว่าจะกำจัดอย่างไร

man rm สามารถอธิบายได้ส่วนใหญ่ถ้าคุณเข้าใจ

-r หมายถึง recursive เช่นเดียวกับใน "รวมทุกอย่างในโฟลเดอร์ย่อย"

-f หมายถึงการบังคับ "ไม่ขอให้ฉันยืนยัน" โหมด

rm -rf(ไม่ทำเช่นนี้)/จะพูดว่าลบทุกอย่างภายใต้/(โฟลเดอร์รูท) โดยไม่ตรวจสอบ (ใน macOS เวอร์ชันล่าสุด SIP จะป้องกันไม่ให้คุณลบ MacOS ด้วยตัวเอง แต่สิ่งอื่น ๆ จะถูกลบ)

rm [some file name] จะเพียงแค่ลบไฟล์นั้น

rm -rf /home/myuser/booksจะลบทุกอย่างในmyuser's booksโฟลเดอร์เช่นเดียวกับโฟลเดอร์


6
ทุกวันนี้คุณต้องทำrm -rf / --no-preserve-rootเพื่อยิงขาอย่างถูกต้อง
Gallifreyan

1
@Gallifreyan มีวิธีที่จะยิงขาของคุณอย่างถูกต้องหรือไม่?
PascalVKooten

1
อันนี้บอกว่าทำงานได้ดี ฉันไม่รู้จักคนอื่น :)
Gallifreyan

1
@Gallifreyan บน macOS หรือไม่ pastebin.com/aVAsNcKCบ่งบอกเป็นอย่างอื่น
nohillside

@Gallifreyan: find / -deleteควร "ทำงาน" (เช่นลบสิ่งต่าง ๆ จริง ๆ ดังนั้นอย่าเรียกใช้)
Peter Cordes

4

ไม่ แต่ถ้าคุณต้องการลบนี่คือตัวอย่าง:

หลังจากที่คุณเรียกใช้ Terminal (ในโฟลเดอร์ / Applications / Utilities) ของคุณให้พิมพ์ cd ~ / Desktop เพื่อนำทางไปยังไดเรกทอรี Desktop หากคุณมีไฟล์ชื่อ MyFile.rtf ที่คุณไม่เคยต้องการที่จะเห็นอีกครั้งคุณสามารถเรียกใช้คำสั่งนี้:

rm MyFile.rtf

เมื่อคุณกด Return ไฟล์จะหายไป! มันจะหายไปขนมปังประวัติศาสตร์ คุณกลับไม่ได้


จริงๆแล้ว rm ลบการอ้างอิงทั้งหมดของไฟล์ไม่ได้ขัดฮาร์ดไดรฟ์ของไฟล์โดยการเขียนทับแต่ละไบต์ถ้าฉันเข้าใจเอกสารอย่างถูกต้อง
NoBugs

@Nobugs แต่ในความเป็นธรรมนี่คือวิธีการ 'ลบ' ที่ทันสมัยทั้งหมด Windows รวมอยู่ด้วย หากคุณลักษณะการลบเขียนทับแต่ละไบต์ระบบจะโฆษณาเช่นนั้น (ส่วนใหญ่เป็นเพราะใช้เวลานานกว่าและไม่จำเป็นต้องใช้เวลาส่วนใหญ่)
บ้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.