Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách tìm kiếm tệp tin trong Linux bằng lệnh find

Lệnh find — Tìm kiếm tệp tin mạnh mẽ

Lệnh find là công cụ tiêu chuẩn để tìm tệp/thư mục trong hệ thống tệp Linux. Nó duyệt đệ quy cây thư mục và lọc theo nhiều tiêu chí: tên, kích thước, thời gian, quyền, loại...

Cú pháp cơ bản

find [đường_đích_bắt_đầu] [biểu_thức_điều_kiện] [tên_tệp]

Mặc định tìm từ thư mục hiện tại. Các shortcut vị trí:

  • . — Thư mục hiện tại và thư mục con.
  • / — Toàn bộ hệ thống tệp (cần sudo để tránh lỗi permission).
  • ~ — Thư mục home của user hiện tại.

Mẹo: Mở terminal nhanh: Ctrl+Alt+T (trên hầu hết DE).

Các biểu thức (Expressions) thường dùng

Biểu thức phổ biến nhất: -name "tên_tệp" (tìm theo tên chính xác, phân biệt chữ hoa/thường).

Tìm theo tên (case-insensitive): -iname

find /home/user -iname "*.pdf"

Tìm theo loại (type)

  • -type f — Chỉ tệp thường (file).
  • -type d — Chỉ thư mục (directory).
  • -type l — Chỉ symbolic link.

Tìm theo thời gian

Biểu thứcÝ nghĩa
-atime nTruy cập cuối cách đây n ngày (+n > n ngày, -n < n ngày).
-mtime nNội dung sửa đổi cuối cách đây n ngày.
-ctime nMetadata/thông tin inode thay đổi cuối cách đây n ngày.
-amin nTruy cập cuối cách đây n phút.
-mmin nSửa đổi nội dung cuối cách đây n phút.
-cmin nThay đổi metadata cuối cách đây n phút.

Tìm theo kích thước

  • -size +100M — Lớn hơn 100 MB.
  • -size -50k — Nhỏ hơn 50 KB.
  • -size 10M — Bằng đúng 10 MB.

Đơn vị: c (byte), k (KiB), M (MiB), G (GiB).

Tìm theo quyền sở hữu & quyền truy cập

  • -user tên_user / -uid số — Chủ sở hữu.
  • -group tên_group / -gid số — Nhóm.
  • -perm 644 — Quyền chính xác.
  • -perm -u=rw — Ít nhất có quyền đọc/ghi cho owner.
  • -readable, -writable, -executable — Được đọc/ghi/thực thi bởi user hiện tại.

Khác

  • -empty — Tệp/thư mục rỗng.
  • -name "pattern" — Khớp tên (dùng wildcard *, ?).
  • -path "pattern" — Khớp đường dẫn.
  • -regex "pattern" — Khớp regex.
  • -links n — Số hard link = n.
  • -inum n — Inode number = n.

Ví dụ thực tế

1. Tìm tệp truy cập > 100 ngày trước trong thư mục home

find ~ -type f -atime +100

2. Tìm tất cả tệp và thư mục rỗng trên toàn hệ thống

find / -empty

3. Tìm tất cả tệp thực thi (executable)

find / -type f -executable

4. Tìm tất cả tệp có quyền đọc cho user hiện tại

find / -type f -readable

5. Tìm tệp .log lớn hơn 50MB trong /var/log

find /var/log -name "*.log" -size +50M

6. Tìm tệp sửa đổi trong 7 ngày qua

find /home/user -type f -mtime -7

Sử dụng Pattern (mẫu) tìm kiếm

Dùng wildcard *, ? với -name hoặc -iname:

find / -name "*.mp3"

Lưu ý: Tùy shell, có thể cần escape dấu * hoặc bọc pattern trong ngoặc đơn:

find / -name '*.mp3'

Xuất kết quả ra tệp

Kết quả quá nhiều? Chuyển hướng (redirect) hoặc pipe:

find / -name "*.log" > ~/log_files.txt
find / -name "*.tmp" | head -20
find / -name "*.bak" | tee ~/bak_files.txt

Tìm và thực thi lệnh trên kết quả (-exec)

Cú pháp: find ... -exec lệnh {} \; (dấu {} thay thế bằng đường dẫn tệp tìm được).

Ví dụ: Tìm và chỉnh sửa tệp bằng nano

find /home/user -name "config.ini" -exec nano {} \;

Ví dụ: Tìm và xóa tệp .tmp cũ hơn 30 ngày

find /tmp -name "*.tmp" -mtime +30 -exec rm {} \;

Ví dụ: Tìm và nén tất cả .log thành .gz

find /var/log -name "*.log" -exec gzip {} \;

Lưu ý hiệu năng: Dùng -exec ... + (kết thúc bằng + thay vì \;) để gom nhiều tệp vào một lệnh thực thi — nhanh hơn đáng kể.

find /var/log -name "*.log" -exec gzip {} +