ใน Linux มีหลายวิธีค้นหาไฟล์จากเทอร์มินัล คำสั่งหลัก 4 ตัวคือ find, locate, which, whereis มาดูความคล้ายคลึงและความต่างกัน
1. find
ค้นหาไฟล์ในไดเรกทอรีที่ระบุ (หรือไดเรกทอรีปัจจุบันถ้าไม่ระบุ) รองรับเงื่อนไขหลากหลาย: ชื่อไฟล์, เวลา (timestamp), สิทธิ์, ขนาด, ประเภท, เจ้าของ และรองรับ Regular Expression
ตัวอย่าง: ค้นหาไฟล์นามสกุล .txt ในไดเรกทอรีปัจจุบัน
find . -name "*.txt"
2. locate
ค้นหาจากฐานข้อมูล mlocate.db (อยู่ที่ /var/lib/mlocate/mlocate.db) ซึ่ง cron อัปเดตทุกเช้า ทำให้เร็วกว่า find มาก
locate filename
แต่ไฟล์ที่เพิ่งสร้างในวันนั้นยังไม่มีในฐานข้อมูล ต้องรัน sudo updatedb ก่อนจึงจะค้นพบ
3. which
ค้นหา พาธเต็มของไฟล์รันได้ (executable) ในโฟลเดอร์ที่อยู่ในตัวแปร $PATH และ $MANPATH
which cmd: แสดงพาธแรกที่เจอwhich -a cmd: แสดงทุกพาธที่เจอwhich cmd1 cmd2: ค้นหลายคำสั่งพร้อมกัน
4. whereis
ค้นหาข้อมูล 3 อย่างของ executable:
- พาธไบนารี (binary)
- พาธซอร์สโค้ด (source code)
- พาธคู่มือ (manual page)
whereis bzgrep
สวิตช์ควบคุมการค้นหา:
-b: ค้นเฉพาะไบนารี,-Bระบุโฟลเดอร์ค้นหาไบนารี-s: ค้นเฉพาะซอร์ส,-Sระบุโฟลเดอร์ค้นหาซอร์ส-m: ค้นเฉพาะ manual,-Mระบุโฟลเดอร์ค้นหา manual-f: ระบุรายการไบนารีที่ต้องการค้น-l: แสดงโฟลเดอร์ทั้งหมดที่ whereis ใช้ค้นหา
สรุป
เครื่องมือค้นหาในเทอร์มินัลมีมากมาย เข้าใจข้อแตกต่างจะช่วยเลือกใช้งานได้ถูกต้อง: find ยืดหยุ่นที่สุด, locate เร็วแต่อัปเดตช้า, which สำหรับ executable ใน PATH, whereis สำหรับ binary/source/man รวมกัน รายละเอียดเพิ่มเติมดูใน man page ของแต่ละคำสั่ง