Cách tìm kiếm tệp và thư mục bằng lệnh Find trong Linux
Các nhà phát triển và người dùng Linux có kinh nghiệm chọn Linux Terminal để tương tác với hệ điều hành và thực hiện các tác vụ vì khả năng mà nó cung cấp. Giao diện dòng lệnh này cung cấp các công cụ hữu ích và các tính năng có giá trị để tăng tốc và tạo điều kiện thuận lợi cho các tác vụ. Trong bài viết này, chúng tôi sẽ hướng dẫn cách sử dụng lệnh Find trong VPS Linux để tìm kiếm các tệp trong một thư mục cụ thể và các thư mục con của nó.
Tại sao nên sử dụng lệnh Find trong Linux?
Lệnh Find có thể giúp bạn tìm kiếm các tệp và thư mục mong muốn. bạn có thể tìm thấy các tệp trong hệ thống phân cấp thư mục của hệ thống Linux dựa trên các bộ lọc và tham số khác nhau mà bạn đã chỉ định, chẳng hạn như kích thước, tên, quyền, loại, tiện ích mở rộng, cấp truy cập, chủ sở hữu, ngày và giờ,… bằng lệnh Find. Ngoài ra, bạn có thể áp dụng một thao tác trên các tệp sau khi tìm thấy tệp mong muốn của mình.
Lệnh Find là một công cụ mạnh mẽ và tuyệt vời trong Linux sử dụng cơ chế điều kiện đơn giản để tìm danh sách các tệp phù hợp với các điều kiện nhất định do người dùng chỉ định. Lệnh Find là một trong những lệnh quan trọng nhất và được sử dụng nhiều nhất trong tất cả các hệ điều hành dựa trên Linux và Unix mà mọi người dùng Linux nên làm quen.
Do đó, sau khi mua VPS Linux, việc tìm hiểu các câu lệnh Linux nên là một trong những ưu tiên của những người quản lý. Với mục tiêu là để cải thiện hiệu suất cho các dự án của họ. Bạn đã bao giờ tìm kiếm tệp hoặc thư mục mong muốn trong Linux, nhưng bạn không biết cách tìm tệp mong muốn bằng các bộ lọc cụ thể? Tìm kiếm tệp và thư mục trong Linux Terminal có thể gây khó khăn cho nhiều người dùng và họ thậm chí không biết cách tìm kiếm tệp họ muốn. Hãy theo dõi nội dung tiếp theo để biết cách sử dụng lệnh Find trong Linux.
=>> Đọc thêm: Cách cài đặt lại Linux Ubuntu đơn giản và nhanh chóng
Cú pháp lệnh Find
Lúc đầu, tốt hơn là bạn nên làm quen với cú pháp chính của lệnh Find, như sau:
find [path] [options] [expression]
- Thuộc tính [path]: Trong phần này, bạn chỉ định thư mục mà bạn muốn tìm kiếm tệp.
- Thuộc tính [options]: Bạn xác định các yếu tố mà bạn lọc khi tìm kiếm tệp, chẳng hạn như tên, quyền và ngày. Tính năng này có thể giám sát các hoạt động như phương pháp tối ưu hóa quy trình tìm kiếm, liên kết tượng trưng và tùy chọn gỡ lỗi.
- Thuộc tính [expression]: Nó xác định các hành động bạn thực hiện với tệp và nó bao gồm các mẫu và tùy chọn tìm kiếm. Nó cũng kiểm soát hệ thống phân cấp thư mục để tìm các tệp trong thư mục.
Ví dụ: để tìm các tệp kết thúc bằng .conf trong thư mục /usr, bạn phải chạy lệnh sau:
find /usr -type f -name "*.conf"
Output:
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .
Như bạn có thể thấy, trong ví dụ này, chúng tôi đã tìm kiếm tệp theo loại và tên của chúng. Lệnh Find đã cho phép xem xét các tiêu chí khác nhau trong việc tìm kiếm tệp bằng cách kết hợp các tùy chọn. Trong cú pháp chính của lệnh Find, hãy phân tách các thuật ngữ bằng -and hoặc -or. Chú ý như sau:
find -name query_1 -or -name query_2
Do đó, trong kết quả của lệnh trước, chúng ta sẽ thấy các tệp có tên khớp với truy vấn 1 hoặc truy vấn 2.
Bạn có thể thay thế các tính năng bạn muốn trong cú pháp chính của lệnh Fìm dựa trên nhu cầu của bạn.
Lưu ý: Để thực hiện lệnh Find tìm kiếm một tệp trong một thư mục được chỉ định, người dùng phải có các đặc quyền cần thiết để đọc các tệp trong thư mục.
Tối ưu quá trình tìm file bằng lệnh Find
Để tối ưu hóa hiệu suất của lệnh find trong việc tìm tệp và thư mục, bạn có thể thay đổi cấu hình mặc định cho lệnh Find bằng các tùy chọn áp dụng. Các tùy chọn lệnh Find như sau:
- -L: Để tìm kiếm và tìm các liên kết tượng trưng bằng lệnh Find, hãy thêm tùy chọn -L vào cú pháp chính của lệnh Find.
- -O1: Đây là một loại chiến lược lệnh Find để tìm kiếm theo mặc định với bộ lọc tên tệp.
- -O2: Ngoài việc ưu tiên bộ lọc tên tệp, nó còn chạy bộ lọc loại tệp trước khi chạy các thử nghiệm khác.
- -O3: Đây là cách tốt nhất để tối ưu hóa quá trình tìm kiếm tệp .Vì theo mặc định nó tổ chức tất cả các bài kiểm tra dựa trên xác suất thành công và sử dụng tài nguyên hiệu quả.
- -iname: Bỏ qua phân biệt chữ hoa chữ thường trong tìm kiếm.
- -maxdepth X: Tìm kiếm độ sâu của nhánh chính và nhánh phụ của X.
- -not option: Nó tìm thấy tất cả các mục ngoại trừ mục kiểm tra mà bạn đã xác định.
Tìm tệp dựa trên loại tệp
Một trong những bộ lọc tìm kiếm tệp sử dụng lệnh find là bộ lọc Type, bạn có thể thực thi dưới dạng cú pháp sau:
find -type "type_descriptor "query
Bằng cách thêm cờ “-type” vào lệnh Find, bạn có thể tìm kiếm tệp và thư mục dựa trên loại của nó. Ngoài ra, có các tùy chọn để tìm kiếm tệp dựa trên loại tệp mà bạn có thể thêm vào lệnh Find cho các mục đích khác nhau, bao gồm các tùy chọn sau:
- -type f: tìm kiếm các tập tin.
- -type d: tìm kiếm thư mục.
- -type l: tìm kiếm các liên kết tượng trưng.
- -type c: tìm kiếm các thiết bị ký tự.
- -type b: tìm kiếm các thiết bị khối.
- -type s: tìm kiếm ổ cắm mong muốn.
- -type p: tìm kiếm tên đường ống (FIFO).
Ví dụ: để tìm tất cả các thiết bị ký tự trong thư mục /dev của hệ thống Linux của bạn, bạn nên chạy lệnh find /dev -type c. Hoặc nếu bạn muốn tìm tất cả các thư mục trong hệ thống của mình, bạn nên nhập lệnh find . -type d.
=>> Đọc thêm: Cách kiểm tra số lần đăng nhập SSH không thành công trong VPS Linux
Tìm tệp dựa trên tên tệp
Cách dễ nhất để tìm tệp là tìm tệp theo tên tệp. Để tìm tệp bằng lệnh Find dựa trên tên tệp, bạn phải chạy lệnh sau:
find -name "query"
Lưu ý: Khi tìm tệp bằng cách chỉ định tiêu chí tên tệp trong lệnh Find, bạn phải nhớ rằng lệnh Find chú ý đến chữ hoa và chữ thường của tên tệp. Để bỏ qua phân biệt chữ hoa chữ thường khi bạn tìm kiếm bằng lệnh này, bạn phải Thêm tùy chọn inname vào lệnh Find:
find -iname "query"
Để tìm các tệp có tên không khớp với mẫu bạn đã chỉ định, hãy sử dụng lệnh sau:
find -not -name "query_to_avoid"
Để đảo ngược quá trình tìm kiếm, bạn cũng có thể sử dụng ký hiệu (!) trong cú pháp của lệnh Find:
find \! -name "query_to_avoid"
Tìm tệp dựa trên phần mở rộng tệp
Bạn có thể tìm kiếm một tệp cụ thể thông qua phần mở rộng tệp bằng cách thực hiện lệnh Find trong Linux. Phương pháp này không khác biệt đáng kể so với tìm kiếm tệp dựa trên tên tệp. Ví dụ: nếu bạn muốn tìm kiếm các tệp kết thúc bằng *.txt trong thư mục /home/username/ và các thư mục con của nó, bạn phải nhập lệnh sau:
find /home/username/ -name "*.txt "
Lưu ý ở phương pháp này bạn phải đặt mẫu trong ký hiệu trích dẫn cùng với dấu * để quá trình tìm file diễn ra chính xác. Kết quả là bạn sẽ tìm thấy các tệp kết thúc bằng .txt cùng với thư mục chứa các tệp đó.
Nếu bạn muốn tìm các tệp không kết thúc bằng phần mở rộng .txt và không khớp với mẫu bạn đã xác định, bạn nên chạy lệnh sau:
find /home/username/ -not -name "*.txt "
Tìm tệp dựa trên quyền
Tùy chọn -perm được sử dụng để tìm kiếm tệp thông qua quyền trong lệnh Find. Trong trường hợp đó, bạn phải nhập mã quyền trong lệnh Find. Ví dụ muốn tìm file có quyền 644 thì bạn nhập lệnh Find như sau:
find / -perm 644
Trong đầu ra của lệnh này, các tệp phù hợp với quyền 644 được tìm kiếm và tìm thấy. Để chỉ định quyền tối thiểu trong tiêu chí tìm kiếm tệp, bạn cần thay đổi cú pháp chính của lệnh Find như sau:
find / -perm -644
Như bạn có thể thấy, để xác định ít nhất quyền trước mã giấy phép, chúng tôi sử dụng dấu trừ để tìm tất cả các tệp có giấy phép bổ sung. Ví dụ: trong đầu ra của lệnh trước đó, các tệp có quyền 844 cũng được tìm thấy.
Tìm tệp dựa trên chủ sở hữu
Trong trường hợp bạn có thể đang tìm tệp thuộc về người dùng hoặc nhóm và bạn không có bất kỳ thông tin nào khác về tệp ngoại trừ quyền sở hữu tệp. Trong tình huống này, lệnh Find sẽ giúp bạn. Bạn có thể đạt được mục tiêu của mình bằng cách sử dụng các tùy chọn như -user và -group và dễ dàng tìm thấy tệp mong muốn.
Giả sử bạn đang tìm một tệp được tạo và sử dụng bởi người dùng có tên “Opera” và nằm trong thư mục /var, hãy chạy lệnh sau để tìm tệp này:
find /var -user opera
Bằng cách thay thế -group trong lệnh trước đó, bạn cũng có thể tìm kiếm tệp thuộc về một nhóm.
Tìm tệp dựa trên kích thước
Bằng cách sử dụng lệnh Find, người dùng trong Linux có thể tìm kiếm một tệp theo kích thước của nó. Với mục đích này, chỉ cần thêm tham số -size vào lệnh Find cùng với số thuộc về kích thước của tệp bạn đang tìm kiếm.
Để lọc tìm kiếm tệp theo kích thước, bạn phải chỉ định kích thước của tệp theo byte, megabyte, gigabyte hoặc kích thước khác. Hậu tố c được sử dụng để xác định kích thước tính bằng byte. Hậu tố k được sử dụng để xác định kích thước tính bằng kilobyte. Hậu tố M được sử dụng để xác định kích thước tính bằng megabyte. Hậu tố G được sử dụng để xác định kích thước tính bằng gigabyte. Và hậu tố b được sử dụng để xác định kích thước theo khối 512 byte.
Hãy chú ý đến ví dụ này để hiểu rõ hơn cách lọc tìm kiếm theo kích thước bằng lệnh Find:
find /tmp -size 1024c
Đầu ra của lệnh này sẽ hiển thị tất cả các tệp có kích thước 1024 byte trong thư mục /tmp.
Ví dụ: nếu bạn đang tìm tệp có kích thước nhỏ hơn 1024, bạn nên thực hiện cú pháp sau để đạt được điều mình muốn:
find /tmp -size -1024c
Để tìm kiếm các tệp có kích thước lớn hơn 1024 byte, bạn phải nhập lệnh sau:
find /tmp -size +1024c
Khi xác định bộ lọc kích thước, bạn có thể xem xét một phạm vi cho kích thước của tệp và tìm kiếm các tệp có kích thước nằm trong phạm vi định nghĩa của bạn. Ví dụ: nếu bạn đang tìm kiếm các tệp có kích thước từ 1 đến 2 MB, bạn nên chạy lệnh sau:
find . -type f -size +1M -size 2M
Lưu ý: Dấu “.” biểu tượng cho biết tìm kiếm trong thư mục hiện tại.
=>> Đọc thêm: Cách cài đặt Dropbox trên Ubuntu (sử dụng Terminal và GUI)
Tìm tệp dựa trên thời gian
Khi người dùng đọc nội dung của một tệp hoặc thực hiện một thay đổi trong đó và lưu nó, thời gian đó dữ liệu được lưu trong tệp. Dữ liệu thời gian này của mỗi tệp được chia thành ba loại: thời gian truy cập (khi bạn truy cập nội dung của tệp), thời gian sửa đổi (lần cuối cùng bạn chỉnh sửa tệp) và thời gian thay đổi (lần cuối cùng bạn sửa đổi siêu dữ liệu inode của tệp).
Sử dụng lệnh Find bạn có thể lọc phân cấp thư mục dựa trên thời gian sửa đổi tệp cuối cùng để tìm kiếm tệp. Để lọc dựa trên thời gian, bạn có thể tìm kiếm tệp của mình trong khoảng thời gian mong muốn bằng cách sử dụng biểu tượng – và + cùng với khoảng thời gian bạn đang xem xét. Ví dụ: để tìm kiếm tệp đã được sửa đổi lần cuối trong 5 ngày qua và nằm trong thư mục /usr, lệnh sau được thực thi:
find /usr -mtime 5
Để tìm kiếm các tệp mà bạn đã truy cập chưa đầy 5 ngày trước, hãy nhập lệnh sau:
find /usr -atime -5
Để tìm các tệp có thông tin meta bạn đã chỉnh sửa hơn 5 ngày trước, hãy chạy lệnh sau:
find /usr -ctime +5
Lệnh Find không giới hạn bạn chỉ định ngày trong việc xác định bộ lọc thời gian khi tìm kiếm tệp, bạn có thể xác định tham số phút. Các bạn chú ý ví dụ sau để biết cách chạy lệnh tìm file trong vài phút, nếu muốn tìm file vừa soạn chưa đầy 5 phút thì chạy lệnh sau:
find /usr -mmin -5
Với lệnh Find, bạn có thể chỉ định tệp tham chiếu và tìm kiếm các tệp được tạo gần đây nhất so với tệp tham chiếu:
find / -newer reference_file
Tìm tệp dựa trên nội dung bằng cách kết hợp các lệnh find và grep
Chỉ riêng lệnh Find trong Linux không thể tìm kiếm tệp thông qua nội dung của chúng và có thể tìm kiếm tệp thông qua loại, tên, thời gian, quyền sở hữu và siêu dữ liệu. Nếu bạn muốn tìm một tệp thông qua nội dung của nó, công cụ grep sẽ giúp công cụ Find tìm kiếm một chuỗi ký tự và từ cụ thể.
Nếu bạn muốn tìm kiếm một tệp văn bản dựa trên nội dung của “example” trong hệ thống phân cấp thư mục hiện tại, lệnh bạn nên chạy như sau:
find . -type f -exec grep "example" '{}' \; -print
Do đó, lệnh trước tìm kiếm cụm từ “example” trong các tệp văn bản trong thư mục hiện tại và hiển thị các chuỗi văn bản có chứa cụm từ “example”.
Tìm tệp bằng lệnh Find và xử lý tệp
Một ưu điểm khác của lệnh Find là xử lý tệp bằng cách thực hiện lệnh sau khi tìm thấy tệp mong muốn. Với mục đích này, hãy thêm -execoption vào lệnh để chạy các lệnh có -exec trong thư mục gốc của quy trình. Ví dụ: để tìm các tệp có tên “example.conf” trong thư mục hiện tại và sau đó thay đổi quyền của các tệp được tìm thấy, hãy chạy lệnh sau:
find . -name "example.conf" -exec chmod o+r '{}' \;
Bằng cách thực hiện lệnh trước đó, các tệp có tiêu đề “example.conf” được tìm thấy trong thư mục hiện tại và lệnh chmod o+r được thực thi để thay đổi quyền của các tệp được tìm thấy.
Để có hiệu suất xử lý tốt hơn và bảo mật được cải thiện, nên sử dụng -execdiroption.
Lưu ý: Khi thực hiện the-execor-execdirparameters, bạn sẽ không thấy yêu cầu xác nhận trước khi xử lý. Bạn nên thay thế -execwith-okand-execdirwith-okdirif mà bạn muốn chấp nhận xác nhận được yêu cầu trước khi hành động.
Tìm tệp bằng lệnh Find và xóa tệp
Sau khi tìm thấy tệp phù hợp với mẫu và tiêu chí bạn đã chỉ định, bạn có thể xóa tệp mong muốn bằng cách thêm tùy chọn xóa vào lệnh Find trong Linux. Để xóa một tệp được tìm thấy dựa trên tiêu chí của bạn, hãy sử dụng lệnh sau:
find . -iname mytextfile1.txt -exec rm {} \;
Đầu ra của lệnh trước đó xóa tệp Mytext 1. Để xóa tất cả các tệp phân cấp có phần mở rộng .txt và nằm trong thư mục hiện tại, hãy nhập lệnh sau:
find . -name *.txt -delete
Trong bài viết này, chúng tôi đã giúp bạn làm quen với lệnh Find và học cách sử dụng lệnh Find trong VPS Linux để tìm kiếm tệp và thư mục bằng cách xác định các tiêu chí khác nhau trong hệ thống. Hy vọng rằng nội dung được chia sẻ này sẽ giúp bạn tăng tốc và tạo điều kiện thuận lợi cho quá trình tìm kiếm tệp cho các mục đích khác nhau. Chúc các bạn thành công!