Zwykle, gdy mam programy, które wykonują pełne skanowanie dysku i przeglądają wszystkie pliki w systemie, ich uruchomienie zajmuje bardzo dużo czasu. Dlaczego updatedb działa tak szybko w porównaniu?
źródło
Zwykle, gdy mam programy, które wykonują pełne skanowanie dysku i przeglądają wszystkie pliki w systemie, ich uruchomienie zajmuje bardzo dużo czasu. Dlaczego updatedb działa tak szybko w porównaniu?
Odpowiedź zależy od wersji locate
używasz, ale istnieje spora szansa, że to mlocate
, którego updatedb
biegnie szybko, unikając robi pełne skanowanie dysku:
mlocate to implementacja locate / updatedb. „M” oznacza „scalanie”: updatedb ponownie wykorzystuje istniejącą bazę danych, aby uniknąć ponownego odczytu większości systemu plików, co powoduje, że updatedb jest szybsze i nie powoduje tak dużej utraty pamięci podręcznej systemu.
(Baza danych przechowuje sygnaturę czasową każdego katalogu ctime
lub mtime
, w zależności od tego, co jest nowsze).
Podobnie jak większość implementacji updatedb
, mlocate
pominie także systemy plików i ścieżki, które jest skonfigurowane do ignorowania. Domyślnie nie ma mlocate
takiego przypadku, ale dystrybucje zazwyczaj zapewniają podstawowe, updatedb.conf
które ignorują sieciowe systemy plików, wirtualne systemy plików itp. (Patrz na przykład plik konfiguracyjny Debiana ; jest to standardowa praktyka w Debianie, więc GNU updatedb
jest skonfigurowane podobnie ).
mtime
swojego bezpośredniego rodzica.mlocate
obchodzictime
imtime
co oznacza, że dba tylko od tego, czy lista wpisów do katalogów jest wciąż ten sam (bez usuwania lub dodawania plików), co oznacza, że nie dba o rzeczywistych plików siebie. Czy to jest poprawne ?locate
nie jestgrep -R
. Nie odczytuje zawartości pliku.Oprócz sprawdzania czasów modyfikacji,
mlocate
ignorowane są także niektóre poddrzewa systemu plików, które zawierają wiele nieciekawych lub potencjalnie zduplikowanych plików, jak określono w /etc/updatedb.conf (i opisano w man updatedb.conf ):źródło
updatedb
implementacje obsługują również skonfigurowane wykluczenia.)