Cách sử dụng find để tìm kiếm trong Linux/Unix

Tác giả: 17/01/2023

Trong nền tảng Linux/Unix, đôi khi ta sẽ cần phải tìm kiếm 1 tệp hay thư mục nào đó ở nhiều đường dẫn khác nhau. Việc tìm kiếm từ root directory sẽ tốn rất nhiều thời gian không cần thiết. Do đó, lệnh find là 1 công cụ rất hữu ích để khắc phục điểm yếu này.

 

Tìm kiếm ở nhiều đường dẫn khác nhau với lệnh Find

Ví dụ như ta muốn tìm kiếm đường dẫn của file binary php, ta sử dụng 1 trong 3 cú pháp sau:

find / -name "*php"
find / -name "*php" -print
find / -name "*php" -ls

Tuy vậy, việc tìm kiếm từ root directory sẽ tốn rất nhiều thời gian cũng như tài nguyên của máy chủ, hơn nữa kết quả trả về cũng dàn trải và khó để người dùng khai thác thông tin. Việc tìm kiếm ở đúng thư mục sẽ hữu ích hơn rất nhiều:

find /usr/bin/ /bin/ /usr/local/bin/ -name "*php*"
find /usr/bin/ /bin/ /usr/local/bin/ -name "*php*" -print
find /usr/bin/ /bin/ /usr/local/bin/ -name "*php*" -ls

Hãy thử so sánh thời gian thực hiện của việc tìm kiếm ở root directory và specify directory:

time find / -name "*php"

Còn nếu tìm kiếm ở các directory chỉ định:

time find /usr/bin /bin /usr/local/bin -name "*php"

Nhìn qua cũng có thể thấy được sự khác biệt về thời gian.

Cùng đi thêm 1 ví dụ khác, giờ ta chỉ sẽ tìm kiếm file thay vì cả file và folder như trên:

find /usr/bin /bin /usr/local/bin -type f -name "*php"
time find /usr/bin /bin /usr/local/bin -type f -name "*php"

Thời gian đã giảm so với ví dụ bên trên.

Hiểu về lệnh find khi tìm kiếm trên nhiều directory

Cú pháp sử dụng find khuyến nghị là:

find /dir1 /dir2 /dirN -type f -name "filename"
find /dir1 /dir2 /dirN -type f -name "*regex*" -print
find /dir1 /dir2 /dirN -type f -name "*php*" -ls

Trong đó:

  • /dir1 /dir2: Đường dẫn muốn tìm kiếm
  • -type f: Chỉ tìm kiếm file
  • -name “pattern”: Tên file hoặc regex cần tìm kiếm
  • -iname “file”: Giống với -name nhưng giờ vẫn phân biệt chữ hoa chữ thường
  • -print: chỉ hiển thị đường dẫn của file hiện tại ra màn hình
  • -ls: cho đầu ra giống với ls -l

Tổng kết

Qua bài viết này, Nhân Hòa đã hướng dẫn những điều cơ bản nhất về lệnh find trong Linux/Unix.

Ngoài ra, để hiểu rõ hơn, đừng ngần ngại ghé qua man page của find hoặc sử dụng cú pháp –help:

find --help
man find

Cảm ơn các bạn đã đọc bài viết của Nhân Hòa, hãy tiếp tục theo dõi các bài khác tại Wiki Nhân Hòa.

Chúc các bạn luôn may mắn và thành công trong công việc!

Trả lời