Đôi khi bạn muốn truy cập một file (tệp) cụ thể nhưng không thể tìm thấy tệp đó trên hệ thống của mình. May mắn là Linux cung cấp cho bạn một số tiện ích hữu ích cho phép bạn dễ dàng tìm kiếm các tệp trên máy tính của mình.
Lệnh find là một trong những công cụ có thể được sử dụng để tìm kiếm tệp bằng tên tệp, quyền, phần mở rộng (extension), kích thước, v.v. Hướng dẫn này sẽ giải thích cách dùng lệnh Find trong Linux.
Lệnh Find là gì?
Như tên gọi của nó, lệnh find cho phép người dùng tìm kiếm các tệp có trên bộ nhớ cục bộ của họ. Không giống như các tính năng tìm kiếm thông thường có trong trình quản lý tệp Linux, lệnh find có các chức năng bổ sung có thể lọc tệp theo các điều kiện nhất định.
Ngoài ra, lệnh find cung cấp một số tiêu chí để định vị tệp trên máy tính. Bạn thậm chí có thể sử dụng biểu thức chính quy (regular expression) để đối sánh tên tệp với một mẫu cụ thể.
Cách tìm tệp trong Linux
Lệnh find có nhiều tùy chọn và chức năng để lọc các tệp dựa trên các điều kiện được chỉ định.
Tìm cú pháp lệnh
Cú pháp cơ bản của lệnh find là:
find [path] [options] [expression]
Ví dụ: lệnh sau sẽ tìm kiếm các tệp có đuôi txt trong thư mục /home .
find /home -type f -name "*.txt"
Hãy nhớ rằng trước khi tìm kiếm tệp trên bộ nhớ của mình, bạn cần có quyền đọc cho thư mục đó.
Tìm kiếm tệp theo tên
Cách sử dụng phổ biến nhất của lệnh find là tìm kiếm một tệp theo tên của nó. Để tìm tệp bằng tên tệp, hãy sử dụng flag -name với lệnh mặc định.
find /home -type f -name filename.txt
Lệnh nói trên sẽ tìm kiếm một tệp có tên là filename.txt trong thư mục /home. Tùy chọn -type f cho hệ thống biết rằng chúng ta đang tìm kiếm một File (tệp).
Nếu bạn muốn bỏ qua các chữ cái trong tên tệp là viết thường hay viết hoa, hãy thay thế tùy chọn -name bằng -iname.
find /home -type f -iname FileName
Lệnh này sẽ xác định vị trí tệp có một trong các tên sau: Filename, filename, FileName, FiLename, v.v.
Giống như bất kỳ lệnh Linux nào khác, bạn có thể sử dụng . (dấu chấm) để chỉ định đường dẫn tương đối của thư mục hiện tại.
find . -type f -name filename.txt
Tương tự, / for /root và ~ for /home cũng có thể được sử dụng.
Tìm tệp theo phần mở rộng (extension)
Tìm kiếm tệp với một phần mở rộng cụ thể có thể giúp thu hẹp kết quả tìm kiếm của bạn. Để tìm một tệp theo phần mở rộng của nó, hãy sử dụng biểu thức chính quy sau với flag -name và -iname.
find /home -type f -name "*.pdf"
Lệnh này sẽ hiển thị danh sách tất cả các tệp có phần mở rộng .pdf. Lưu ý rằng bạn sẽ phải thoát khỏi ký tự dấu hoa thị (*) bằng dấu ngoặc kép (“”) hoặc dấu gạch chéo ngược (\) để terminal diễn giải nó như một ký tự đại diện (wildcard character).
Bạn cũng có thể đảo ngược lệnh trên bằng cách sử dụng flag -not. Lệnh sau sẽ tìm kiếm các tệp không có phần mở rộng .pdf .
find /home -type f -not -name "*.pdf"
Bạn thậm chí có thể kết hợp lệnh find với các lệnh Linux khác. Ví dụ: để thay đổi quyền kiểm duyệt cho từng tệp phù hợp với điều kiện:
find /home - type f "*.pdf" -exec chmod -777 {} \;
Lệnh này sẽ tìm kiếm tất cả các tệp PDF trong thư mục /home và thay đổi quyền của chúng để bất kỳ ai cũng có thể đọc, ghi và thực thi các tệp đó.
Tìm kiếm các loại tệp cụ thể
Ngoài tệp, lệnh find cũng có thể tìm kiếm các thư mục, liên kết tượng trưng, socket* và character device* là một số loại tệp được hỗ trợ bởi find.
*Socket là điểm cuối của một liên kết hai chiều giữa hai chương trình chạy trên mạng. Socket xuất hiện cho phép 1 quy trình (process) có thể giao tiếp với 1 quy trình khác.
*Character Device (chardev) là các device được truy cập như một luồng nhị phân (byte stream – tương tự như các file trong máy tính).
Chúng ta đã sử dụng tùy chọn -type f trong lệnh find. F là viết tắt của File. Để tìm kiếm các loại tệp khác trong Linux, hãy thay thế f bằng các ký tự khác.
- f: regular files (tệp thông thường)
- d: directories (thư mục)
- l: symbolic links (liên kết tượng trưng)
- c: character devices
- b: block devices
- p: named pipe
- s: sockets
Để tìm kiếm các thư mục con có trong thư mục /home :
find /home -type d
Tìm tệp theo kích thước
Flag -size cho phép bạn tìm kiếm các tệp chiếm một lượng không gian cụ thể trên ổ đĩa. Các hậu tố sau biểu thị các kích thước tệp khác nhau:
- b: khối 512 byte
- c: byte
- w: từ hai byte
- k: Kilobyte
- M: Megabyte
- G: Gigabyte
Để tìm tất cả các tệp có kích thước tệp là 1GB:
find /home -type f -size 1G
Để tìm kiếm các tệp nhỏ hơn 1GB, hãy thêm ký tự dấu trừ ( – ) trước khi chỉ định kích thước:
find /home -type f -size -1G
Tương tự, sử dụng toán tử dấu cộng ( + ) để định vị các tệp lớn hơn 1GB:
find /home -type f -size +1G
Để tìm kiếm các tệp trong một phạm vi kích thước nhất định:
find /home -type f -size +1M -size -10M
Tìm tệp bằng dấu thời gian
Bạn có thể đã biết rằng Linux chỉ định các dấu thời gian (timestamp) cụ thể cho mọi tệp trên bộ nhớ của bạn. Các dấu thời gian này chứa thời gian sửa đổi (modified time), thời gian thay đổi (change time) và thời gian truy cập (access time).
Để tìm các tệp có thời gian sửa đổi cụ thể:
find /home -type f -name "*.txt" -mtime 5
Lệnh nói trên sẽ trả lại kết quả là tất cả các tệp đã được sửa đổi trong năm ngày qua. Tương tự, bạn cũng có thể sử dụng -atime và -ctime để lọc các tệp theo thời gian truy cập và thời gian thay đổi.
Bạn cũng có thể sử dụng dấu cộng và dấu trừ để tìm tệp lớn hơn hoặc nhỏ hơn một dấu thời gian cụ thể.
find /home -type f -name "*.txt" -mtime +5
Tìm kiếm tệp theo quyền cụ thể
Tùy chọn -perm cho phép người dùng tìm kiếm các tệp với một bộ quyền cụ thể.
find /home -type f -perm 777
Sử dụng ký tự gạch chéo lên (/) để liệt kê tệp nếu ít nhất một danh mục có đúng các quyền được cung cấp.
find /home -type f -perm /777
Tìm tệp theo chủ sở hữu
Sử dụng flag user để lấy các tệp thuộc về một người dùng cụ thể.
find /home -user randomuser
Tìm và xóa tệp
Để xóa tất cả các tệp đã lọc bằng cách sử dụng find, hãy thêm flag -delete vào cuối lệnh.
find /home -type f -name "*.pdf" -delete
Lệnh nói trên sẽ xóa tất cả các tệp PDF có trong thư mục / home .
Bạn sẽ không thể xóa các thư mục không trống với lệnh find. Bạn sẽ phải sử dụng lệnh rm để xóa các thư mục như vậy trên hệ thống Linux của mình.
Tổ chức file trong Linux
Việc tìm kiếm các file rất khó khăn nếu bạn có hàng trăm thư mục trên hệ thống của mình mà không có tên phù hợp. Lệnh find rất hữu ích khi bạn muốn lọc ra các tệp trong thư mục theo một tiêu chí cụ thể.
Dịch từ: https://www.makeuseof.com/find-command-linux/
Vân Nguyễn
Bình luận (0
)