Cách sử dụng find để tìm kiếm trong Linux/Unix
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!