คำสั่ง Linux rm: ทุกสิ่งที่คุณต้องรู้

เผยแพร่แล้ว: 2023-01-22
แล็ปท็อป Linux แสดงคำสั่งทุบตี
fatmawati achmad zaenuri/Shutterstock.com
คำสั่ง rm ให้คุณลบไฟล์หรือไดเร็กทอรีที่มีชื่อ: "rm filename" หรือ "rm -d directory" คุณสามารถรวมเส้นทางไดเร็กทอรีได้เช่นกัน หากมีไฟล์ในไดเร็กทอรี ให้ใช้ตัวเลือก -r "ไดเร็กทอรี rm -r" เพื่อลบไฟล์และโฟลเดอร์ซ้ำ

คำสั่ง Linux rm จะลบไฟล์และไดเร็กทอรี ในการใช้เครื่องมือนี้อย่างปลอดภัย คุณต้องแน่ใจว่าจะเกิดอะไรขึ้นเมื่อคุณกด “Enter” นี่คือสิ่งที่คุณต้องรู้

สารบัญ

คำสั่ง rm ใน Linux คืออะไร?
วิธีลบไฟล์ด้วย rm
การใช้สัญลักษณ์แทนด้วย rm
ใช้ rm แบบโต้ตอบ
การใช้ตัวเลือก rm Force
การลบไดเร็กทอรีด้วย rm
หลีกเลี่ยงข้อผิดพลาดเมื่อใช้ rm
อะไร PPE?

คำสั่ง rm ใน Linux คืออะไร?

คำสั่ง Linux rm ใช้สำหรับลบไฟล์เป็นหลัก เป็นสิ่งที่คนส่วนใหญ่พบทันทีหลังจากเริ่มใช้ Linux เพียงแค่เป็นผู้ใช้ใหม่กับ Linux คุณก็มีโอกาสทำผิดพลาดได้ คุณจะสร้างหรือคัดลอกไฟล์โดยไม่ตั้งใจ หรือใช้ชื่อผิด หรือไปยังที่ที่ไม่ถูกต้อง ทั้งหมดนี้เป็นส่วนหนึ่งของเส้นโค้งการเรียนรู้ของบรรทัดคำสั่ง การดำเนินการล้างข้อมูลสำหรับข้อผิดพลาดดังกล่าวเกี่ยวข้องกับ rm

8 การพิมพ์ผิดที่คุณต้องหลีกเลี่ยงบน Linux
8 ข้อผิดพลาดที่คุณต้องหลีกเลี่ยงบน Linux

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

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

เครื่องมือบางอย่างมีอันตรายมากกว่าเครื่องมืออื่นๆ และให้อภัยความผิดพลาดน้อยกว่ามาก นั่นเป็นเหตุผลที่ไม่เคยมีภาพยนตร์เรื่อง The Texas Wrench Massacre rm ไม่ใช่ประแจ แต่เป็นเลื่อยไฟฟ้า

ผู้คนใช้เลื่อยยนต์ทุกวันทุกวัน และตราบใดที่พวกเขาใช้เลื่อยไฟฟ้าอย่างมีความรับผิดชอบและมีสติ ก็ไม่เป็นไร มันเป็นข้อตกลงเดียวกันกับ rm เมื่อคุณดึง rm ออกจากกระเป๋าเครื่องมือ คุณควรลดความเร็วลงและตรวจสอบ จากนั้นตรวจสอบอีกครั้งบรรทัดคำสั่งของคุณ

คำสั่ง rm เป็นคำสั่งปฏิบัติการ ไม่ใช่ส่วนหนึ่งของเชลล์ แม้ว่าเราจะใช้ Bash ที่นี่ แต่มันเป็น Linux มาตรฐาน rm ไม่ใช่ Bash rm พิเศษ

ที่เกี่ยวข้อง: บรรทัดคำสั่ง: ทำไมผู้คนถึงยังกังวลกับพวกเขา

วิธีลบไฟล์ด้วย rm

วิธีที่ง่ายที่สุดในการใช้ rm คือระบุชื่อไฟล์ที่คุณต้องการลบ

 rm config.gc 

การลบไฟล์เดียวโดยส่งชื่อไฟล์ไปที่ rm

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

คุณสามารถระบุชื่อไฟล์ได้หลายชื่อในบรรทัดคำสั่ง คุณยังสามารถระบุเส้นทางไดเร็กทอรีหากไฟล์ที่คุณต้องการลบไม่อยู่ในไดเร็กทอรีปัจจุบัน

 rm memlog.sh /home/dave/dev-archive/config.gc 

การลบสองไฟล์โดยส่งชื่อไฟล์และพาธไดเร็กทอรีไปที่ rm

ไม่มีการรายงานอีกครั้งหาก rm จัดการเพื่อลบไฟล์ที่ระบุ

ที่เกี่ยวข้อง: 37 คำสั่ง Linux ที่สำคัญที่คุณควรรู้

การใช้สัญลักษณ์แทนด้วย rm

สัญลักษณ์แทนช่วยให้คุณสามารถระบุกลุ่มหรือคอลเลกชันของไฟล์โดยไม่ต้องแสดงรายการแต่ละไฟล์ในบรรทัดคำสั่ง

เครื่องหมายดอกจัน “ * ” หมายถึงลำดับของอักขระใดๆ รวมทั้งไม่มี เครื่องหมายคำถาม “ ? ” หมายถึงอักขระเดี่ยวใดๆ

ในการตรวจสอบว่า wildcard ของคุณตรงกับสิ่งที่คุณคาดหวังหรือไม่ คุณสามารถใช้ wildcard กับ ls ก่อนที่จะใช้กับ rm

หากต้องการลบไฟล์ PNG ทั้งหมดในไดเร็กทอรีปัจจุบัน ให้ใช้ “*.png” ซึ่งหมายความว่าลำดับของอักขระที่ตามด้วย ".png" จะถูกจับคู่ เมื่อไฟล์ถูกลบ เราสามารถใช้ ls เพื่อยืนยันว่าไฟล์เหล่านั้นหายไปแล้ว

 ls *.png
 rm *.png
 ls *.png 

ใช้สัญลักษณ์ดอกจันเพื่อลบไฟล์ทั้งหมดที่มีนามสกุลไฟล์ PNG

ในคอมพิวเตอร์ทดสอบ เรามีไฟล์สองไฟล์ในไดเร็กทอรีปัจจุบันที่มีชื่อขึ้นต้นด้วย "config"

เราสามารถลบทั้งสองสิ่งนี้ได้โดยใช้สัญลักษณ์ดอกจัน ตรงกับทั้งสองไฟล์เนื่องจาก rm ค้นหาชื่อไฟล์ที่ขึ้นต้นด้วย "config" ตามด้วยลำดับของอักขระ ในไฟล์เดียว ลำดับของอักขระนั้นคือ “.sl3” ซึ่งเป็นนามสกุลไฟล์ ชื่อไฟล์อื่นไม่มีอักขระตามหลัง "config" แต่เนื่องจากเครื่องหมายดอกจันตรงกับอักขระใดๆ หรือ ไม่มีอักขระ ใดๆ เลย จึงตรงกับชื่อไฟล์นั้นด้วย

 ls กำหนดค่า*
 การกำหนดค่า rm*
 ls กำหนดค่า* 

การใช้สัญลักษณ์ดอกจันเพื่อลบไฟล์สองไฟล์ ไฟล์หนึ่งมีและไม่มีนามสกุลไฟล์

คุณสามารถใช้เครื่องหมายคำถามเป็นคู่ การดำเนินการนี้จะลบไฟล์ที่มีนามสกุลไฟล์สองอักขระพอดี

 ลส *.??
 rm *.??
 ลส *.?? 

ใช้สัญลักษณ์แทนเครื่องหมายคำถามสองอันเพื่อลบไฟล์ที่มีนามสกุลไฟล์เท่ากับสองอักขระ

ที่เกี่ยวข้อง: 15 ตัวละครพิเศษที่คุณต้องรู้จักสำหรับ Bash

ใช้ rm แบบโต้ตอบ

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

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

 rm -i *.? 

การใช้ rm แบบโต้ตอบเพื่อให้พร้อมท์ก่อนการลบแต่ละครั้ง

แต่ละไฟล์ที่ตรงกันจะถูกนำเสนอตามลำดับ หากคุณตอบ “y” หรือ “Y” ไฟล์จะถูกลบ หากคุณตอบ “n” ไฟล์จะถูกเก็บไว้ ในความเป็นจริง หากคุณตอบด้วยสิ่งอื่นที่ไม่ใช่ "y" หรือ "y" ไฟล์นั้นจะถูกเก็บไว้ คุณสามารถกด "Enter" และไฟล์จะถูกเก็บไว้

คุณสามารถทำงานผ่านรายการไฟล์ได้อย่างรวดเร็ว ลบหรือข้ามไฟล์เพื่อเลือกไฟล์ที่คุณต้องการลบ ดังที่เราจะเห็นว่าคุณสามารถใช้ตัวเลือก i- (โต้ตอบ) กับตัวเลือก rm อื่นๆ ได้

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ

การใช้ตัวเลือก rm Force

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

 rm geonames.sl3 

rm แจ้งให้ผู้ใช้ยืนยันว่าต้องการลบไฟล์แบบอ่านอย่างเดียว

ตัวเลือก -f (บังคับ) สั่งให้ rm ไม่พร้อมท์ คุณกำลังบอกว่า “ใช่ ลบไฟล์ทั้งหมดที่คุณมักจะแจ้งให้ฉันทราบ” นอกจากนี้ยังป้องกันไม่ให้ rm บ่นเกี่ยวกับไฟล์ที่ไม่มีอยู่จริง

 rm -f geonames.sl3 

การใช้ตัวเลือก -f (บังคับ) เพื่อป้องกันไม่ให้ rm แจ้งเกี่ยวกับการลบ

ตัวเลือก -f (บังคับ) มักใช้เมื่อคุณลบชุดไฟล์และไดเร็กทอรีที่ซ้อนกัน

การลบไดเร็กทอรีด้วย rm

คำสั่ง rm สามารถเลือกที่จะลบไดเร็กทอรีพร้อมกับไฟล์ที่มีอยู่ ซึ่งคล้ายกับคำสั่ง rmdir แต่ rmdir ไม่สามารถลบไดเร็กทอรีที่มีไฟล์อยู่ภายในได้ จะลบไดเร็กทอรีที่ว่างเปล่าเท่านั้น คำสั่ง rm สามารถลบไดเร็กทอรีที่มีไฟล์และไดเร็กทอรีอื่นได้อย่างง่ายดาย

วิธีลบไฟล์และไดเร็กทอรีใน Linux Terminal
ที่เกี่ยวข้อง วิธีการลบไฟล์และไดเร็กทอรีใน Linux Terminal

การลบไดเร็กทอรีนั้นคล้ายกับการลบไฟล์ เราระบุชื่อไดเร็กทอรีในบรรทัดคำสั่ง เราจำเป็นต้องรวมตัวเลือก -d (ไดเร็กทอรี) เช่นเดียวกับที่เราทำเมื่อเราลบไฟล์ เราสามารถระบุชื่อไดเร็กทอรีต่างๆ เราสามารถระบุพาธไปยังไดเร็กทอรีที่ไม่ได้อยู่ในไดเร็กทอรีการทำงานปัจจุบัน

 rm -d โครงการเก่า 

การใช้ตัวเลือก -d (ไดเร็กทอรี) เพื่อลบไดเร็กทอรี

หากไดเร็กทอรีมีไฟล์ สิ่งนี้จะล้มเหลว

หากต้องการลบไดเร็กทอรี และ เนื้อหา ให้ใช้แฟล็ก -r (recursive) ซึ่งจะลบไดเร็กทอรี ไฟล์ และไดเร็กทอรีที่ซ้อนอยู่ในไดเร็กทอรี

 rm -d ไฟล์เก็บถาวร
 rm -r ไฟล์เก็บถาวร 

การใช้ตัวเลือก -r (เรียกซ้ำ) เพื่อลบไดเร็กทอรีและไฟล์

คำสั่งที่สองสำเร็จ

หากต้องการเปลี่ยน rm เป็นโหมดเลื่อยไฟฟ้าแบบเต็ม เราสามารถรวมตัวเลือก -r (เรียกซ้ำ) และ -f (บังคับ) สิ่งนี้บอกให้ rm ลบไฟล์และไดเร็กทอรีทั้งหมดในแผนผังไดเร็กทอรีแบบวนซ้ำ แม้ว่าไฟล์และไดเร็กทอรีจะเป็นแบบอ่านอย่างเดียวก็ตาม และไม่ต้องแจ้งเรา

ในคอมพิวเตอร์ทดสอบของเรา เรามีไดเร็กทอรีชื่อ "migrated code" ประกอบด้วยไฟล์และไดเร็กทอรีอื่นที่เรียกว่า “6502” ไดเร็กทอรี “6502” ยังมีไฟล์และไดเร็กทอรีอื่นที่เรียกว่า “ASM” มีไฟล์อยู่ในไดเร็กทอรีนั้นด้วย ไฟล์บางไฟล์เป็นแบบอ่านอย่างเดียว

เราจะรวมคำสั่ง -v (verbose) เพื่อให้ rm บอกเราว่ากำลังทำอะไรอยู่

 rm -rfv ย้ายรหัส 

การใช้แฟล็ก -rfv เพื่อทำให้ rm ลบไฟล์และไดเร็กทอรี แม้แต่ไฟล์แบบอ่านอย่างเดียว โดยไม่ต้องถาม

ในเอาต์พุต เราจะเห็นว่าไฟล์ถูกลบออก และเมื่อไฟล์ว่างเปล่า ไดเร็กทอรีจะถูกลบด้วย

เอาต์พุตของแฟล็ก -rfv แสดงไฟล์ที่ถูกลบและไดเร็กทอรีที่ถูกลบเมื่อว่าง

หลีกเลี่ยงข้อผิดพลาดเมื่อใช้ rm

ช่องว่างและอักขระแปลก ๆ ในชื่อไฟล์อาจทำให้เกิดปัญหาได้ ตัวอย่างเช่น ชื่อไฟล์ที่ขึ้นต้นด้วยยัติภังค์ “ - ” อาจถูกเข้าใจผิดว่าเป็นตัวเลือกบรรทัดคำสั่ง หากเรามีไฟล์ชื่อ “-contributors.txt” rm จะพยายามประมวลผลชื่อเป็นลำดับของตัวเลือกบรรทัดคำสั่ง

เนื่องจาก rm ไม่มีตัวเลือกที่เรียกว่า " -c " การแยกวิเคราะห์บรรทัดคำสั่งจึงล้มเหลวและไฟล์จะไม่ถูกลบ หากต้องการลบไฟล์ คุณต้องนำหน้าด้วย "./" เพื่อระบุเส้นทางไปยังไฟล์นั้น

 rm -contributors.txt
 rm./-contributors.txt 

การใช้ "./" เพื่อแก้ไขปัญหาในการลบไฟล์ที่มีอักขระตัวแรกเป็นยัติภังค์

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

วิธีจัดการกับช่องว่างในชื่อไฟล์บน Linux
ที่เกี่ยวข้อง วิธีจัดการกับช่องว่างในชื่อไฟล์บน Linux

ที่นี่ เรามีไฟล์สองไฟล์ ไฟล์หนึ่งเรียกว่า "สำรองข้อมูล" และอีกไฟล์หนึ่งเรียกว่า "สำรองข้อมูลเพื่อลบ" เราสามารถแสดงปัญหากับชื่อไฟล์เหล่านี้ได้โดยใช้ ls หากเราพยายามใช้ ls ในไฟล์ "สำรองข้อมูลเพื่อลบ" และเราไม่หนีหรืออ้างชื่อไฟล์ คำสั่งจะล้มเหลว

 ls -hl สำรองข้อมูลเพื่อลบ 

พยายามใช้ ls กับไฟล์ที่มีช่องว่างในชื่อ โดยไม่ใส่เครื่องหมายคำพูดหรือหลีกเลี่ยงช่องว่าง

ls บ่นว่าไม่พบไฟล์ที่ชื่อว่า "to" หรือ "delete" แต่พบไฟล์ที่ชื่อว่า "backup" นั่นคือสิ่งที่ rm จะทำเช่นกัน มันจะบ่นเกี่ยวกับไฟล์ที่หายไปสองไฟล์ จากนั้นมันก็จะลบไฟล์ที่เรียกว่า "สำรองข้อมูล" ซึ่งไม่ใช่ไฟล์ที่เราต้องการ

 rm สำรองเพื่อลบ 

พยายามใช้ rm กับไฟล์ที่มีช่องว่างในชื่อ โดยไม่ใส่เครื่องหมายอัญประกาศหรือหลีกเลี่ยงช่องว่าง

rm คิดว่ามันทำงานกับไฟล์สามไฟล์ "สำรอง" "ถึง" และ "ลบ" มันบ่นว่าไม่พบ "ถึง" และ "ลบ" แต่มันพบและลบ "ข้อมูลสำรอง" อย่างเงียบ ๆ

การอ้างอิงชื่อไฟล์ทำให้ rm สามารถลบไฟล์ที่ถูกต้องได้

 rm 'สำรองข้อมูลเพื่อลบ' 

การใช้ rm กับชื่อไฟล์ที่อ้างถึงเพื่อแก้ปัญหาช่องว่างในชื่อไฟล์

คุณยังสามารถเว้นช่องว่างด้วยเครื่องหมายแบ็กสแลช “ \ “ เช่นนี้:

 rm สำรอง\ ถึง \ ลบ 

การใช้ rm กับชื่อไฟล์ที่มีช่องว่าง Escape เพื่อแก้ปัญหาช่องว่างในชื่อไฟล์

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

อะไร PPE?

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

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

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

ที่เกี่ยวข้อง: ลบไฟล์ที่เก่ากว่า x วันบน Linux