อะไรคือความแตกต่างระหว่าง 'ค้นหา' และ 'ค้นหา' ใน Linux?


41

เหตุใดจึงมีคำสั่งที่คล้ายกันสองคำสั่งใน Linux และตามปกติแล้วสถานการณ์ใดที่จะใช้แต่ละสถานการณ์


5
สำหรับคำตอบที่ดีทั้งในเชิงลึกและครบถ้วนดูคำตอบนี้ที่ใช้ระบบปฏิบัติการยูนิกซ์และลินุกซ์
Guy บราซิลนั่น

คำตอบ:


38

findค้นหาในระบบจริง ช้าลง แต่ทันสมัยอยู่เสมอและมีตัวเลือกเพิ่มเติม (ขนาดเวลาการแก้ไข ... )

locateใช้ฐานข้อมูลที่สร้างขึ้นก่อนหน้านี้ (คำสั่งupdatedb) เร็วกว่ามาก แต่ใช้ฐานข้อมูล 'ที่เก่ากว่า' และค้นหาเฉพาะชื่อหรือส่วนของพวกเขา

ไม่ว่าในกรณีใดman findและman locateจะช่วยให้คุณต่อไป


1
... และupdatedbไม่ประมาณ someting find / -type f | gzip > locate.gzเช่น
F. Hauri

10
unix.stackexchange.com/questions/60205/…ตอบคำถามนี้โดยละเอียด
บ๊องเกี่ยวกับ natty

3

ทั้งคำสั่งlocateและfindคำสั่งจะค้นหาไฟล์ แต่มันทำงานได้หลายวิธี

locate จะทำงานในโหมดออฟไลน์:

  • สำหรับคำอธิบายอย่างง่ายฐานข้อมูลการจัดทำดัชนีไฟล์ในระบบ Unix ชื่อslocateจะแสดงตำแหน่งของไฟล์ทั้งหมดที่มาพร้อมกับระบบ Unix เมื่อคุณดำเนินการlocateมันจะใช้ฐานข้อมูลนั้นเพื่อค้นหาไฟล์เฉพาะ ปัญหาlocateคือถ้าคุณเพิ่งสร้างไฟล์ที่คุณต้องการค้นหาตอนนี้ค้นหาจะไม่ทำงานเพราะฐานข้อมูลslocateไม่ทันสมัย เพื่อแก้ไขปัญหานี้คุณสามารถใช้updatedbเพื่ออัพเดตฐานข้อมูลslocate การเรียกใช้งานlocateอีกครั้งจะพบไฟล์ที่สร้างขึ้นใหม่ ดังนั้นผู้ดูแลระบบ Linux หลายคนใช้cronงานเพื่ออัพเดทฐานข้อมูลslocateเป็นประจำ

find จะทำงานในโหมดออนไลน์ / "แบบเรียลไทม์"

  • มันจะไปและค้นหาไดเรกทอรีทั้งหมดเพื่อค้นหาไฟล์ที่ระบุและตรวจสอบแต่ละไฟล์ทีละไฟล์ ดังนั้นจึงต้องใช้การโทร I / O จำนวนมาก

ดังนั้นตามธรรมชาติจึงเป็นที่ชัดเจนว่าการค้นหานั้นเร็วกว่าการค้นหา แต่การค้นหานั้นเป็นเวลาจริง

หวังว่านี่จะช่วยล้างความคิด ทั้งหมดที่ดีที่สุด :)


0

locate เพียงดูฐานข้อมูลและรายงานตำแหน่งไฟล์

find ไม่ใช้ฐานข้อมูลมันจะสำรวจไดเรกทอรีและไดเรกทอรีย่อยทั้งหมดและค้นหาไฟล์ที่ตรงกับเกณฑ์ที่กำหนด


0

ทางเลือกอื่นในการใช้การค้นหาคือคำสั่งค้นหา คำสั่งนี้มักจะเร็วกว่าและสามารถค้นหาระบบไฟล์ทั้งหมดได้อย่างง่ายดาย คุณสามารถติดตั้งคำสั่งด้วย apt-get:

sudo apt-get update
sudo apt-get install mlocate

เหตุผลในการค้นหานั้นเร็วกว่าการค้นหาเนื่องจากมันอาศัยฐานข้อมูลของไฟล์ในระบบไฟล์ โดยปกติฐานข้อมูลจะได้รับการอัปเดตวันละครั้งด้วยสคริปต์ cron แต่คุณสามารถอัปเดตได้ด้วยตนเองโดยพิมพ์:

sudo updatedb

รันคำสั่งนี้ทันที โปรดจำไว้ว่าฐานข้อมูลต้องเป็นข้อมูลล่าสุดเสมอหากคุณต้องการค้นหาไฟล์ที่เพิ่งได้มาหรือสร้าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.