คำสั่ง rm ของ Linux: ตัวเลือก rm -rf และวิธีลบโดยไม่ต้องยืนยัน

คำสั่ง rm ลบไฟล์ทันทีโดยไม่ผ่านถังขยะ rm ย่อมาจาก remove ใช้ลบไฟล์และไดเรกทอรี บทความนี้สรุปวิธีใช้พื้นฐาน ตัวเลือก และเหตุผลที่ไดเรกทอรีรากยังอยู่แม้จะรัน [rm -rf /]
AlmaLinux 9.8 มี [alias rm=’rm -i’] อยู่ในบัญชี root เป็นค่าเริ่มต้น จึงถามยืนยันก่อนลบ สำหรับระบบปฏิบัติการ Linux ที่ไม่ได้ตั้งค่านี้ไว้ บทความนี้ก็อธิบายวิธีใส่ alias เองไว้ด้วย
✅ วิธีใช้พื้นฐาน
วิธีใช้พื้นฐานมีดังนี้
rm -ตัวเลือก สิ่งที่จะลบ: ไฟล์ หรือ ไดเรกทอรี
ไฟล์ลบได้เพียงใส่ชื่อ ส่วนไดเรกทอรีต้องใส่ตัวเลือก -r จึงจะลบได้
# ลบไฟล์
rm file1
# ลบหลายไฟล์
rm file1 file2
# ลบไดเรกทอรีพร้อมทุกอย่างข้างใน
rm -r dir1/
# ลบไดเรกทอรีว่าง
rm -d dir1/~]# rm dir1/
rm: cannot remove 'dir1/': Is a directoryถ้าระบุไดเรกทอรีโดยไม่ใส่ตัวเลือก จะลบไม่ได้อย่างที่เห็นด้านบน
ถ้าลบ Symbolic link จะลบแค่ตัวลิงก์ ส่วนไฟล์ปลายทางที่ลิงก์ชี้ไปยังคงอยู่ตามเดิม การตรวจสอบก่อนและหลังลบให้ใช้ คำสั่ง ls ร่วมด้วย
✅ rm -rf: ลบโดยไม่ต้องยืนยัน
เมื่อรันคำสั่ง rm จะมีคำถาม [remove regular file] ขึ้นมา เพราะในบัญชี root คำสั่ง rm ทำงานผ่านชื่อแทน (alias) [rm -i]
~]# rm file1
rm: remove regular file 'file1'? y
~]# alias rm
alias rm='rm -i'ถ้าลบไดเรกทอรีด้วยตัวเลือก -r จะถามยืนยันทั้งตอนเข้าไปในไดเรกทอรีและทุกไฟล์ ยิ่งไฟล์มากก็ยิ่งยุ่งยาก
~]# rm -r logs/
rm: descend into directory 'logs/'? y
rm: remove regular file 'logs/access.log'? y
rm: remove regular empty file 'logs/error.log'? y
rm: remove directory 'logs/'? yกรณีนี้ให้ใส่ตัวเลือก -f เพิ่ม จะลบได้โดยไม่ต้องยืนยัน และแม้ระบุไฟล์ที่ไม่มีอยู่ก็ไม่ขึ้นข้อผิดพลาด
rm -rf logs/การใส่แบ็กสแลช [\] หน้าคำสั่งเพื่อไม่ให้ผ่าน alias หรือใส่ [yes |] ไว้ข้างหน้าเพื่อให้ป้อน y ทุกครั้งที่ถามยืนยัน ก็ให้ผลเหมือนกัน
\rm -r logs/
yes | rm -r logs/✅ ตัวเลือกคำสั่ง rm & ตัวจำลอง
| ตัวเลือก | คำอธิบาย | |
|---|---|---|
| -f | --forceลบโดยไม่ต้องยืนยัน และไม่แจ้งข้อผิดพลาดแม้ระบุไฟล์ที่ไม่มีอยู่ | |
| -i | ขอให้ผู้ใช้ยืนยันทุกครั้งก่อนลบalias rm='rm -i' | |
| -I(ตัว i พิมพ์ใหญ่) | ถามยืนยันครั้งเดียวเมื่อมีไฟล์ตั้งแต่ 4 ไฟล์ขึ้นไปหรือใช้ร่วมกับ -r | |
| -r, -R | --recursiveลบไดเรกทอรีพร้อมไดเรกทอรีย่อยและไฟล์ทั้งหมด | |
| -d | --dirลบไดเรกทอรีว่าง | |
| -v | --verboseแสดงไฟล์และไดเรกทอรีที่ลบทีละบรรทัด | |
| --preserve-root | ไม่ลบไดเรกทอรีราก (/) (ค่าเริ่มต้น) | |
| --no-preserve-root | ยกเลิกการป้องกันไดเรกทอรีราก (/) |
✅ rm -rf /: ป้องกันการลบไดเรกทอรีราก
ในงานด้านโฮสติ้ง บางครั้งก็มีการลบไฟล์ที่ไม่ควรลบ ส่วนใหญ่กู้คืนได้จากไฟล์สำรอง แต่ถ้าลบไดเรกทอรีรากไป แม้จะมีสแนปช็อตการกู้คืนก็ยุ่งยาก และเคยได้ยินกรณีที่รันคำสั่ง rm -rf ผิดจนกู้คืนไม่ได้มาหลายครั้ง
คำสั่ง rm ใช้ตัวเลือก [--preserve-root] เป็นค่าเริ่มต้น ไดเรกทอรีรากจึงไม่ถูกลบแม้จะรัน [rm -rf /]
~]# rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafeแต่ [rm -rf /*] ป้องกันไม่ได้ เพราะเชลล์จะแทน [/*] ด้วยชื่อไดเรกทอรีอย่าง /bin, /etc, /home ก่อนส่งต่อไป คำสั่ง rm จึงลบไดเรกทอรีแต่ละอันแทนที่จะเป็น [/]
เมื่อติดตั้ง AlmaLinux 9.8 แล้ว จะมี alias -i ของคำสั่ง rm, cp, mv อยู่ใน [/root/.bashrc] ดังด้านล่าง บัญชีผู้ใช้ทั่วไปไม่มี alias นี้
~]# grep alias /root/.bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'ในบัญชีหรือระบบปฏิบัติการ Linux ที่ไม่มี alias ให้เพิ่ม 1 บรรทัดไว้ท้ายสุดของ [~/.bashrc] แล้วโหลดใหม่ก็ใช้ได้
# เพิ่มไว้ท้ายสุดของ ~/.bashrc
alias rm='rm -i'
# โหลดใหม่
source ~/.bashrc
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน