ยกเลิกการเชื่อมโยงใด ๆ เร็วกว่า rm หรือไม่
ยกเลิกการเชื่อมโยงใด ๆ เร็วกว่า rm หรือไม่
คำตอบ:
ทั้งสองเป็น wrapper ของฟังก์ชันพื้นฐานเดียวกันซึ่งเป็นการunlink()
เรียกระบบ
เพื่อชั่งน้ำหนักความแตกต่างระหว่าง userland utilies
rm(1)
:
unlink(1)
:
rm(1)
ข้อโต้แย้งหลายข้อคุณสามารถแสดงความแตกต่างด้วย:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
หาก แต่เรากำลังพูดถึงการเรียกunlink(2)
ฟังก์ชั่นระบบที่ไม่มีการปนเปื้อนซึ่งตอนนี้ฉันรู้ว่าอาจไม่ใช่สิ่งที่คุณกำลังคิด
คุณสามารถดำเนินการระบบunlink()
ในไดเรกทอรีและไฟล์เหมือนกัน แต่ถ้าไดเรกทอรีนั้นเป็นพาเรนต์ไปยังไดเร็กตอรี่และไฟล์อื่น ๆ ลิงก์ไปยังพาเรนต์นั้นจะถูกลบออก แต่ลูก ๆ ซึ่งน้อยกว่าอุดมคติ
แก้ไข:
ขออภัยชี้แจงความแตกต่างระหว่างและunlink(1)
unlink(2)
ความหมายยังคงมีความแตกต่างระหว่างแพลตฟอร์ม
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
คุณสามารถแสดงให้เห็นว่าด้วย: หากคุณยกเลิกการเชื่อมโยงไดเรกทอรีหลักแล้วพื้นที่ที่เด็ก ๆ ใช้ควรจะหายไปจนกว่าจะถึงเวลาที่ fsck ค้นหาความแตกต่าง
ในระดับข้อมูลจำเพาะ POSIX สิ่งRMไม่ระบุไว้แน่นมากขึ้นกว่าสิ่งที่ยกเลิกการเชื่อมโยงไม่
ความสามารถในการพกพาของผลลัพธ์น่าจะใช้ rm ได้ดีกว่าถ้าสคริปต์ของคุณต้องทำงานข้ามระบบปฏิบัติการ
ส่วนที่ช้าของการลบคือรหัสระบบไฟล์และข้อมูลในดิสก์
เช่น: หากความเร็วแตกต่างกันคุณไม่ควรเก็บข้อมูลไว้ในระบบไฟล์
unlink เป็นเพียง "แสง" rm rm มีคุณสมบัติมากกว่าเดิม แต่ทำในสิ่งเดียวกัน