Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีค้นหาไฟล์ใน Linux

บทความนี้อธิบายคำสั่ง find ใน Linux พร้อม Shortcut ตำแหน่งค้นหา Expression ตัวอย่างการใช้งาน Pattern การส่งผลลัพธ์ไปยังไฟล์ และการค้นหาแล้วรันคำสั่งกับไฟล์ที่เจอ

ใช้คำสั่ง 'find' ค้นหาไฟล์ใน Linux

คำสั่งที่ใช้ค้นหาไฟล์คือ find

ไวยากรณ์พื้นฐานของ find:

find [path] [expression] [filename]

Path ปัจจุบันเป็นตำแหน่งค้นหาเริ่มต้น ค้นหาทั้งดิสก์ ใช้:

find / -name "filename"

ค้นหาในโฟลเดอร์ปัจจุบัน ใช้:

find . -name "filename"
วิธีค้นหาไฟล์ใน Linux

เมื่อค้นหาตามชื่อทั่วดิสก์ ใช้ไวยากรณ์:

  • ส่วนแรก: คำสั่ง find
  • ส่วนที่สอง: ตำแหน่งเริ่มค้นหา
  • ส่วนที่สาม: Expression กำหนดสิ่งที่ต้องการค้นหา
  • ส่วนสุดท้าย: ชื่อไฟล์ที่ต้องการ

เพื่อเข้าถึง Shell (Terminal) ในส่วนใหญ่ของ Distribution ให้คลิกไอคอนที่เกี่ยวข้อง หรือกด Ctrl+Alt+T

Shortcut ตำแหน่งค้นหา (Search Location Shortcuts)

อาร์กิวเมนต์แรกหลัง find คือตำแหน่งที่ต้องการค้นหา แม้จะระบุไดเรกทอรีเฉพาะได้ แต่สามารถใช้ Metacharacter แทนได้ 3 ตัวที่ใช้กับคำสั่งนี้:

  • Period (.): ไดเรกทอรีปัจจุบันและซับไดเรกทอรีทั้งหมด
  • Forward Slash (/): ระบบไฟล์ทั้งหมด
  • Tilde (~): ไดเรกทอรี Home ของผู้ใช้งานปัจจุบัน

การค้นหาทั้งระบบไฟล์อาจเกิด Error "Access Denied" ใช้ sudo เพื่อรันด้วยสิทธิ์สูง หากต้องเข้าถึงพื้นที่ที่บัญชีปกติไม่สามารถเข้าได้

Expressions ที่ใช้ได้

Expression ที่ใช้บ่อยที่สุดคือ -name ค้นหาชื่อไฟล์หรือโฟลเดอร์

Expression อื่นๆ ที่ใช้ได้:

  • -amin n: ไฟล์ถูกเข้าถึงล่าสุด +/- n นาที (ขึ้นอยู่กับรูปแบบเวลา)
  • -anewer: ใช้ไฟล์อ้างอิง ค้นหาไฟล์ที่ถูกเข้าถึงใหม่กว่าไฟล์อ้างอิง
  • -atime n: ไฟล์ถูกเข้าถึงมากกว่า/น้อยกว่า n วัน
  • -cmin n: ไฟล์ถูกเปลี่ยนแปลง n นาทีที่แล้ว
  • -cnewer: ใช้ไฟล์อ้างอิง ค้นหาไฟล์ที่เปลี่ยนแปลงใหม่กว่า
  • -ctime n: ไฟล์ถูกเปลี่ยนแปลงมากกว่า/น้อยกว่า n วัน
  • -empty: ไฟล์ว่างเปล่า
  • -executable: ไฟล์สามารถรันได้
  • -false: เท็จเสมอ
  • -fstype type: ไฟล์อยู่บนระบบไฟล์ที่ระบุ
  • -gid n: ไฟล์เป็นของกลุ่ม ID n
  • -group groupname: ไฟล์เป็นของกลุ่มที่ระบุ
  • -ilname pattern: ค้นหา Symbolic Link ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
  • -iname pattern: ค้นหาไฟล์ ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
  • -inum n: ค้นหาไฟล์ด้วย Inode ที่ระบุ
  • -ipath path: ค้นหา Path ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
  • -iregex expression: ค้นหา Regular Expression ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
  • -links n: ค้นหาไฟล์ด้วยจำนวน Links ที่ระบุ
  • -lname name: ค้นหา Symbolic Link
  • -mmin n: ไฟล์ถูกแก้ไข +/- n นาที
  • -mtime n: ไฟล์ถูกแก้ไขมากกว่า/น้อยกว่า n วัน
  • -name name: ค้นหาไฟล์ด้วยชื่อที่ระบุ
  • -newer name: ค้นหาไฟล์ที่แก้ไขใหม่กว่าไฟล์อ้างอิง
  • -nogroup: ค้นหาไฟล์ที่ไม่มี Group ID
  • -nouser: ค้นหาไฟล์ที่ไม่มี User ผูกมัด
  • -path path: ค้นหา Path
  • -readable: ค้นหาไฟล์ที่อ่านได้
  • -regex pattern: ค้นหาไฟล์ตรง Regular Expression
  • -type type: ค้นหาตามประเภท: -type d (Directory), -type f (File), -type l (Symlink)
  • -uid uid: User ID ตรงกับที่ระบุ
  • -user name: ไฟล์เป็นของผู้ใช้ที่ระบุ
  • -writable: ค้นหาไฟล์ที่เขียนได้

ตัวอย่างการใช้งาน Find

ค้นหาไฟล์ที่ถูกเข้าถึงมากกว่าจำนวนวันที่กำหนด

หาไฟล์ทั้งหมดใน Home Folder ที่ถูกเข้าถึงมากกว่า 100 วัน:

find ~ -atime +100

ค้นหาไฟล์และโฟลเดอร์ว่างเปล่า

หาไฟล์และโฟลเดอร์ว่างทั้งหมดในระบบ:

find / -empty

ค้นหาไฟล์ที่รันได้ (Executable) ทั้งหมด

หาไฟล์ Executable ทั้งหมดในคอมพิวเตอร์:

find / -executable -type f

ค้นหาไฟล์ที่อ่านได้ (Readable) ทั้งหมด

หาไฟล์ที่อ่านได้ทั้งหมด:

find / -readable -type f

ใช้ Pattern ค้นหาไฟล์

ค้นหาไฟล์ด้วย Pattern เช่น หาไฟล์ทุกไฟล์ที่มีนามสกุล MP3:

find / -name "*.mp3"

ขึ้นอยู่กับ Shell ที่ใช้ อาจต้อง Escape Asterisk หากรันแล้วไม่ได้ผลลัพธ์ที่คาดหวัง ให้ Quote Pattern ทั้งหมด: find / -name '*.mp3'

วิธีค้นหาไฟล์ใน Linux

ส่งผลลัพธ์ Find ไปยังไฟล์

ปัญหาของ find คืออาจคืนผลลัพธ์มากเกินไป ให้ Pipe ไปยัง tail หรือเขียนลงไฟล์:

find / -name "*.log" > logfiles.txt

ค้นหาและรันคำสั่งกับไฟล์ (Find and Execute)

เพื่อค้นหาและแก้ไขไฟล์พร้อมกัน:

find / -name "filename" -exec nano {} \;

คำสั่งนี้ค้นหาไฟล์ชื่อ filename แล้วรัน Editor nano กับไฟล์ที่เจอ

Nano คือชื่อคำสั่ง Editor ไม่ใช่ส่วนหนึ่งของไวยากรณ์