Giới thiệu
Lệnh find trong Linux là một công cụ mạnh mẽ và linh hoạt giúp người dùng tìm kiếm các file và thư mục trong hệ thống. Với khả năng tìm kiếm theo nhiều tiêu chí khác nhau, lệnh này trở thành công cụ không thể thiếu đối với những ai làm việc với hệ điều hành Linux.
Cấu trúc cơ bản của lệnh find
find [đường_dẫn] [tùy_chọn] [các_điều_kiện]- Đường dẫn: Là nơi bạn muốn tìm kiếm. Nếu không chỉ định, find sẽ tìm kiếm từ thư mục hiện tại.
- Tùy chọn: Là các tham số bạn có thể sử dụng để tinh chỉnh kết quả tìm kiếm, như tìm theo tên file, kích thước, ngày sửa đổi, v.v.
- Điều kiện: Điều kiện tìm kiếm như tên file, kích thước, kiểu file,…
Ví dụ cơ bản của lệnh find
Tìm tất cả các file trong thư mục hiện tại:
find .Lệnh này sẽ tìm tất cả các file và thư mục bắt đầu từ thư mục hiện tại.
Tìm các file theo tên:
Đây có lẽ là cách sử dụng cơ bản nhất và tìm chính xác theo tên bạn đưa vào. Giả sử bạn có một loạt các với tên file.txt trong cả thư mục hiện hành và các thư mục con, cháu của nó. bạn sử dụng -name rồi đến tên file trong cặp “” như ví dụ dưới :
find /home/user/ -name "file.txt"Tìm file có tên chính xác là file.txt trong thư mục /home/user/ và các thư mục con.
Tìm các file theo tên nhưng không phân biệt chữ hoa chữ thường:
Giống với trên nhưng khác ở chỗ bạn chỉ cần thêm i (tức là ignore) vào là bạn có thể tìm theo tên mà không phân biệt hoa thường.
find -iname "file.txt"
- Tip 1 : Như bạn thấy thì find sẽ tìm theo cả tên thư mục nên để hạn chế, bạn hãy chỉ định loại cần tìm là chỉ file mà thôi bằng cách thêm vào -type f. Tìm thư mục sẽ là -type d
- Tip 2 : nếu bạn muốn tìm các file và thư mục không có tên là File.txt thì hãy thêm -not vào trước -name hay -iname để phủ định kết quả.
Tìm theo thư mục:
Như ở trên bạn đang tìm all trong máy tính của bạn, nhưng nếu bạn chỉ định thư mục tìm kiếm thì find chỉ tìm trong đó mà thôi. Ngoài ra, nếu bạn không muốn tìm quá sâu bên trong thư mục đó, bạn sẽ dùng đến mindepth và maxdepth. Bạn chỉ tìm trong thư mục /home và trong thư mục con trự tiếp của nó thì sẽ như sau :
find /home -iname "File.txt" -maxdepth 1 -type f
Hơn nữa bạn có thể sử dụng kết hợp với mindepth để tìm trong khoảng level nào đó của thư mục :
find /home -iname "File.txt" mindepth 1 -maxdepth 2 -type f
Như trên thì /home là điểm bắt đầu, sâu xuống 1 level là để /yourname, tối đa tìm ở level 2 là /file và chúng ta có kết quả như trên.
Tìm các file theo phần mở rộng:
Tìm tất cả các file có đuôi .log trong thư mục /var/log/.
find /var/log/ -name "*.log"
Sử dụng các điều kiện tìm kiếm với lệnh find
Lệnh find cho phép bạn kết hợp nhiều điều kiện để tìm kiếm chính xác hơn. Dưới đây là một số ví dụ về cách sử dụng các điều kiện phổ biến.
Tìm file có kích thước:
Lệnh find có thể tìm các file theo kích thước với tùy chọn -size. Bạn có thể sử dụng các đơn vị như k (KB), M (MB), và G (GB). Ví dụ, để tìm các file có kích thước lớn hơn 100MB trong thư mục /home:
find /home/ -size +100M
Để tìm các file có kích thước nhỏ hơn 1MB, bạn sử dụng:
find /home/ -size -1M
Tìm file theo ngày sửa đổi:
Trước tiên nếu bạn chưa biết thì cần hiểu đối với 1 file nó sẽ có 3 yếu tố thời gian như sau :
- Thời gian truy cập (access time) : là thời điểm cuối cùng mà file đó được bạn hay ai đó truy cập vào
- Thời gian chỉnh sửa (modification time) : nếu ai đó truy cập vào file mà có chỉnh sửa nội dung nào đó thì chính là thời gian chỉnh sửa này, nó khác với access time nhé.
- Thời gian thay đổi : mỗi file sẽ có một inode number riêng của chúng -> đây chính là thời điểm cuối cùng mà inode của 1 file bị thay đổi.
Ví dụ: Để tìm các file đã được sửa đổi trong 7 ngày qua:
find /home/ -mtime -7
- -mtime -7: Tìm các file đã sửa đổi trong vòng 7 ngày.
- -mtime +30: Tìm các file đã sửa đổi hơn 30 ngày trước.
- -mtime 0: Tìm các file đã được sửa đổi trong ngày hôm nay.
Với find command thì bạn có thể chỉ định thời gian đến từng phút (dùng min hoặc theo từng ngày một (dùng time). Ví dụ, tôi thường download file mà không để ý tên file là gì rồi mở file ra ngay, chỉnh sửa rồi sau đó save lại. Và một thời gian cần đến file đó thì rất khó để tìm trong đống file trong thư mục Downloads.
find /home/myname/Downloads -name *.xlsx -type f -mtime -1Câu trên nghĩa là tôi tìm kiếm tất cả các file Excel mà đã được chỉnh sửa trong vòng 1 ngày trước.
Tìm file theo quyền truy cập:
Bạn có thể sử dụng tùy chọn -perm để tìm các file có quyền truy cập cụ thể. Ví dụ, tìm các file có quyền đọc, ghi và thực thi cho người dùng:
find /home/user/ -perm 755Tìm và thực thi lệnh trên file tìm thấy
Một trong những tính năng mạnh mẽ của lệnh find là khả năng kết hợp với các lệnh khác thông qua tùy chọn -exec. Ví dụ, để tìm tất cả các file .log trong thư mục /var/log/ và đếm số dòng trong mỗi file, bạn có thể sử dụng lệnh:
find /var/log/ -name "*.log" -exec wc -l {} \;Hoặc bạn đnag muốn tìm các file backup .zip và xuất ra file:
find /home/ -name "*.zip" -type f > file_backup.txt
Lệnh trên sẽ tìm kím các file .zip trong đường dẫn /home/ và ghi các đường dẫn file .zip tìm được vào file file_backup.txt.
Kết luận
Lệnh find trong Linux là một công cụ mạnh mẽ và linh hoạt giúp bạn tìm kiếm file và thư mục theo nhiều điều kiện khác nhau. Từ các lệnh cơ bản như tìm kiếm theo tên file đến các lệnh nâng cao như tìm kiếm theo kích thước, ngày sửa đổi, và thực thi lệnh trên các file tìm thấy, find là một công cụ không thể thiếu cho những ai làm việc với hệ thống Linux.
Khi làm quen và thành thạo với lệnh find, bạn sẽ có thể tối ưu hóa việc quản lý và tìm kiếm file trên hệ thống Linux một cách nhanh chóng và hiệu quả.
