Image default
Máy Tính

Khám phá các lệnh tìm kiếm file mạnh mẽ trên Linux: Locate, Find và Whereis

Trong thế giới Linux, việc tìm kiếm file hoặc thư mục là một kỹ năng thiết yếu đối với bất kỳ người dùng, quản trị viên hệ thống hay nhà phát triển nào. Linux cung cấp nhiều công cụ dòng lệnh mạnh mẽ để thực hiện công việc này, bao gồm locate, findwhereis. Mỗi lệnh có cách hoạt động, ưu điểm và tình huống sử dụng riêng biệt. Nắm vững sự khác biệt giữa chúng không chỉ giúp bạn tiết kiệm thời gian mà còn nâng cao hiệu quả làm việc. Hãy cùng xalocongnghe.com đi sâu vào từng lệnh và tìm hiểu khi nào nên sử dụng chúng để tối ưu hóa quá trình tìm kiếm của bạn.

Minh họa các lệnh tìm kiếm file locate, find, whereis trong LinuxMinh họa các lệnh tìm kiếm file locate, find, whereis trong Linux

Lệnh Locate: Tìm kiếm siêu tốc qua cơ sở dữ liệu

Lệnh locate được thiết kế để tìm kiếm file và thư mục dựa trên tên của chúng (hoặc một phần tên) một cách gần như tức thì. Tốc độ vượt trội của locate đến từ cơ chế hoạt động độc đáo: thay vì quét hệ thống file theo thời gian thực, nó truy vấn một cơ sở dữ liệu đã được xây dựng sẵn. Cơ sở dữ liệu này thường có tên là mlocate.db, plocate.db hoặc đơn giản là locate.db, tùy thuộc vào bản phân phối Linux bạn đang sử dụng.

Điểm cần lưu ý là cơ sở dữ liệu này không được cập nhật liên tục. Điều đó có nghĩa là nếu bạn vừa tạo hoặc xóa một file, lệnh locate có thể sẽ không nhận biết được sự thay đổi đó cho đến khi cơ sở dữ liệu được cập nhật lần tiếp theo. Việc cập nhật cơ sở dữ liệu thường được thực hiện định kỳ bởi một tiến trình hệ thống, điển hình là thông qua một cron job chạy hàng ngày. Bạn cũng có thể tự cập nhật cơ sở dữ liệu theo cách thủ công bằng lệnh sudo updatedb, mặc dù việc lập chỉ mục toàn bộ hệ thống file có thể mất một khoảng thời gian nhất định.

Cú pháp cơ bản của locate rất đơn giản:

locate -i filename 

Ví dụ sử dụng lệnh locate để tìm file my_script.sh trên terminal UbuntuVí dụ sử dụng lệnh locate để tìm file my_script.sh trên terminal Ubuntu

Nếu file tồn tại và cơ sở dữ liệu đã được cập nhật, locate sẽ liệt kê tất cả các đường dẫn chứa “my_script.sh”. Tùy chọn -i cho phép tìm kiếm không phân biệt chữ hoa, chữ thường.

Ngoài ra, bạn có thể tìm kiếm tất cả các file có phần mở rộng cụ thể, đếm số lượng kết quả phù hợp bằng tùy chọn -c, hoặc giới hạn số lượng kết quả hiển thị bằng tùy chọn -n. Lệnh locate cũng hỗ trợ khớp mẫu bằng ký tự đại diện (wildcard) và thậm chí cả biểu thức chính quy cơ bản (basic regular expressions), mang lại sự linh hoạt cao hơn cho các truy vấn tìm kiếm của bạn.

Locate vs. mlocate vs. plocate: Những cải tiến không ngừng

Theo thời gian, tiện ích locate gốc đã được thay thế trong hầu hết các bản phân phối bởi mlocate. mlocate mang đến những cải tiến quan trọng, chẳng hạn như tôn trọng quyền người dùng, giúp bạn chỉ thấy được các file mà mình có quyền truy cập.

Khi mlocate được cài đặt, nó sẽ cung cấp chính lệnh locate. Vì vậy, ngay cả khi bạn gõ locate, bạn thực chất đang chạy mlocate ở chế độ nền. Bạn có thể xác nhận điều này bằng cách kiểm tra phiên bản:

locate --version

Kiểm tra phiên bản của lệnh locate trên terminal Ubuntu để xác định mlocate hay plocate đang được sử dụngKiểm tra phiên bản của lệnh locate trên terminal Ubuntu để xác định mlocate hay plocate đang được sử dụng

Kết quả sẽ hiển thị phiên bản locate nào đang xử lý các tìm kiếm của bạn.

Gần đây hơn, một triển khai mới có tên plocate đã bắt đầu thay thế mlocate trong một số bản phân phối. plocate nhanh hơn và hiệu quả hơn, sử dụng chỉ mục nén để giảm thời gian tìm kiếm và mức sử dụng đĩa – đặc biệt hữu ích trên các hệ thống có số lượng file lớn. Fedora, ví dụ, hiện sử dụng plocate theo mặc định, và nhiều bản phân phối khác đang bắt đầu làm theo.

Bạn cũng có thể cài đặt plocate bằng trình quản lý gói mặc định của mình, ví dụ trên Ubuntu, chạy:

sudo apt install plocate

Cài đặt công cụ plocate bằng lệnh sudo apt install plocate trên Ubuntu để tăng tốc tìm kiếmCài đặt công cụ plocate bằng lệnh sudo apt install plocate trên Ubuntu để tăng tốc tìm kiếm

Một lần nữa, ngay cả khi plocate được cài đặt, lệnh bạn gõ vẫn là locate, vì vậy không có gì thay đổi trong cách bạn sử dụng nó. Đối với hầu hết người dùng, chức năng và cú pháp là như nhau. Tuy nhiên, một vài tùy chọn nâng cao có thể khác một chút giữa mlocateplocate.

Biểu tượng minh họa các công cụ khác nhau để tìm kiếm file và thư mục trong LinuxBiểu tượng minh họa các công cụ khác nhau để tìm kiếm file và thư mục trong Linux

Lệnh Find: Sức mạnh tìm kiếm thời gian thực với tiêu chí đa dạng

Không giống như lệnh locate, lệnh find tìm kiếm file và thư mục theo thời gian thực bằng cách trực tiếp duyệt qua hệ thống phân cấp thư mục mà bạn chỉ định. Nó không phụ thuộc vào cơ sở dữ liệu, điều này có nghĩa là nó luôn trả về thông tin cập nhật nhất. Tuy nhiên, điều này cũng có nghĩa là nó có thể chậm hơn locate, đặc biệt khi tìm kiếm trên các hệ thống file lớn.

Giao diện desktop Ubuntu, nơi các lệnh dòng lệnh được sử dụng rộng rãiGiao diện desktop Ubuntu, nơi các lệnh dòng lệnh được sử dụng rộng rãi

Điều làm cho find nổi bật là khả năng tìm kiếm dựa trên một loạt các tiêu chí rộng lớn – không chỉ tên, mà còn cả loại file, kích thước, quyền, quyền sở hữu, thời gian sửa đổi và nhiều hơn nữa. Không chỉ vậy, find còn có thể thực thi các lệnh tùy ý (như rm, cp, hoặc chmod) trên các file mà nó tìm thấy bằng cách sử dụng tùy chọn -exec.

Dưới đây là cú pháp cơ bản:

find [path] [options] [expression]
  • path: Nơi bắt đầu tìm kiếm (sử dụng . cho thư mục hiện tại).
  • options & expression: Những gì cần tìm và cách lọc kết quả.

Ví dụ, để tìm một file có tên config.xml trong thư mục chính (home directory) của bạn và các thư mục con của nó, hãy chạy:

find /home/your_username -name "config.xml"

Tương tự như locate, find có thể thực hiện tìm kiếm không phân biệt chữ hoa, chữ thường bằng cách sử dụng tùy chọn -iname (insensitive name):

find /var/log -iname "error*.log"

Lệnh này sẽ tìm các file như error.log, Error.LogERROR-messages.log trong /var/log.

Giao diện Bash Shell, môi trường dòng lệnh phổ biến trong hệ điều hành LinuxGiao diện Bash Shell, môi trường dòng lệnh phổ biến trong hệ điều hành Linux

Bạn cũng có thể tìm kiếm các loại file cụ thể. Ví dụ, để tìm tất cả các thư mục (d) trong đường dẫn hiện tại, sử dụng:

find . -type d

Hoặc bạn có thể tìm các file lớn hơn một kích thước cụ thể, chẳng hạn 100 MB (+100M) trong thư mục /opt của bạn với:

find /opt -size +100M

Tìm kiếm các file lớn hơn 100MB trong thư mục /opt bằng lệnh find trên LinuxTìm kiếm các file lớn hơn 100MB trong thư mục /opt bằng lệnh find trên Linux

Hơn nữa, bạn có thể tìm kiếm các file rỗng, thư mục rỗng, hoặc các mục dựa trên thời gian sửa đổi cụ thể của chúng. Bạn cũng có thể chạy các lệnh khác trên mỗi file được tìm thấy bởi find, ví dụ, xóa tất cả các file .tmp bằng lệnh này:

find . -name "*.tmp" -exec rm {} ;

Lệnh Whereis: Chuyên gia định vị chương trình và tài liệu

Lệnh whereis khá khác biệt so với locatefind. Trong khi hai lệnh đầu tiên là công cụ tìm kiếm file đa năng, whereis có một nhiệm vụ rất cụ thể: định vị các binary (file thực thi), file mã nguồn và các trang hướng dẫn sử dụng (manual pages hay man pages) cho một lệnh nhất định.

Minh họa các tệp và thư mục được kết nối giữa các hệ thống như Linux, Windows và đám mâyMinh họa các tệp và thư mục được kết nối giữa các hệ thống như Linux, Windows và đám mây

Nó đặc biệt hữu ích khi bạn đang cố gắng hiểu cách một lệnh được cài đặt trên hệ thống của mình hoặc khi bạn đang khắc phục sự cố với việc thực thi chương trình.

Không giống như locatefind, whereis chỉ tìm kiếm trong một tập hợp các thư mục được định nghĩa trước, nơi các loại file này thường được lưu trữ – những nơi như /bin, /usr/bin, và /usr/local/bin cho các binary; /usr/share/man cho các trang hướng dẫn; và nhiều thư mục mã nguồn khác nhau.

Ví dụ, nếu bạn muốn tìm binary của lệnh ls, mã nguồn của nó (nếu có), và các trang hướng dẫn của nó, bạn có thể chạy:

whereis ls

Sử dụng lệnh whereis để tìm đường dẫn của binary, mã nguồn và man page cho lệnh lsSử dụng lệnh whereis để tìm đường dẫn của binary, mã nguồn và man page cho lệnh ls

Lệnh này sẽ cho bạn biết binary của ls nằm tại “/bin/ls” và trang hướng dẫn của nó nằm tại “/usr/share/man/man1/ls.1.gz.”

Nếu bạn chỉ quan tâm đến đường dẫn của file thực thi, sử dụng tùy chọn -b (binary):

whereis -b ls

Để chỉ tìm các trang hướng dẫn sử dụng, sử dụng tùy chọn -m (man):

whereis -m bash

Bạn cũng có thể hỏi whereis về nhiều lệnh cùng lúc:

whereis grep sed awk

Tìm đường dẫn của nhiều lệnh (grep, sed, awk) cùng lúc bằng tiện ích whereis trên LinuxTìm đường dẫn của nhiều lệnh (grep, sed, awk) cùng lúc bằng tiện ích whereis trên Linux

Thông thường, các file mã nguồn không được cài đặt theo mặc định. Trong những trường hợp như vậy, kết quả đầu ra có thể chỉ bao gồm tên lệnh nếu không tìm thấy mã nguồn ở các vị trí tiêu chuẩn.

Khi nào nên sử dụng Locate, Find và Whereis?

Việc lựa chọn lệnh tìm kiếm phù hợp sẽ tối ưu hóa hiệu suất và độ chính xác công việc của bạn trên Linux.

Bạn nên sử dụng lệnh locate khi bạn cần một cái nhìn tổng quan nhanh chóng, toàn hệ thống về vị trí của các file cụ thể có tên nhất định. Nó hoạt động tốt nhất khi bạn khá chắc chắn rằng file đó không phải là file mới tạo, hoặc bạn đã cập nhật cơ sở dữ liệu gần đây. Tốc độ là ưu điểm chính của locate cho các tìm kiếm thông thường.

Mặt khác, lệnh find phù hợp hơn khi bạn cần tìm kiếm dựa trên các tiêu chí ngoài tên, chẳng hạn như kích thước file, loại, quyền hoặc ngày sửa đổi. Nó đặc biệt hữu ích khi bạn muốn tìm kiếm sâu trong một cây thư mục cụ thể, hoặc khi file bạn đang tìm có thể là mới và chưa được bao gồm trong cơ sở dữ liệu của locate. find cũng phát huy tác dụng khi bạn cần kết quả theo thời gian thực hoặc muốn thực hiện các hành động như xóa, sao chép hoặc thay đổi quyền trên các file mà nó tìm thấy.

Lệnh whereis trở nên hữu ích khi bạn đặc biệt cần định vị file binary thực thi, file mã nguồn hoặc các trang hướng dẫn sử dụng (man pages) của một lệnh. Nó đặc biệt có giá trị khi bạn đang khắc phục sự cố với biến môi trường PATH của hệ thống hoặc cố gắng hiểu một chương trình được cài đặt ở đâu và như thế nào.

Đôi khi, nhu cầu tìm kiếm của bạn có thể giao thoa giữa cả ba lệnh. Ví dụ, nếu locate trả về quá nhiều kết quả, bạn có thể sử dụng đầu ra của nó để thu hẹp đường dẫn bắt đầu cho một tìm kiếm find chính xác hơn. Các lệnh này không loại trừ lẫn nhau – chúng hoạt động tốt nhất khi được sử dụng cùng nhau như một phần của bộ công cụ Linux của bạn.

Hy vọng với bài viết này, bạn đã có cái nhìn tổng quan và sâu sắc hơn về cách sử dụng hiệu quả các lệnh tìm kiếm file trên Linux. Hãy thực hành thường xuyên để làm chủ các công cụ mạnh mẽ này và nâng cao năng suất làm việc của bạn! Bạn có mẹo hay kinh nghiệm nào khác khi sử dụng các lệnh này không? Hãy chia sẻ ý kiến của bạn trong phần bình luận bên dưới!

Related posts

Logic Bomb: Mã Độc Nguy Hiểm Ẩn Mình Chờ Kích Hoạt

Administrator

Phớt Lờ Tên Gọi Phức Tạp Khi Mua Laptop: Đây Mới Là Điều Bạn Cần Quan Tâm

Administrator

Proton VPN Vượt Mốc 11.000 Máy Chủ Trên Hơn 110 Quốc Gia: Giải Pháp Nâng Cao Quyền Riêng Tư Trực Tuyến

Administrator