เมื่อดูที่ Dolphin with Baloo โดยเฉพาะดูเหมือนว่าจะค้นหาข้อมูลเมตาของทุกไฟล์ในโดเมนการค้นหาแม้ว่าคุณจะทำการค้นหาชื่อไฟล์อย่างง่าย เมื่อผมติดตามfile.so
กระบวนการฉันเห็นโทรไปlstat
, getxattr
และgetxattr
อีกครั้งสำหรับทุกไฟล์, และแม้กระทั่งสำหรับ..
รายการ การเรียกระบบเหล่านี้จะดึงข้อมูลเมตาเกี่ยวกับไฟล์ที่จัดเก็บในตำแหน่งอื่นจากชื่อไฟล์ (ชื่อไฟล์จะถูกเก็บไว้ในเนื้อหาไดเรกทอรี แต่ข้อมูลเมตาอยู่ในinode ) การสอบถามข้อมูลเมตาของไฟล์หลาย ๆ ครั้งมีราคาถูกเนื่องจากข้อมูลจะอยู่ในดิสก์แคช แต่อาจมีความแตกต่างอย่างมีนัยสำคัญระหว่างการสืบค้นข้อมูลเมตาและไม่ทำการสืบค้นข้อมูลเมตา
find
ฉลาดกว่านี้มาก พยายามหลีกเลี่ยงการเรียกระบบที่ไม่จำเป็น มันจะไม่โทรgetxattr
เพราะมันไม่ได้ค้นหาตามคุณสมบัติเพิ่มเติม เมื่อสำรวจไดเรกทอรีมันอาจต้องเรียกlstat
ชื่อไฟล์ที่ไม่ตรงกันเนื่องจากอาจเป็นไดเรกทอรีย่อยเพื่อค้นหาแบบเรียกซ้ำ ( lstat
เป็นการเรียกระบบที่ส่งคืนข้อมูลเมตาของไฟล์รวมถึงประเภทไฟล์เช่นปกติ / directory / symlink / ... ) อย่างไรก็ตามfind
มีการปรับให้เหมาะสม: มันรู้จำนวนไดเรกทอรีย่อยที่ไดเรกทอรีได้จากการนับลิงก์และหยุดการเรียกlstat
เมื่อรู้ว่ามันสำรวจผ่านไดเรกทอรีย่อยทั้งหมด โดยเฉพาะในไดเรกทอรีใบไม้ (ไดเรกทอรีที่ไม่มีไดเรกทอรีย่อย)find
ตรวจสอบชื่อเท่านั้นไม่ใช่ข้อมูลเมตา นอกจากนี้ระบบไฟล์บางระบบยังเก็บสำเนาชนิดของไฟล์ไว้ในรายการไดเรคทอรีเพื่อที่find
จะไม่จำเป็นต้องโทรlstat
ถ้านั่นเป็นข้อมูลที่ต้องการเท่านั้น
หากคุณเรียกใช้find
ด้วยตัวเลือกที่ต้องตรวจสอบข้อมูลเมตามันจะทำการlstat
โทรเพิ่มแต่มันจะไม่ทำการlstat
เรียกไฟล์ถ้าไม่ต้องการข้อมูล (ตัวอย่างเช่นเนื่องจากไฟล์ถูกแยกโดยเงื่อนไขก่อนหน้า จับคู่กับชื่อ)
ฉันสงสัยว่าเครื่องมือค้นหา GUI อื่น ๆ ที่สร้างfind
วงล้อนั้นฉลาดน้อยกว่ายูทิลิตี้บรรทัดคำสั่งซึ่งได้รับการปรับแต่งมาหลายทศวรรษ อย่างน้อยปลาโลมานั้นฉลาดพอที่จะใช้ฐานข้อมูลการค้นหาหากคุณค้นหา“ ทุกที่” (มีข้อ จำกัด ที่ไม่ชัดเจนใน UI ที่ผลลัพธ์อาจล้าสมัย)