นี่คือเครื่องมืออีกตัวสำหรับชุดเครื่องมือค้นหาไฟล์ของคุณใน 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