[Linux] Hướng dẫn dùng lệnh LOCATE tìm file cực nhanh trên Linux

Lệnh locate trên Linux – Khi mà bạn cần tìm một file bất kì trên hệ thống Linux, có thể bạn sẽ nghĩ đến việc dùng chương trình lệnh “find“. Find là một công cụ tốt và rất nhiều tính năng tuỳ biến, nhưng mà nhược điểm của nó là… chậm nếu bạn có rất nhiều file trên hệ thống và không biết file bạn cần tìm nằm ở đâu.

Tuy nhiên công cụ “locate” lại khác biệt bằng cách tìm file rất nhanh và cực kì nhanh, nhưng cũng sẽ có những hạn chế nhất định. Ở bài viết này mình sẽ viết cụ thể về công cụ này nhé. Bài viết sẽ bao gồm 3 phần chính :
– Chương trình “locate” hoạt động như thế nào ?
– Hướng dẫn cài đặt chương trình “mlocate
– Các ví dụ trường hợp sử dụng chương trình “locate

A. Chương trình “locate” hoạt động như thế nào ?

Khi mà mình nói rằng chương trình “locate” tìm kiếm thông tin rất nhanh rất lẹ, thì câu hỏi đầu tiên nảy ra trong đầu đó là cái gì khiến cho việc tìm kiếm của locate lại nhanh như vậy ? Cái gì ?

Ok, như thế này chương trình locate không tìm kiếm file trên ổ đĩa mỗi lần được sử dụng mà nó tìm kiếm thông tin được index cập nhật về danh sách đường dẫn các file trên Cơ Sở Dữ Liệu của riêng chương trình locate.

File CSDL bao gồm thông tin về tên file và đường dẫn file đó, file CSDL đó có đường dẫn mặc định là :

/var/lib/mlocate/mlocate.db

 
Câu hỏi kế tiếp sẽ là gì ? Vậy để cập nhật CSDL của mlocate thì ta phải sử dụng chương trình gì hay làm cách nào ?

Có một công cụ hỗ trợ hoạt động cập nhật CSDL tên là “updatedb“. Khi bạn thực thi chương trình lệnh này, thì nó sẽ đi quét toàn bộ hệ thống và cập nhật tất cả file và đường dẫn file vào file CSDL “mlocate.db“.

Như vậy chúng ta sẽ thấy ngay 1 điểm hạn chế của chương trình tìm kiếm locate đó là nó phụ thuộc vào thông tin CSDL “mlocate.db“, nếu file CSDL không thường xuyên được cập nhật bởi hoạt động quét hệ thống của công cụ đính kèm “updatedb” thì các kết quả mà locate liệt kê ra đôi khi sẽ chưa phải là thông tin chính xác và mới nhất so với thời điểm thực thi. Vậy nên chúng ta phải thường xuyên cập nhật CSDL để tiện hoạt động tìm kiếm, điều này có thể giải quyết bằng thiết lập cronjobs cho thực hiện “updatedb” tự động.

File cấu hình của chương trình “updatedb” nằm ở : /etc/updatedb.conf . File cấu hình này sẽ được updatedb load trước khi cập nhật CSDL. Bạn có thể coi cấu hình file “/etc/updatedb.conf” ở manual của chương trình này.

Lưu ý:
– Nếu hệ thống có quá nhiều file, thì việc updatedb thường xuyên sẽ gây load io cao. Không khuyến khích khi dữ liệu hệ thống lên đến gần cả TB.

B. Hướng dẫn cài đặt chương trình “mlocate”

Chương trình “locate” có tên gói cài đặt là “mlocate“.

+ CentOS/RHEL

# yum install -y mlocate


+ Debian/Ubuntu

# apt-get install -y mlocate

 

C. Các ví dụ trường hợp sử dụng chương trình “locate”

1. Tìm 1 file với lệnh cơ bản

– Tìm một file cụ thể với lệnh “locate” cơ bản không có option gì cả.

# locate sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf.bak

– Bạn có thể sử dụng option “-0” để hiển thị tất cả output trên cùng 1 dòng line.

# locate -0 httpd.conf

2. Hiển thị phần đềm số lượng kết quả tìm kiếm

– Bạn có thể chỉ cần con số về số lượng kết quả mà locate tìm kiếm được, vậy hãy sử dụng option “-c“.

# locate -c "*.php"
# locate -c httpd.conf

3. Cập nhật lại Cơ Sở Dữ Liệu “locate”

– Nếu trên hệ thống bạn có thêm hoặc xoá các file mới thì bạn nên cập nhật hoặc làm mới lại cơ sở dữ liệu của chương trình “locate“. Nếu không thì chương trình “locate” sẽ không tìm thấy được các file mới. Một hoạt động quan trọng khi dùng chương trình này.
– Để cập nhật cơ sở dữ liệu locate hãy chạy lệnh sau :

# updatedb

– Sau khi chạy lệnh này xong, thì bạn có thể tìm kiếm file mới được rồi đấy.

4. Thay đổi đường dẫn load file Cơ Sở Dữ Liệu “mlocate”

– Mặc định Cơ Sở Dữ Liệu của mlocate nằm ở đường dẫn “/var/lib/mlocate/mlocate.db“, nhưng nếu bạn muốn chương trình locate load CSDL được nằm ở thư mục khác thì bạn hãy thêm option “-d” vào sau lệnh.

# locate -d /root/mlocate/mlocate.db passwd

5. Kiểm tra xem file có tồn tại không

– Bây giờ bạn nghĩ đến trường hợp thế này, bạn đã update CSDL mlocate, bạn tìm ra thông tin đường dẫn file “sysctl.conf“.
– Sau đó bạn xoá đi file “sysctl.conf“, bạn thử tìm kiếm lại lần nữa thì vẫn ra thông tin file “sysctl.conf” ngay cả khi bạn đã xoá nó rồi. ????!!
– Chuyện gì đã xảy ra ? Đơn giản thôi, chương trình locate chỉ tìm kiếm thông tin đường dẫn file đã được cập nhật trong file CSDL “/var/lib/mlocate/mlocate.db“. Nên nếu bạn xoá file đó đi, nhưng chưa cập nhật làm mới lại CSDL mlocate thì chương trình vẫn trả ra kết quả cho bạn.
– Vì vậy ở phần này, bạn muốn chương trình locate kiểm tra xem file kết quả xuất ra có tồn tại hay không thì hãy thêm option “-e“.

# cd /etc
# rm sysctl.conf.orig
# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.orig
/usr/share/man/man5/sysctl.conf.5.gz

 – Bây giờ bạn thêm “-e“vào, lúc này sẽ ra kết quả đúng hơn.

# locate -e sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

 – Điều cuối cùng bạn nên làm ư . Cập nhật CSDL mlocate đi.

# updatedb

 

6. Hiển thị kết quả tên file chữ thường và chữ hoa

– Mặc định chương trình “locate” được cấu hình để liệt kê các kết quả file có tên không có chữ in hoa. Trong trường hợp bạn muốn locate hiển thị luôn đầy đủ các file có tên thường và tên in hoa thì hãy thêm option “-i” vào.

Ví dụ:

# cd /tmp
# touch new.txt NEW.txt
# updatedb
 - Nếu sử dụng lệnh cơ bản thì chỉ liệt kê ra file có tên thường.
# locate new.txt
/tmp/new.txt
 - Còn sử dụng thêm option "

-i

", thì sẽ liệt kê đầy đủ cả file có tên hoa và tên thường.
# locate -i new.txt
/tmp/NEW.txt
/tmp/new.txt
/usr/share/doc/samba-common/WHATSNEW.txt.gz

7. Giới hạn số lượng kết quả xuất ra

– Bạn hãy nhìn ví dụ sau, lệnh “locate” sẽ xuất ra rất nhiều kết quả liên quan.

# locate passwd
/etc/passwd
/etc/passwd.bak
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd
/etc/vsftpd/passwd
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/htpasswd
/usr/bin/ldappasswd
/usr/bin/mksmbpasswd.sh
/usr/bin/passwd
..

 – Bây giờ bạn muốn cùng lệnh trên nhưng chỉ hiển thị giới hạn 1 số lượng kết quả được xuất ra thì hãy thêm option “-l“. Ví dụ bạn chỉ muốn xuất ra 6 kết quả thôi.

# locate -l 6 passwd
/etc/passwd
/etc/passwd.bak 
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd
/etc/vsftpd/passwd

 
Cám ơn các bạn đã theo dõi bài viết tìm hiểu cách sử dụng lệnh LOCATE trên Linux rồi. Hy vọng các bạn có được những kiến thức bổ ích về các lệnh Linux tại Cuongquach.com .

Previous articleHướng dẫn cài đặt Snipe-IT trên CentOS để quản lý tài sản IT
Next articleHướng dẫn tạo Database trên Direct Admin
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !