Lệnh định vị Linux dành cho người mới bắt đầu (8 ví dụ)

theanh

Administrator
Nhân viên
Lệnh locate trên Linux là một tiện ích mạnh mẽ được sử dụng để nhanh chóng tìm kiếm các tệp và thư mục dựa trên tên của chúng. Nó tận dụng cơ sở dữ liệu được xây dựng sẵn, thường được cập nhật định kỳ bởi lệnh updatedb, để thực hiện tìm kiếm nhanh, giúp nó nhanh hơn đáng kể so với các công cụ tìm kiếm khác như find. Khi người dùng đưa ra lệnh locate theo sau là một mẫu tìm kiếm, nó sẽ quét cơ sở dữ liệu này thay vì chính hệ thống tệp, cung cấp kết quả gần như ngay lập tức. Điều này làm cho locate đặc biệt hữu ích đối với quản trị viên hệ thống và người dùng cần nhanh chóng định vị tệp mà không phải chịu chi phí quét hệ thống tệp trực tiếp. Tuy nhiên, độ chính xác của locate phụ thuộc vào tần suất cơ sở dữ liệu được cập nhật, vì nó có thể không phản ánh những thay đổi gần đây nhất trong hệ thống tệp cho đến lần cập nhật tiếp theo.

Trong hướng dẫn này, chúng tôi sẽ giải thích lệnh locate bằng các ví dụ dễ hiểu. Xin lưu ý rằng tất cả các hướng dẫn/ví dụ được đề cập ở đây đã được thử nghiệm trên Ubuntu 24.04.

1. Cài đặt lệnh locate​

Lệnh locate không được cài đặt sẵn trên Ubuntu và Debian Linux. Bạn có thể cài đặt nó bằng lệnh này:
Mã:
sudo apt install locate

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22245%22%3E%3C/svg%3E


Locate thực hiện tìm kiếm tệp dựa trên cơ sở dữ liệu tên tệp được biên dịch trước, giúp nó nhanh hơn nhiều so với lệnh find khi thực hiện các tìm kiếm tiếp theo. Nhưng trước khi có thể sử dụng, chúng ta sẽ phải tạo và cập nhật cơ sở dữ liệu tệp. Chạy lệnh sau để tạo cơ sở dữ liệu locate:
Mã:
sudo updatedb
Bây giờ chúng ta đã sẵn sàng để bắt đầu sử dụng locate.

2. Cách sử dụng lệnh locate trong Linux​

Lệnh locate rất dễ sử dụng. Bạn chỉ cần truyền tên tệp bạn muốn tìm kiếm.
Mã:
locate [filename]
Ví dụ, nếu muốn tìm kiếm tất cả tên tệp có chuỗi 'dir2' trong đó, thì tôi có thể thực hiện điều đó bằng cách sử dụng locate theo cách sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2273%22%3E%3C/svg%3E


Lưu ý: Lệnh 'locate dir2' (không có dấu hoa thị) cũng sẽ thực hiện vì lệnh locate ngầm thay thế tên bạn truyền vào (ví dụ TÊN) bằng *TÊN*.

3. Lệnh locate hoạt động như thế nào hoặc tại sao lại nhanh như vậy​

Việc định vị nhanh như vậy là do nó không đọc hệ thống tệp cho tên tệp hoặc thư mục được tìm kiếm.Nó tham chiếu đến cơ sở dữ liệu (do lệnh updatedb) để tìm những gì người dùng đang tìm kiếm và dựa trên tìm kiếm đó, tạo ra đầu ra của nó.

Mặc dù đây là một cách tiếp cận tốt, nhưng nó cũng có một số nhược điểm. Vấn đề chính là sau mỗi tệp hoặc thư mục mới được tạo trên hệ thống, bạn cần cập nhật cơ sở dữ liệu của công cụ để nó hoạt động chính xác. Nếu không, lệnh sẽ không thể tìm thấy các tệp/thư mục được tạo sau lần cập nhật cơ sở dữ liệu cuối cùng.

Ví dụ, nếu tôi thử tìm các tệp có tên chứa chuỗi 'tosearch' trong thư mục 'Downloads' của hệ thống, lệnh find sẽ tạo ra một kết quả ở đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2268%22%3E%3C/svg%3E


Nhưng khi tôi thử thực hiện tìm kiếm tương tự bằng lệnh locate, thì không tạo ra đầu ra nào.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22338%22%20height=%2238%22%3E%3C/svg%3E


Điều này có nghĩa là các tìm kiếm định vị cơ sở dữ liệu trong không được cập nhật sau khi tệp được tạo trên hệ thống. Vì vậy, hãy cập nhật cơ sở dữ liệu, có thể thực hiện bằng lệnh updatedb. Sau đây là cách bạn thực hiện điều đó:
Mã:
sudo updatedb
Và bây giờ khi tôi chạy lại lệnh locate tương tự, nó hiển thị các tệp trong đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22391%22%20height=%2283%22%3E%3C/svg%3E


Tương tự như vậy, sau khi tệp hoặc thư mục đã bị xóa, bạn cần thực hiện đảm bảo rằng cơ sở dữ liệu locate đã được cập nhật, nếu không, lệnh sẽ tiếp tục hiển thị tệp trong đầu ra khi tìm kiếm.

4. Cách để locate in số lượng hoặc số lượng mục nhập khớp trong đầu ra​

Như chúng ta đã thấy, lệnh locate tạo ra tên các tệp khớp và đường dẫn đầy đủ hoặc tuyệt đối của chúng trong đầu ra. Nhưng nếu muốn, bạn có thể sử dụng công cụ để ẩn tất cả thông tin này và chỉ in số hoặc số lượng mục khớp. Bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -c.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22367%22%20height=%2258%22%3E%3C/svg%3E

5. Cách buộc locate chỉ in những mục nhập tương ứng với các tệp hiện có​

Như chúng ta đã thảo luận trước đó trong bài viết này, nếu một tệp bị xóa khỏi hệ thống, thì cho đến khi bạn cập nhật lại cơ sở dữ liệu locate, lệnh sẽ tiếp tục hiển thị tên tệp đó trong đầu ra. Tuy nhiên, đối với trường hợp cụ thể này, bạn có thể bỏ qua việc cập nhật cơ sở dữ liệu và vẫn có kết quả chính xác trong đầu ra bằng cách sử dụng tùy chọn dòng lệnh -e.

Ví dụ, tôi đã xóa tệp 'filetosearch.txt' khỏi hệ thống của mình. Điều này đã được xác nhận bởi lệnh find, lệnh này không còn có thể tìm kiếm tệp nữa:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2270%22%3E%3C/svg%3E


Nhưng khi tôi thực hiện thao tác tương tự bằng lệnh locate, tệp vẫn hiển thị trong đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22371%22%20height=%2258%22%3E%3C/svg%3E


Và chúng ta biết lý do tại sao - vì cơ sở dữ liệu của locate không được cập nhật sau khi tệp bị xóa. Tuy nhiên, sử dụng tùy chọn -e đã giải quyết được vấn đề:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22363%22%20height=%2239%22%3E%3C/svg%3E


Đây là nội dung trang hướng dẫn locate nói về tùy chọn này: "Chỉ in các mục tham chiếu đến các tệp hiện có tại thời điểm chạy locate."

6. Cách khiến locate bỏ qua sự phân biệt chữ hoa chữ thường​

Theo mặc định, thao tác tìm kiếm mà lệnh locate thực hiện phân biệt chữ hoa chữ thường. Nhưng bạn có thể buộc công cụ bỏ qua sự phân biệt chữ hoa chữ thường bằng cách sử dụng tùy chọn dòng lệnh -i.

Ví dụ, tôi có hai tệp trên hệ thống của mình, có tên là 'newfiletosearch.txt' và 'NEWFILETOSEARCH.txt'. Vì vậy, như bạn có thể thấy, tên tệp giống nhau, chỉ khác là chữ hoa chữ thường. Nếu bạn yêu cầu locate để tìm kiếm, ví dụ, "*tosearch*", thì nó sẽ chỉ hiển thị tên viết thường trong đầu ra của nó:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22400%22%20height=%2263%22%3E%3C/svg%3E


Nhưng sử dụng tùy chọn dòng lệnh -i buộc lệnh bỏ qua trường hợp và cả hai tên tệp đều được tạo ra trong đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22415%22%20height=%2278%22%3E%3C/svg%3E

7. Cách phân tách các mục đầu ra bằng ASCII NUL​

Theo mặc định, các mục đầu ra mà lệnh locate tạo ra được phân tách bằng ký tự xuống dòng (\n). Nhưng nếu muốn, bạn có thể thay đổi dấu phân cách và sử dụng ASCII NUL thay cho ký tự xuống dòng. Bạn có thể thực hiện thao tác này bằng tùy chọn dòng lệnh -0.

Ví dụ, tôi đã thực hiện cùng lệnh mà chúng ta đã sử dụng ở phần cuối cùng ở trên, nhưng đã thêm tùy chọn dòng lệnh -0:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2257%22%3E%3C/svg%3E


Vì vậy, bạn có thể thấy rằng dấu phân cách dòng không còn nữa - nó đã được thay thế bằng NUL.

8. Cách xem thông tin về cơ sở dữ liệu locate​

Trong trường hợp bạn muốn biết locate đang sử dụng cơ sở dữ liệu nào, cũng như các số liệu thống kê khác về cơ sở dữ liệu, hãy sử dụng tùy chọn dòng lệnh -S.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22439%22%20height=%22126%22%3E%3C/svg%3E

9. Cách tìm kiếm tên tệp chính xác bằng locate​

Theo mặc định, khi bạn tìm kiếm tên tệp bằng locate, thì tên bạn truyền vào - chẳng hạn như NAME - sẽ được thay thế ngầm định bằng *NAME*. Ví dụ, nếu tôi tìm kiếm tên tệp 'testfile', thì tất cả các tên khớp với *testfile* sẽ được tạo ra trong đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22372%22%3E%3C/svg%3E


Nhưng nếu yêu cầu là tìm kiếm các tệp có tên khớp chính xác với 'testfile' thì sao? Trong trường hợp này, bạn sẽ phải sử dụng biểu thức chính quy, có thể được bật bằng tùy chọn dòng lệnh -r. Vì vậy, đây là cách bạn có thể tìm kiếm chỉ 'testfile' bằng cách sử dụng biểu thức chính quy:
Mã:
locate -r /testfile$

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22355%22%20height=%2257%22%3E%3C/svg%3E


Nếu bạn mới làm quen với biểu thức chính quy, hãy xem tại đây. Để chuyển sang một thư mục khác, bạn có thể sử dụng lệnh cd của shell.

Kết luận​

Locate cung cấp nhiều tùy chọn hơn, nhưng những tùy chọn chúng tôi thảo luận ở đây sẽ đủ để cung cấp cho bạn ý tưởng cơ bản về tiện ích dòng lệnh, cũng như giúp bạn bắt đầu. Chúng tôi khuyên bạn nên thử tất cả các tùy chọn được mô tả ở đây trên máy Linux của bạn, sau đó chuyển sang các tùy chọn khác mà bạn có thể tìm thấy trên trang hướng dẫn của công cụ.
 
Back
Bên trên