โดยปกติเมื่อฉันมีโปรแกรมที่ทำการสแกนดิสก์เต็มรูปแบบและไปยังไฟล์ทั้งหมดในระบบพวกเขาใช้เวลานานในการรัน เพราะเหตุใด updatedb จึงทำงานเร็วกว่าการเปรียบเทียบ
โดยปกติเมื่อฉันมีโปรแกรมที่ทำการสแกนดิสก์เต็มรูปแบบและไปยังไฟล์ทั้งหมดในระบบพวกเขาใช้เวลานานในการรัน เพราะเหตุใด updatedb จึงทำงานเร็วกว่าการเปรียบเทียบ
คำตอบ:
คำตอบขึ้นอยู่กับรุ่นของlocate
คุณใช้ แต่มีโอกาสที่ยุติธรรมมันmlocate
ซึ่งupdatedb
วิ่งได้อย่างรวดเร็วโดยการหลีกเลี่ยงการทำสแกนดิสก์เต็มรูปแบบ:
mlocate คือการนำไปใช้งาน find / updatedb เครื่องหมาย 'm' หมายถึง "การผสาน": updatedb จะนำฐานข้อมูลที่มีอยู่กลับมาใช้ใหม่เพื่อหลีกเลี่ยงการอ่านซ้ำส่วนใหญ่ของระบบไฟล์ซึ่งทำให้การ updateb เร็วขึ้นและไม่ทำให้ระบบแคชมากเท่าที่ควร
(ฐานข้อมูลจะจัดเก็บการประทับเวลาของแต่ละไดเรกทอรีctime
หรือmtime
สิ่งที่ใหม่กว่า)
เช่นเดียวกับการใช้งานมากที่สุดของupdatedb
, mlocate
นอกจากนี้ยังจะข้ามระบบไฟล์และเส้นทางที่มีการกำหนดค่าที่จะไม่สนใจ ตามปกติแล้วไม่มีในmlocate
กรณีของ แต่ปกติแล้วการแจกแจงจะให้พื้นฐานupdatedb.conf
ที่ละเว้นระบบไฟล์ในเครือข่ายระบบไฟล์เสมือนเป็นต้น (ดูที่ไฟล์กำหนดค่าของ Debianตัวอย่างเช่นนี่เป็นมาตรฐานการปฏิบัติใน Debian ดังนั้น GNU จึงupdatedb
ถูกกำหนดค่าไว้ในทำนองเดียวกัน )
mtime
ของพาเรนต์ปัจจุบันเท่านั้น
mlocate
ใส่ใจctime
และmtime
บอกเป็นนัยว่าใส่ใจว่ารายการของไดเรกทอรียังคงเหมือนเดิม (ไม่มีไฟล์ที่ถูกลบหรือเพิ่ม) ซึ่งหมายความว่ามันไม่สนใจไฟล์จริง ๆ ด้วยตนเอง ถูกต้องไหม
locate
grep -R
ไม่อ่านเนื้อหาไฟล์
นอกเหนือจากการตรวจสอบเวลาปรับเปลี่ยนแล้วmlocate
ยังละเว้นระบบย่อยบางอย่างของระบบไฟล์ที่มีไฟล์จำนวนมากที่ไม่น่าสนใจหรือซ้ำซ้อนตามที่ระบุใน /etc/updatedb.conf (และอธิบายในman updatedb.conf ):
updatedb
การใช้งานอื่น ๆยังสนับสนุนการยกเว้นที่กำหนดค่าไว้)