โดยปกติเมื่อฉันมีโปรแกรมที่ทำการสแกนดิสก์เต็มรูปแบบและไปยังไฟล์ทั้งหมดในระบบพวกเขาใช้เวลานานในการรัน เพราะเหตุใด 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การใช้งานอื่น ๆยังสนับสนุนการยกเว้นที่กำหนดค่าไว้)