rm -rf
ฉันได้รับเสมออยากรู้อยากเห็นว่าทำไมคำสั่งสำหรับทุกสิ่งที่ลบในไดเรกทอรีคือ
ทำไมไม่มีธงทำเช่นเดียวกันกับrmdir
?
มันจะไม่ใช้งานง่ายกว่าrmdir
สำหรับการดำเนินการไดเรกทอรีหรือไม่
rm -rf
ฉันได้รับเสมออยากรู้อยากเห็นว่าทำไมคำสั่งสำหรับทุกสิ่งที่ลบในไดเรกทอรีคือ
ทำไมไม่มีธงทำเช่นเดียวกันกับrmdir
?
มันจะไม่ใช้งานง่ายกว่าrmdir
สำหรับการดำเนินการไดเรกทอรีหรือไม่
คำตอบ:
ในระบบไฟล์ Unix เริ่มต้น (อย่างน้อยย้อนกลับไปในไดเรกทอรี V7 วันประมาณปี 1970) ถูกนำมาใช้เป็นไฟล์พิเศษและมีเพียงรูทเท่านั้นที่สามารถใช้การmknod(2)
เรียกระบบที่สร้างพวกเขาและรูทเท่านั้นที่สามารถunlink(2)
เป็นไฟล์ไดเร็กทอรีพิเศษได้
การป้องกันเหล่านี้อยู่ในสถานที่เพื่อให้โครงสร้างระบบแฟ้มสอดคล้องกัน ตัวอย่างเช่นหากผู้ใช้ได้รับอนุญาตให้เขียนไฟล์พิเศษของไดเรกทอรีเขาสามารถทำให้พาเรนต์ไดเร็กทอรี..
ชี้ไปที่ตัวเอง (โดยเฉพาะ i-node ของตัวเอง) สิ่งนี้จะสร้างการอ้างอิงแบบวงกลมในระบบไฟล์ซึ่งจะเป็นสิ่งที่ไม่ดี แน่นอนว่ายังมีความไม่สอดคล้องอื่น ๆ ที่อาจเกิดขึ้นได้นี่เป็นเพียงตัวอย่างที่ชัดเจน
ความสอดคล้องถูกดูแลรักษาโดยโปรแกรมพื้นที่ผู้ใช้เช่นmkdir(1)
และrmdir(1)
เป็นรูทของ Set-UID เพื่อให้สามารถทำการเรียกใช้ระบบที่มีสิทธิพิเศษในนามของผู้ใช้ที่ไม่มีสิทธิพิเศษ เมื่อเพิ่มการสอบถามซ้ำrm(1)
คำสั่ง remove จะเรียกใช้เป็น UID ปัจจุบันจากนั้นเรียกใช้rmdir(1)
เพียงเพื่อลบไดเรกทอรีว่างเปล่า นี่ยังคงเป็นวิธีมาตรฐานในการยกระดับสิทธิ์: อย่าใช้สิทธิ์มากกว่าที่คุณต้องการ
บางครั้งในภายหลังmkdir(2)
และrmdir(2)
ถูกเพิ่มเป็นสายระบบของตัวเอง แต่ความสัมพันธ์ระหว่างrm(1)
และrmdir(1)
ยังคงอยู่
โดยส่วนตัวแล้วฉันพบว่ามันน่าพึงพอใจมากกว่าrmdir junk
และรู้ว่าสิ่งที่แย่ที่สุดที่ฉันทำคือลบไดเรกทอรีว่างเปล่าออก
rmdir
นั้นก็ยังคงต้องมีการ-r
ตั้งค่าสถานะ ( rmdir -r junk
แทนrm -r junk
และrmdir junk
ยังคงใช้ได้เฉพาะในกรณีที่ไดเรกทอรีว่างเปล่า)
มันเป็นประวัติศาสตร์ rm
ถูกสร้างขึ้นมาเพื่อลบการอ้างอิงไปยังไฟล์ที่จะลบไดเรกทอรีขนานไปกับrmdir
mkdir
เมื่อหลายปีก่อน Unix rm
สามารถลบไดเรคทอรี่ได้ด้วยการเรียกใช้rmdir
เท่านั้น นอกจากนี้ยังไม่ได้rmdir(2)
โทรระบบเป็นโปรแกรมที่เรียกว่าrmdir
unlink(2)
อ้างอิง:
เป็นเรื่องของความเห็นrm
ล้วนๆแต่จะลบไฟล์ในขณะที่rmdir
ลบไดเรกทอรี ไดเรกทอรีเป็นไฟล์ แต่เป็นไฟล์ชนิดพิเศษดังนั้นจึงเหมาะสมที่rm
จะลบออก แต่ให้ปฏิบัติต่อพวกเขาเป็นพิเศษ (เช่นต้องใช้ตัวเลือกพิเศษเพื่อเปิดใช้งานความสามารถ) ในทางกลับกันไม่ใช่ไฟล์ทั้งหมดที่เป็นไดเรกทอรี และมันไม่มีเหตุผลที่ IMHO rmdir
จะลบสิ่งที่ไม่ใช่ไดเรกทอรี
rm
ลบไดเรกทอรีว่างเปล่า (ยกเว้นในโหมดเรียกซ้ำ)
-r
แฟล็กเพื่อเปิดใช้งานฟีเจอร์ของไฟล์พิเศษของไดเรกทอรี
rmdir
ลบไดเรกทอรีrm
ลบ เหตุใดจึงเป็นการง่ายสำหรับrmdir
การลบไม่ใช่ไดเรกทอรี?