Tìm hiểu lệnh locate trong Linux

Một trong những hoạt động phổ biến nhất khi làm việc trên Linux là tìm kiếm các file và thư mục. Trên các hệ thống Linux, có một số lệnh cho phép bạn tìm kiếm file, trong đó findlocate là những lệnh được sử dụng nhiều nhất.

Lệnh locate là cách nhanh nhất và đơn giản nhất để tìm kiếm các file, cũng như thư mục theo tên.

Trong hướng dẫn này, Quantrimang.com sẽ giải thích cách sử dụng lệnh locate trong Linux.

Cài đặt locate (locate command not found)

Tùy thuộc vào bản phân phối và cách hệ thống được cung cấp, gói locate có thể được cài đặt sẵn trên hệ thống Linux.

Để kiểm tra xem tiện ích locate có được cài đặt trên hệ thống của bạn hay không, hãy mở terminal, nhập “locate” và nhấn Enter. Nếu gói được cài đặt, hệ thống sẽ hiển thị thông báo “locate: no pattern to search for specified”, nếu không, bạn sẽ thấy một cái gì đó giống như “locate command not found”.

Nếu locate chưa được cài đặt, bạn có thể dễ dàng cài đặt nó bằng trình quản lý gói của bản phân phối.

Cài đặt locate trên Ubuntu và Debian

$ sudo apt update
$ sudo apt install mlocate

Cài đặt locate trên CentOS và Fedora

$ sudo yum install mlocate

Cách lệnh locate hoạt động

Lệnh locate tìm kiếm một pattern (mẫu) nhất định thông qua file cơ sở dữ liệu được tạo bởi lệnh updatedb. Các kết quả tìm thấy được hiển thị trên màn hình, mỗi kết quả trên một dòng.

Trong quá trình cài đặt gói mlocate, một cron job được tạo để chạy lệnh updatedb cứ sau 24 giờ. Điều này đảm bảo cơ sở dữ liệu được cập nhật thường xuyên. Để biết thêm thông tin về cron job, hãy kiểm tra file /etc/cron.daily/mlocate.

Cơ sở dữ liệu có thể được cập nhật thủ công bằng cách chạy lệnh updatedb với quyền root hoặc người dùng có quyền sudo:

$ sudo updatedb

Quá trình cập nhật sẽ mất một chút thời gian, tùy thuộc vào số lượng file và thư mục, cũng như tốc độ hệ thống của bạn.

Các file được tạo sau khi cập nhật cơ sở dữ liệu sẽ không được hiển thị trong kết quả lệnh locate.

So với lệnh find mạnh hơn khi tìm kiếm hệ thống file, lệnh locate hoạt động nhanh hơn nhưng thiếu nhiều tính năng và chỉ có thể tìm kiếm theo tên file.

Cách sử dụng lệnh locate

Cú pháp của lệnh locate như sau:

locate [OPTION] PATTERN...

Ở dạng cơ bản nhất, khi được sử dụng mà không có bất kỳ tùy chọn nào, lệnh locate sẽ in đường dẫn tuyệt đối của tất cả các file và thư mục phù hợp với mẫu tìm kiếm và người dùng có quyền đọc file trong kết quả tìm kiếm.

Ví dụ, để tìm kiếm file có tên .bashrc, bạn hãy nhập:

$ locate .bashrc

Đầu ra sẽ bao gồm tên tất cả các file chứa chuỗi .bashrc trong tên của chúng:

/etc/bash.bashrc
/etc/skel/.bashrc
/home/linuxize/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

File /root/.bashrc sẽ không được hiển thị, vì ví dụ đã chạy lệnh với vai trò một người dùng bình thường, không có quyền truy cập vào thư mục /root.

Nếu danh sách kết quả dài, để dễ đọc hơn, bạn có thể chuyển đầu ra sang lệnh less:

$ locate .bashrc | less

Lệnh locate cũng chấp nhận các mẫu có chứa những ký tự đại diện (wildcard) như *. Khi các mẫu không chứa những ký tự này, lệnh sẽ tìm kiếm *PATTERN*, đó là lý do tại sao trong ví dụ trước, tất cả các file có chứa mẫu tìm kiếm trong tên của chúng đều được hiển thị.

Ký tự đại diện là ký hiệu được sử dụng để thể hiện số không, một hoặc nhiều ký tự. Ví dụ, để tìm kiếm tất cả các file .md trên hệ thống bạn sẽ sử dụng:

$ locate *.md

Để giới hạn kết quả tìm kiếm, hãy sử dụng tùy chọn -n theo sau là số lượng kết quả bạn muốn được hiển thị. Ví dụ, lệnh sau sẽ tìm kiếm tất cả các file .py và chỉ hiển thị 10 kết quả:

$ locate -n 10 *.py

Theo mặc định, lệnh locate thực hiện tìm kiếm phân biệt chữ hoa chữ thường. Tùy chọn -i (--ignore-case) cho lệnh locate biết hãy chạy tìm kiếm không phân biệt chữ hoa chữ thường.

$ locate -i readme.md

Đầu ra như sau:

/home/linuxize/p1/readme.md
/home/linuxize/p2/README.md
/home/linuxize/p3/ReadMe.md

Để hiển thị số lượng của tất cả các mục phù hợp, sử dụng tùy chọn -c (--count). Lệnh sau sẽ trả về số lượng của tất cả các file có chứa .bashrc trong tên của chúng:

$ locate -c .bashrc

Đầu ra:

6

Theo mặc định, lệnh locate không kiểm tra xem các file tìm thấy có còn tồn tại trên hệ thống file không. Nếu bạn đã xóa một file sau khi cập nhật cơ sở dữ liệu mới nhất và file đó phù hợp với mẫu tìm kiếm, nó sẽ được đưa vào phần kết quả.

Để chỉ hiển thị tên của các file còn tồn tại ở thời điểm lệnh locate được chạy, hãy sử dụng tùy chọn -e (--existing). Ví dụ, lệnh sau đây sẽ chỉ trả về các file .json hiện có:

$ locate -e *.json

Nếu cần chạy một tìm kiếm phức tạp hơn, bạn có thể sử dụng tùy chọn -r (--regrec) cho phép bạn tìm kiếm bằng cách sử dụng biểu thức chính quy thay vì mẫu. Tùy chọn này có thể được chỉ định nhiều lần.

Ví dụ, để tìm kiếm tất cả các file .mp4.avi trên hệ thống của bạn, không phân biệt chữ hoa, chữ thường, bạn sẽ chạy:

$ locate --regex -i "(\.mp4|\.avi)"

Lệnh locate tìm kiếm hệ thống file cho các file và thư mục có tên khớp với một mẫu nhất định. Cú pháp lệnh dễ nhớ và kết quả được hiển thị gần như ngay lập tức.

Để biết thêm thông tin về tất cả các tùy chọn có sẵn của lệnh locate, hãy nhập man locate trong terminal.

Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ý kiến trong phần bình luận bên dưới!

Thứ Ba, 02/07/2019 09:15
53 👨 5.724
0 Bình luận
Sắp xếp theo
    ❖ Linux