Cách tìm kiếm tệp từ Terminal trên Linux

theanh

Administrator
Nhân viên
Mặc dù có nhiều cách để chúng ta có thể tìm kiếm và định vị các tệp và thư mục trên Linux, nhưng cách dễ nhất và nhanh nhất có lẽ là thông qua thiết bị đầu cuối. Tuy nhiên, không nhiều người dùng Linux biết về điều đó, dẫn đến sự thất vọng không cần thiết. Sau đây là hướng dẫn nhanh hy vọng sẽ giúp bạn định vị được những gì bạn đang tìm kiếm trong hệ thống của mình. Chúng tôi sẽ đề cập đến hai ứng dụng tìm kiếm khác nhau ở đây. Lệnh locate, sử dụng cơ sở dữ liệu để tăng tốc tìm kiếm và lệnh find, thực hiện thao tác tìm kiếm trực tiếp trên hệ thống tệp.

Sử dụng lệnh Locate​

Lệnh “locate” là giải pháp đầu tiên mà người dùng Linux nên sử dụng vì nó nhanh hơn nhiều so với bất kỳ giải pháp nào khác. Lý do cho tốc độ không gì sánh bằng này là lệnh locate không thực sự tìm kiếm các tệp hoặc thư mục mà bạn cần tìm trên ổ cứng cục bộ của bạn, mà giống như đọc qua tệp cơ sở dữ liệu mlocate.db chứa tất cả các đường dẫn tệp trong hệ thống của bạn hơn.

Nếu bạn chưa cài đặt locate, hãy sử dụng các lệnh sau:

Debian và Ubuntu
Mã:
sudo apt install locate
CentOS, AlmaLinux và Rocky Linux
Mã:
dnf install locate
Chuẩn bị lệnh locate cho lần sử dụng đầu tiên

Để cập nhật cơ sở dữ liệu mlocate.db trước lần sử dụng đầu tiên, run:
Mã:
sudo updatedb
Để sử dụng locate, hãy mở terminal và nhập locate theo sau là tên tệp bạn đang tìm kiếm. Trong ví dụ này, tôi đang tìm kiếm các tệp có chứa từ 'sunny' trong tên của chúng.
Mã:
locate sunny


Locate cũng có thể cho bạn biết có bao nhiêu lần một từ khóa tìm kiếm được khớp trong cơ sở dữ liệu. Điều này đạt được bằng cách bao gồm tham số “-c” trong lệnh, có nghĩa là “count”.
Mã:
locate -c sunny


Điều mà người dùng cần lưu ý ở đây là “locate” cần tên cụ thể và chính xác của tệp bạn đang tìm kiếm, trái ngược với các công cụ linh hoạt hơn khác. Điều đó có nghĩa là locate rất tuyệt vời để tìm thứ gì đó mà bạn chắc chắn về tên của nó, nhưng không tuyệt vời khi bạn không nhớ chính xác tên tệp.
Mã:
locate howtoforge
so với
Mã:
locate Howtoforge


Hơn nữa, vì “locate” đọc tệp cơ sở dữ liệu, kết quả có thể đã lỗi thời và không hoàn toàn đúng. Để giảm thiểu vấn đề này, bạn có thể cập nhật cơ sở dữ liệu đường dẫn tệp của mình bằng cách nhập “sudo updatedb” trên phiên bản đầu cuối.

Xem tại đây để biết thêm ví dụ về cách sử dụng lệnh thelocate.

Nếu sau đó bạn vẫn không nhận được những gì mình đang tìm kiếm hoặc bạn chỉ đơn giản là choáng ngợp trước số lượng kết quả, hãy tiến hành bước tiếp theo là lệnh “find”.

Sử dụng lệnh Find​

Lệnh “find” là tiện ích tìm kiếm mạnh hơn nhiều nhưng cũng chậm hơn. Điều này là do trái ngược với lệnh “locate”, “find” thực sự tìm kiếm các tệp và thư mục mà người dùng đang tìm kiếm trên đĩa của bạn. Find hoàn hảo khi bạn đang cố gắng định vị một tệp hoặc thư mục nhưng bạn không thể nhớ tên của nó, vì "find" có thể tìm kiếm các tệp thuộc về một người dùng hoặc nhóm người dùng nhất định, các tệp đã được sửa đổi hoặc truy cập gần đây, các tệp có phạm vi kích thước cụ thể, các tệp ẩn, tệp thực thi, tệp chỉ đọc và các tệp có một số quyền nhất định. Phần tốt nhất là người dùng có thể tự do kết hợp nhiều tiêu chí trên trong một lệnh "find", về cơ bản là thu hẹp kết quả.

Nói về việc thu hẹp, điều đầu tiên bạn muốn làm khi chạy "find" là yêu cầu nó tìm kiếm trên một thư mục cụ thể. Điều này sẽ tăng tốc đáng kể quá trình tìm kiếm nhưng luôn phụ thuộc vào kích thước của thư mục. Nếu bạn biết tệp có thể ở đâu, hãy mở thiết bị đầu cuối, điều hướng đến thư mục và chạy "find . [tên tệp]". Dấu chấm đó yêu cầu find tìm kiếm trên thư mục hiện tại. Nếu bạn muốn tìm kiếm trong thư mục Home, hãy thay dấu chấm bằng “~/”, và nếu bạn muốn tìm kiếm trong toàn bộ hệ thống tệp, hãy sử dụng “/”.

Ví dụ, tôi muốn tìm kiếm tệp có chứa poster trong thư mục tải xuống của mình. Tôi biết tên tệp có chứa từ “poster” nhưng tôi không nhớ chính xác tên tệp. Vì lý do này, tôi sẽ điều hướng đến thư mục tải xuống của mình bằng lệnh cd thông qua thiết bị đầu cuối với “cd Downloads”, sau đó nhập lệnh:
Mã:
sudo find . -name "*poster*"
Đây là kết quả:



Điều này cho tôi biết rằng có một tệp pdf có tên là "billy_poster copy" trong thư mục Tải xuống. Nếu tôi không biết nó ở đâu, "find" vẫn sẽ cho tôi biết rằng nó nằm trong thư mục Tải xuống nếu tôi tìm kiếm trên thư mục cha.



Bây giờ, nếu tôi thay thế tham số "-name" bằng "-iname", tôi có thể nhận được kết quả mà không phân biệt chữ hoa chữ thường. Đó là điều không có trong "locate", do đó, đây là một thành phần hữu ích khác khi bạn không chắc chắn về tên tệp.
Mã:
sudo find . -iname "*poster*"


Bây giờ, giả sử tôi vẫn đang tìm kiếm tệp áp phích đó và điều duy nhất tôi nhớ là nó có kích thước nhỏ hơn 5 MB. Lệnh mà tôi sẽ sử dụng trong trường hợp đó là:
Mã:
find ~/ -size -5M
Nếu tôi biết rằng nó cao hơn 2MB, lệnh sẽ là "find ~/ -size +2M". Phần tốt nhất là find hỗ trợ các toán tử boolean để làm cho tìm kiếm thậm chí còn mạnh hơn. Đối với ví dụ này, tôi sẽ sử dụng một lệnh kết hợp kiến thức của tôi rằng tệp có kích thước nhỏ hơn 5 megabyte và lớn hơn 2 megabyte. Lệnh cho trường hợp này sẽ là:
Mã:
find / -size -5M -and -size +2M


Cuối cùng, chúng ta hãy giả sử rằng chúng ta không nhớ gì về tệp nhưng chúng ta nhớ rằng chúng ta đã truy cập tệp đó trong vòng ba phút trước. Để tìm tệp, hãy sử dụng lệnh find như sau:
Mã:
find / -amin -3
Lệnh này sẽ là “find / -amin -30” trong nửa giờ và “-amin -120” trong hai giờ, v.v. Nếu bạn đã truy cập tệp hai ngày trước, hãy sử dụng lệnh này thay thế:
Mã:
find / -time -2
Lệnh này sẽ hiển thị tất cả các tệp đã truy cập trong hai ngày qua tại vị trí của tìm kiếm.



Tôi nghĩ phần trên đã đề cập đến hầu hết các trường hợp sử dụng thông thường. Để biết thêm thông tin về lệnh "find" mạnh mẽ, hãy mở terminal và nhập "man find". Chúc may mắn khi tìm kiếm những gì bạn đang tìm kiếm.

Bạn có thể tìm thêm ví dụ về lệnh find của Linux tại đây.
 
Back
Bên trên