Trong thế giới Linux, việc tìm kiếm các tệp tin hoặc thư mục là một kỹ năng cơ bản nhưng cực kỳ quan trọng. Hệ điều hành này cung cấp nhiều công cụ mạnh mẽ để thực hiện tác vụ này, bao gồm các lệnh phổ biến như locate
, find
, và whereis
. Mỗi lệnh lại có phương thức hoạt động, ưu nhược điểm và trường hợp sử dụng tối ưu riêng. Việc nắm vững cách thức vận hành và mục đích của từng lệnh 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, tránh khỏi sự bực bội khi tìm kiếm trong một hệ thống tệp tin rộng lớn. Bài viết này sẽ đi sâu phân tích từng lệnh, so sánh hiệu năng và chỉ ra khi nào bạn nên sử dụng công cụ nào để đạt được kết quả tốt nhất.
Lệnh locate: Tìm kiếm Nhanh Chóng với Cơ Sở Dữ Liệu
Lệnh locate
được thiết kế để tìm kiếm tệp tin và thư mục dựa trên tên của chúng (hoặc một phần tên) với tốc độ gần như tức thì. Khả năng tìm kiếm nhanh đáng kinh ngạc này có được là nhờ locate
không thực sự quét hệ thống tệp tin của bạn theo thời gian thực. Thay vào đó, nó truy vấn một cơ sở dữ liệu đã được xây dựng sẵn, thường được đặt 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.
Tuy nhiên, chính cơ chế hoạt động này cũng tạo ra một hạn chế: cơ sở dữ liệu của locate
không được cập nhật theo thời gian thực. Điều này có nghĩa là nếu bạn vừa tạo hoặc xóa một tệp tin, locate
có thể sẽ không nhận biết được sự thay đổi đó cho đến lần cập nhật cơ sở dữ liệu tiếp theo. Cơ sở dữ liệu này thường được làm mới đị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 bằng lệnh sudo updatedb
, mặc dù quá trình lập chỉ mục toàn bộ hệ thống tệp tin có thể mất một chút thời gian.
Cú pháp cơ bản của lệnh locate
rất đơn giản:
locate -i ten_tep_tin
Ví dụ, để tìm tệp tin có tên “my_script.sh”, bạn sẽ gõ: locate -i my_script.sh
.
Locating the file using its name with locate command in Ubuntu terminal.
Nếu tệp tin 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 có chứa “my_script.sh”. Tùy chọn -i
giúp tìm kiếm không phân biệt chữ hoa, chữ thường. Bạn cũng có thể tìm kiếm tất cả các tệp tin với một phần mở rộng cụ thể, đếm số kết quả phù hợp bằng tùy chọn -c
, hoặc giới hạn số lượng đầu ra với tùy chọn -n
. Lệnh locate
còn hỗ trợ khớp mẫu bằng ký tự đại diện (wildcard) và biểu thức chính quy cơ bản, cung cấp nhiều quyền kiểm soát hơn cho các tìm kiếm của bạn.
locate, mlocate và plocate: Những Cải Tiến Quan Trọ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
đã giới thiệu những cải tiến quan trọng, chẳng hạn như khả năng tôn trọng quyền truy cập của người dùng, đảm bảo bạn chỉ có thể thấy các tệp tin mà mình được phép 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
, thực chất bạn đang chạy mlocate
ở chế độ nền. Bạn có thể xác nhận phiên bản đang được sử dụng bằng lệnh:
locate --version
Lệnh này 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 tên là 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 lớn tệp tin. Fedora, chẳng hạn, hiện sử dụng plocate
theo mặc định, và nhiều bản phân phối khác cũng đang dần áp dụng.
Bạn 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, hãy chạy:
sudo apt install plocate
Installing plocate command line tool in Ubuntu using APT manager.
Tương tự, ngay cả khi plocate
được cài đặt, lệnh bạn gõ vẫn là locate
, vì vậy cách bạn sử dụng nó không thay đổi. Đố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ể hơi khác biệt giữa mlocate
và plocate
.
Lệnh find: Tìm kiếm Linh Hoạt và Mạnh Mẽ theo Thời Gian Thực
Không giống như lệnh locate
, lệnh find
tìm kiếm tệp tin và thư mục theo thời gian thực bằng cách trực tiếp duyệt qua hệ thống thư mục được chỉ định. Nó không dựa vào cơ sở dữ liệu, điều này có nghĩa là find
luôn trả về thông tin cập nhật nhất. Tuy nhiên, điều này cũng đồng nghĩa với việc nó có thể chậm hơn locate
, đặc biệt khi tìm kiếm trên các hệ thống tệp tin lớn.
Điểm 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í đa dạng – không chỉ tên, mà còn loại (type), kích thước (size), quyền hạn (permissions), chủ sở hữu (ownership), thời gian sửa đổi (modification time), và nhiều hơn nữa. Chưa dừng lại ở đó, find
còn có thể thực thi các lệnh tùy ý (như rm
, cp
, hoặc chmod
) trên các tệp tin 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 của lệnh find
:
find [đường_dẫn] [tùy_chọn] [biểu_thức]
đường_dẫn
: Nơi bắt đầu tìm kiếm (sử dụng.
cho thư mục hiện tại).tùy_chọn
&biểu_thức
: Cần tìm gì và cách lọc kết quả.
Ví dụ, để tìm một tệp tin có tên config.xml
trong thư mục chính của bạn và các thư mục con của nó, hãy chạy:
find /home/ten_nguoi_dung_cua_ban -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 tệp tin như error.log
, Error.Log
, và ERROR-messages.log
trong /var/log
.
Bạn cũng có thể tìm kiếm các loại tệp tin cụ thể. Ví dụ, để tìm tất cả các thư mục (d
) trong đường dẫn hiện tại, hãy sử dụng:
find . -type d
Hoặc bạn có thể tìm các tệp tin lớn hơn 100 MB (+100M
) trong thư mục /opt
của bạn bằng lệnh:
find /opt -size +100M
Finding files based on the specified size using find command.
Ngoài ra, bạn có thể tìm kiếm các tệp tin 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. find
còn cho phép bạn chạy các lệnh khác trên mỗi tệp tin tìm thấy, ví dụ, xóa tất cả các tệp tin .tmp
bằng lệnh sau:
find . -name "*.tmp" -exec rm {} ;
Lệnh whereis: Chuyên Gia Định Vị Các Thành Phần của Lệnh
Lệnh whereis
khá khác biệt so với locate
và find
. Trong khi hai lệnh trước là công cụ tìm kiếm tệp tin đa năng, whereis
có một nhiệm vụ rất cụ thể: định vị tệp nhị phân (binary – các chương trình thực thi), tệp mã nguồn (source files), và các trang hướng dẫn sử dụng (manual pages – man pages) cho một lệnh nhất định.
Lệnh này đặ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ố liên quan đến việc thực thi chương trình.
Không giống như locate
và find
, whereis
chỉ tìm kiếm trong một tập hợp các thư mục được xác định trước, nơi các loại tệp tin này thường được lưu trữ – những nơi như /bin
, /usr/bin
, và /usr/local/bin
cho các tệp nhị phân; /usr/share/man
cho các trang hướng dẫn; và các thư mục mã nguồn khác nhau.
Ví dụ, nếu bạn muốn tìm tệp nhị phân của lệnh ls
, mã nguồn của nó (nếu có), và các trang man của nó, bạn có thể chạy:
whereis ls
Lệnh này sẽ cho bạn biết tệp nhị phân ls
nằm ở “/bin/ls” và trang man của nó là “/usr/share/man/man1/ls.1.gz.”
Nếu bạn chỉ quan tâm đến đường dẫn của tệp thực thi, hãy 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, hãy 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
Finding executables path of multiple commands using whereis utility.
Thông thường, các tệp mã nguồn không được cài đặt theo mặc định. Trong những trường hợp như vậy, đầu ra có thể chỉ bao gồm tên lệnh nếu không tìm thấy mã nguồn trong các vị trí tiêu chuẩn.
Khi nào nên sử dụng Từng Lệnh?
Bạn nên sử dụng lệnh locate
khi muốn có một cái nhìn tổng quan nhanh chóng, toàn hệ thống về nơi tồn tại các tệp tin cụ thể với một tên nhất định. Nó hoạt động tốt nhất khi bạn khá chắc chắn tệp tin đó không phải là mới được tạo, hoặc bạn đã cập nhật cơ sở dữ liệu gần đây.
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í khác ngoài tên, chẳng hạn như kích thước tệp, loại, quyền hạ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 tệp bạn đang tìm có thể là tệp mới và chưa được đưa vào 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 tệp tin mà nó tìm thấy.
Lệnh whereis
trở nên tiện dụng khi bạn đặc biệt cần định vị tệp nhị phân thực thi, tệp mã nguồn hoặc các trang hướng dẫn sử dụng của một lệnh. Nó đặc biệt hữu ích 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 của bạn có thể trùng lặp 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 kết hợp như một phần trong bộ công cụ Linux của bạn. Thành thạo những công cụ này sẽ giúp bạn trở thành một người dùng Linux hiệu quả và tự tin hơn.