Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญคำสั่ง 'locate' ใน Linux: คู่มือปฏิบัติพร้อมตัวอย่าง

นี่คือเครื่องมืออีกตัวสำหรับชุดเครื่องมือค้นหาไฟล์ของคุณใน Linux – คำสั่ง locate บทความนี้อธิบายวิธีใช้งาน

คำสั่ง locate ถูกออกแบบมาอย่างเฉพาะเจาะจงสำหรับค้นหาไฟล์และโฟลเดอร์โดยชื่อ มันใช้งานง่าย และสามารถค้นหาไฟล์โดยใช้รูปแบบ (patterns) ซึ่งช่วยหากคุณกำลังมองหาไฟล์ที่มีประเภท/นามสกุลเฉพาะ

การติดตั้ง locate

locate อาจไม่ได้ติดตั้งมาพร้อมระบบโดยค่าเริ่มต้น

เพื่อติดตั้งบน Debian/Ubuntu-based distributions ให้รัน:

sudo apt install mlocate

หรือบน Redhat/CentOS/Fedora:

sudo yum install mlocate

ไวยากรณ์คำสั่ง locate ใน Linux

คำสั่ง locate เร็วมาก นั่นเป็นเพราะแทนที่จะค้นหาในระบบไฟล์โดยตรง มันค้นหาในฐานข้อมูลของไฟล์ที่ถูกอัปเดตเป็นระยะ นี่ทำให้การค้นหาเร็วกว่ามาก

อย่างไรก็ตาม หมายความว่าหากไฟล์ถูกย้าย เปลี่ยนชื่อ หรือลบหลังจากครั้งล่าสุดที่ฐานข้อมูลถูกรีเฟรช มันยังคงปรากฏในผลลัพธ์

โดยค่าเริ่มต้น ฐานข้อมูลที่ locate ใช้ค้นหาไฟล์ จะถูกจัดตารางอัปเดตรายวัน แต่สามารถเรียกใช้การอัปเดตด้วยตนเองได้ หากคุณจัดระเบียบไฟล์ใหม่และต้องการค้นหาบนบันทึกที่ทันสมัย

การอัปเดตฐานข้อมูล

เพื่ออัปเดตฐานข้อมูลที่ locate ใช้ค้นหาไฟล์ ให้รัน:

sudo updatedb

การค้นหาไฟล์

ไวยากรณ์สำหรับค้นหาไฟล์ด้วย locate มีดังนี้:

locate OPTIONS PATTERN

โปรดทราบว่า:

  • OPTIONS เป็นตัวเลือก สามารถระบุได้จากตารางด้านล่าง เพื่อเปลี่ยนพฤติกรรมเริ่มต้นของคำสั่ง locate
  • PATTERN คือรูปแบบที่ชื่อไฟล์ต้องตรงกันเพื่อถือว่าเป็นผลลัพธ์ของการค้นหา
  • ผลลัพธ์สำหรับไฟล์ที่ตรงกันจะมาจาก ระบบไฟล์ทั้งหมด (entire filesystem) โดยค่าเริ่มต้น – ไม่ใช่แค่ current working directory
  • หากยังไม่มีฐานข้อมูลสร้างสำหรับคำสั่ง locate คุณอาจถูกพรอมพ์ให้สร้างหนึ่ง
  • คำสั่ง locate จะส่งคืนรหัสสถานะ 0 หากพบไฟล์ที่ตรง และ 1 หากไม่พบไฟล์หรือเกิดข้อผิดพลาด

ตัวเลือกคำสั่ง

นี่คือตัวเลือกที่ใช้บ่อยสำหรับคำสั่ง locate ตามเอกสารทางการ:

ตัวเลือก คำอธิบาย
-b จับคู่เฉพาะ base name กับรูปแบบที่ระบุ
-c แทนที่จะเขียนชื่อไฟล์บน standard output ให้เขียนจำนวนรายการที่ตรงกันอย่างเดียว
-e พิมพ์เฉพาะรายการที่อ้างอิงไฟล์ที่มีอยู่จริงในขณะที่ locate รัน
-i ไม่สนใจความแตกต่างของตัวพิมพ์เล็ก/ใหญ่เมื่อจับคู่รูปแบบ
-l ออกสำเร็จหลังพบ LIMIT รายการ หากระบุ --count จำนวนที่ได้ก็จะถูกจำกัดด้วย LIMIT เช่นกัน
-P เมื่อตรวจสอบว่าไฟล์มีอยู่ (หากระบุ --existing) อย่าติดตาม symbolic links นำหน้า ทำให้ symbolic links ที่เสียหายถูกรายงานเหมือนไฟล์อื่น
-q ไม่เขียนข้อความผิดพลาดที่พบขณะอ่านและประมวลผลฐานข้อมูล
-r ค้นหา basic regexp REGEXP ไม่มี PATTERNs อนุญาตหากใช้ตัวเลือกนี้ แต่ตัวเลือกนี้สามารถระบุหลายครั้งได้
--regex ตีความ PATTERNs ทั้งหมดเป็น extended regexps

เพื่อดูรายการตัวเลือกทั้งหมด คุณสามารถดูคู่มือผู้ใช้สำหรับคำสั่ง locate โดยรัน:

man locate

ตัวอย่างคำสั่ง locate

การใช้งานพื้นฐานที่สุดสำหรับฟังก์ชัน locate คือการหาไฟล์ที่ตรงกับชื่อที่กำหนด:

locate filename

รายการเส้นทางไฟล์สำหรับแต่ละไฟล์ที่ตรงกันในระบบไฟล์จะถูกส่งคืน

ตามที่อธิบายไว้ข้างต้น ระบบไฟล์เองไม่ได้ถูกค้นหาโดย locate – แต่ค้นหาในฐานข้อมูลที่จัดทำดัชนีระบบไฟล์และอัปเดตเป็นระยะ นี่ทำให้เร็ว แต่อาจก่อให้เกิดปัญหาหากคุณเพิ่งย้ายไฟล์จำนวนมากและฐานข้อมูลยังไม่ได้อัปเดต

ตัวเลือก -e จะบังคับให้ locate ตรวจสอบว่าไฟล์ยังคงอยู่ในระบบไฟล์ก่อนเพิ่มเข้าไปในรายการผลลัพธ์:

locate -e filename

สิ่งนี้ไม่แก้ปัญหาไฟล์ที่เพิ่งสร้างหรือย้ายยังไม่อยู่ในผลลัพธ์ (หรือปรากฏที่ตำแหน่งเก่า) แต่แก้ปัญหาไฟล์ที่ถูกลบออกแล้วยังปรากฏในผลลัพธ์

สามารถระบุ Patterns ได้ เพื่อให้คุณค้นหาโดยนามสกุลไฟล์ได้ง่าย:

locate *.mp3

ตัวอย่างข้างต้นจะส่งคืนไฟล์ mp3 ทั้งหมดที่พบในฐานข้อมูล

คำสั่ง locate ตัวพิมพ์เล็ก/ใหญ่ (case-sensitive) โดยค่าเริ่มต้น – สามารถเปลี่ยนได้ด้วยตัวเลือก -i:

locate -i FILENAME

คุณยังสามารถนับจำนวนไฟล์ที่ตรงกันได้ด้วยตัวเลือก -c:

locate -c filename