Bạn có biết một bản cài đặt mới của Linux có bao nhiêu tệp không? Nếu bạn lấy phân phối PopOS! Linux làm ví dụ, có hơn 31.000 tệp. Đó là trước khi bạn bắt đầu tạo bất kỳ tài liệu, lưu trữ nhạc, tải xuống PDF, hay tổ chức hình ảnh nào.
Vì vậy, việc tìm đúng tệp hoặc thư mục trong Linux khi bạn cần nó trở thành một thách thức. Trong bài viết này, bạn sẽ học cách sử dụng lệnh FIND trong Linux, và chúng tôi sẽ cung cấp cho bạn tất cả các ví dụ có thể.
Cú pháp lệnh FIND trong Linux
Cú pháp đề cập đến cách các từ hoặc lệnh được ghép lại với nhau. Cũng như một câu bình thường có thể trở nên vô nghĩa chỉ bằng cách xáo trộn các từ, các lệnh có thể thất bại nếu không được sử dụng với cú pháp đúng.
find [đường_dẫn] [điều_kiện] [hành_động]
Đây là ý nghĩa của chúng:
find – khởi động tiện ích Find trong Linux
đường_dẫn – nơi tìm kiếm
điều_kiện – các đối số bạn muốn áp dụng cho tìm kiếm
hành_động – những gì bạn muốn làm với kết quả
Một ví dụ đơn giản sử dụng cả ba trông như sau:
find . -name file-sample.rtf -print
Như bạn đoán, điều này sẽ tìm tên tệp file-sample.rtf.
Dấu chấm (.) đường_dẫn báo cho find tìm trong thư mục hiện tại và bất kỳ thư mục nào bên trong nó.
Điều kiện -name báo cho find lấy tệp với tên cụ thể đó.
Hành động -print báo cho FIND hiển thị kết quả trên màn hình.
Dấu chấm và -print là mặc định cho lệnh find. Vì vậy, nó vẫn sẽ làm điều tương tự nếu bạn không sử dụng chúng. Vì vậy, find -name file-sample.rtf sẽ cho bạn cùng kết quả.
Tìm kiếm trong thư mục khác với Linux FIND
Bạn có thể tìm kiếm trong một thư mục khác với thư mục bạn đang ở. Chỉ cần chèn đường dẫn đến thư mục sau FIND. Nếu bạn đang ở thư mục gốc và biết tệp nằm ở đâu đó trong thư mục home/user, bạn sẽ sử dụng:
find home/user -name file-sample.rtf
Đây vẫn là tìm kiếm đệ quy, vì vậy nó sẽ đi qua mọi thư mục dưới user.
Tìm kiếm nhiều thư mục với Linux FIND
Nếu bạn muốn tìm kiếm trong nhiều thư mục cùng một lúc, chỉ cần liệt kê chúng trong lệnh, cách nhau bởi dấu cách.
find /lib /var /bin -name file-sample.rtf
Linux FIND không đệ quy hoặc giới hạn đệ quy
Nếu bạn sử dụng lệnh FIND ở trên ở cấp gốc, nó sẽ nhìn qua mọi thư mục trên hệ thống. Vì vậy, nếu bạn muốn chỉ dừng ở thư mục hiện tại, hãy sử dụng tùy chọn -maxdepth . Số sau -maxdepth báo cho Find biết bao nhiêu cấp độ sâu trước khi dừng.
Sử dụng -maxdepth 1 có nghĩa là chỉ thư mục này.
find -name file-sample.rtf -maxdepth 1
Sử dụng -maxdepth 2 hoặc số lớn hơn có nghĩa là đi sâu nhiều cấp độ hơn.
find -maxdepth 5 -name file-sample.rtf
Ví dụ ký tự đại diện (Wildcard) với Linux FIND
Lệnh FIND sử dụng dấu sao (*) làm ký tự đại diện. Sử dụng nó cho bất kỳ phần nào của tên mà bạn không chắc chắn. Nó có thể được sử dụng nhiều hơn một lần trong tên. Nếu không có loại tệp như một phần của tên tệp, kết quả cũng sẽ bao gồm các thư mục khớp.
find home/user -name file*sample*
Ví dụ tìm theo loại với Linux FIND
Để chỉ tìm kiếm tệp hoặc thư mục, hãy sử dụng tùy chọn -type và bộ mô tả phù hợp. Có một vài loại, nhưng tệp và thư mục là phổ biến nhất:
f – tệp
d – thư mục
b – thiết bị khối
c – thiết bị ký tự
l – liên kết tượng trưng
s – socket
find home/user -name file*sample* -type d
Ví dụ tìm không phân biệt chữ hoa chữ thường với Linux FIND
Khác với Windows, Linux quan tâm đến việc một chữ cái là in hoa hay thường. Vì vậy, nếu bạn muốn nó tìm cả File-Sample.rtf và file-sample.rtf, hãy sử dụng tùy chọn -iname .
find home/user -iname File-Sample.rtf
Ví dụ tìm nhiều tệp với Linux FIND
Giả sử bạn muốn tìm cả phiên bản .rtf và .html của một tệp. Điều đó có thể thực hiện trong một lệnh sử dụng toán tử -o (hoặc). Trong một số distro, bạn có thể cần đặt tên bên trong dấu ngoặc, như ( -name file-sample.rtf -o -name file-sample.html ).
find home/user -name file-sample.rtf -o -name file-sample.html
Linux FIND tệp không khớp với tên
Có lẽ bạn biết có phiên bản .html của một tệp, nhưng không biết có những tệp khác không. Bạn có thể lọc phiên bản .html ra khỏi tìm kiếm bằng tùy chọn -not .
find home/user -name file-sample* -not -name *.html
Linux FIND không hiển thị kết quả lỗi
Trong ví dụ tìm không đệ quy, chú ý rằng nó liệt kê mọi thư mục mà nó không thể tìm kiếm và kết quả đúng. Đó là phiền toái. Hãy ngăn nó hiển thị tất cả các thư mục "Permission denied". Kết hợp nó với một lệnh terminal Linux khác, grep. Bạn cũng có thể sử dụng Find với grep để tìm tệp có chứa từ cụ thể.
find -maxdepth 5 -name file-sample.rtf 2>&1 | grep -v "Permission denied"
Hãy phân tích 2>&1.
2 – đại diện cho stderr là viết tắt của standard errors output (đầu ra lỗi chuẩn).
1 – đại diện cho stdout là viết tắt của standard output (đầu ra chuẩn).
> – nghĩa là chuyển hướng bất kỳ đầu ra nào ở bên trái của nó sang bất kỳ thứ gì ở bên phải của nó.
& – nghĩa là kết hợp lại với nhau.
Vì vậy 2>&1 có nghĩa là lấy các lỗi chuẩn và chuyển hướng chúng, sau đó kết hợp chúng với đầu ra chuẩn thành một đầu ra duy nhất.
Bây giờ hãy xem | grep -v "Permission denied".
| (gọi là pipe) – báo cho Linux cung cấp kết quả của bất cứ thứ gì ở bên trái của nó cho bất cứ thứ gì ở bên phải của nó. Nó được cung cấp cho lệnh grep.
grep – là tiện ích tìm kiếm văn bản.
-v – báo cho grep tìm bất cứ thứ gì không khớp với văn bản ở bên trái của -v. Trong trường hợp này, nó báo cho grep chỉ tìm bất cứ thứ gì không chứa văn bản hoặc chuỗi, "Permission denied." Vì vậy grep sẽ chỉ hiển thị cho bạn kết quả bạn đang tìm kiếm và bất kỳ lỗi nào không khớp với "Permission denied."
Ví dụ tìm theo quyền với Linux FIND
Để sử dụng tốt điều này, bạn cần học quyền Linux.
Các tệp ví dụ đều có quyền 664, trừ một tệp có quyền 775. Sử dụng tùy chọn -perm để tìm nó.
find Documents/ -name file-sample* -type f -perm 775
Ví dụ tìm theo kích thước với Linux FIND
Tìm tệp theo kích thước rất tiện để lấy những tệp khổng lồ lấp đầy ổ cứng. Sử dụng tùy chọn -size, kích thước mong muốn và một trong các hậu tố sau. Nếu không sử dụng hậu tố, -size mặc định là b. Để tìm tệp bằng và lớn hơn một kích thước nhất định, đặt dấu cộng (+) trước kích thước.
M – Megabytes
G – Gigabytes
k – Kilobytes
b – khối (512 byte – mặc định)
c – byte
w – từ (hai byte cùng nhau)
find -size +500k
Linux FIND theo chủ sở hữu
Có hai cách để tìm tệp theo chủ sở hữu. Một là theo tên người dùng của chủ sở hữu, và cách kia là theo nhóm của người dùng. Để tìm theo tên người dùng, sử dụng tùy chọn -user, theo sau là tên người dùng. Để tìm theo nhóm người dùng, sử dụng -group theo sau là tên nhóm.
find -user groupname hoặc find -user username
Ví dụ tìm tệp theo lần sửa đổi cuối với Linux FIND
Để tìm các tệp đã được sửa đổi, hoặc chỉnh sửa, trong X ngày gần đây, sử dụng -mtime theo sau bởi một số. Đặt dấu trừ (–) trước số sẽ tìm bất cứ thứ gì bị thay đổi trong số ngày đó trước nay. Dấu cộng (+) có nghĩa là trong số ngày đó trước nay.
find -name "file-sample*" -mtime +5 (lớn hơn 5 ngày trước)
find -name "file-sample*" -mtime -5 (nhỏ hơn 5 ngày trước)
Để tìm theo lần sửa đổi cuối theo phút, sử dụng tùy chọn -mmin theo sau bởi số phút. Sử dụng + và – như trên.
find -name "file-sample*" -mmin -5
find -name "file-sample*" -mmin +5
Ví dụ tìm tệp theo lần truy cập cuối với Linux FIND
Tùy chọn được sử dụng để tìm tệp dựa trên khi chúng được mở lần cuối là -atime cho ngày và -amin cho phút. Theo sau bằng số ngày hoặc phút để quay lại và sử dụng dấu + và – như lớn hơn và nhỏ hơn.
find -name "file-sample*" -atime -5
find -name "file-sample* -amin -5
Kết hợp FIND với các lệnh Linux khác
Có một ví dụ ở trên về việc sử dụng find với lệnh grep, và bạn có thể sử dụng nó với nhiều lệnh khác. Bạn có thể thấy rằng việc sử dụng find và các lệnh khác có thể rất mạnh mẽ và tiết kiệm thời gian lớn. Hãy tưởng tượng việc phải xóa một loạt tệp loại cụ thể. Thay vì tìm kiếm trong trình quản lý tệp, chỉ cần tạo đúng lệnh, và nó xong trong giây lát. Bạn sẽ sử dụng lệnh find như thế nào bây giờ?