Tại sao chương trình `updateb` chạy quá nhanh?


22

Thông thường khi tôi có các chương trình thực hiện quét toàn bộ đĩa và xem qua tất cả các tệp trong hệ thống, chúng sẽ mất rất nhiều thời gian để chạy. Tại sao updateb chạy quá nhanh trong so sánh?

Câu trả lời:


22

Câu trả lời phụ thuộc vào phiên bản locatebạn đang sử dụng, nhưng có một cơ hội công bằng mlocate, nó updatedbchạy nhanh bằng cách tránh thực hiện quét toàn bộ đĩa:

mlocate là một triển khai xác định vị trí / cập nhật. 'M' là viết tắt của "hợp nhất": updateb sử dụng lại cơ sở dữ liệu hiện có để tránh đọc lại hầu hết hệ thống tệp, giúp cập nhật nhanh hơn và không làm hỏng hệ thống lưu trữ nhiều.

(Cơ sở dữ liệu lưu trữ dấu thời gian của mỗi thư mục, ctimehoặc mtimetùy theo cái nào mới hơn.)

Giống như hầu hết các triển khai khác updatedb, mlocatechúng cũng sẽ bỏ qua các hệ thống tệp và đường dẫn mà nó được cấu hình để bỏ qua. Theo mặc định chẳng có gì trong mlocatetrường hợp 's, nhưng phân phối thường cung cấp một cơ sở updatedb.confmà bỏ qua các hệ thống tập tin mạng, các hệ thống tập tin ảo, vv (xem tập tin cấu hình của Debian ví dụ, đây là phương thức chuẩn trong Debian, vì vậy GNU của updatedbđược cấu hình tương tự ).


Câu hỏi và câu trả lời khá tốt, thậm chí còn không biết có những câu hỏi "khác biệt".
Rui F Ribeiro

1
Cảm ơn! Tôi chưa bao giờ nhận thấy rằng sửa đổi một tập tin cũng thay đổi thời gian và thời gian của tất cả các thư mục mẹ của nó.
hugomg

4
@hugomg Tôi không nghĩ nó thực sự làm được. Nó chỉ nên thay đổi mtimecha mẹ ngay lập tức của nó.
Kusalananda

Vì vậy, nếu tôi hiểu chính xác, hãy mlocatequan tâm ctimemtimengụ ý rằng nó chỉ quan tâm đến việc liệu danh sách các mục trong thư mục có giống nhau không (không có tệp bị xóa hoặc thêm), có nghĩa là nó không quan tâm đến các tệp thực tế. Đúng không ?
Sergiy Kolodyazhnyy

@Sergiy: Tất nhiên rồi. locatekhông phải grep -R. Nó không đọc nội dung tập tin.
Kevin

9

Ngoài việc kiểm tra thời gian sửa đổi, mlocatecũng bỏ qua các phần phụ nhất định của hệ thống tệp có nhiều tệp không quan tâm hoặc có khả năng trùng lặp, như được chỉ định trong /etc/updatedb.conf (và được mô tả trong man updateb.conf ):

  • Gắn kết
  • Một số loại hệ thống tệp (9p, afs, bdev, v.v.)
  • Cơ sở dữ liệu kho lưu trữ VCS (.git, .hg, v.v.)
  • Một số thư mục được mã hóa cứng (/ media, / tmp, / var / spool / cup, v.v.).

Mặc dù đây không phải là trường hợp mặc định, vì vậy hành vi cơ sở phụ thuộc vào phân phối được sử dụng. (Các updatedbtriển khai khác cũng hỗ trợ các loại trừ được định cấu hình.)
Stephen Kitt

Thật. Tôi đã mô tả các mặc định cho Fedora.
hugomg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.