locate

Szybko odnajduje pliki po nazwie korzystając z indeksowanej bazy danych.

locate to twój skrót do znajdowania plików po nazwie — zamiast przeczesywać cały dysk w locie (jak robi find), zagląda do gotowej bazy danych zbudowanej wcześniej przez updatedb. Efekt: wynik dostajesz w ułamku sekundy, nawet na dysku z milionami plików. Wpisujesz fragment nazwy, a locate wypluwa pełne ścieżki do wszystkiego, co pasuje. Haczyk jest jeden: szuka w indeksie, a nie na żywym systemie, więc plik utworzony pięć minut temu może jeszcze nie istnieć w bazie. O tym za chwilę.

Składnia i najważniejsze opcje

Podstawowa forma jest banalna:

locate [OPCJE] WZORZEC

  • -i (--ignore-case) — ignoruje wielkość liter w nazwie i wzorcu.
  • -c (--count) — zamiast ścieżek wypisuje samą liczbę dopasowań.
  • -b (--basename) — dopasowuje tylko nazwę pliku, nie całą ścieżkę.
  • -r (--regexp) — traktuje wzorzec jako wyrażenie regularne (POSIX), a nie glob.
  • -e (--existing) — pokazuje tylko pliki, które naprawdę istnieją w chwili wywołania.
  • -l N (--limit N) — ogranicza liczbę wyników do N.
  • -0 (--null) — rozdziela wyniki znakiem NUL, idealne do przekazania przez xargs -0.
  • -S (--statistics) — wyświetla statystyki bazy (ile plików, rozmiar) zamiast szukać.

Przykłady użycia

  • locate nginx.conf — znajduje wszystkie ścieżki zawierające nginx.conf.
  • locate -i readme — szuka README, ReadMe, readme itd., niezależnie od wielkości liter.
  • locate -c .log — zlicza, ile wpisów w bazie zawiera .log (bez wypisywania ich).
  • locate -b '\bashrc' — dopasowuje dokładnie nazwę bashrc w bazie (znak \ wyłącza domyślne dosklejanie gwiazdek do wzorca).
  • locate -r '/etc/.*\.conf$' — wyrażeniem regularnym znajduje wszystkie pliki .conf w /etc.

Częste błędy i pułapki

Numer jeden: świeży plik się nie pokazuje. Baza nie aktualizuje się sama na bieżąco — w wielu dystrybucjach robi to cron raz dziennie. Jeśli właśnie coś utworzyłeś i tego nie widzisz, odśwież indeks ręcznie: sudo updatedb. Odwrotny problem: locate pokazuje plik, którego już nie ma — bo wpis siedzi w bazie. Wtedy ratuje flaga -e.

Druga rzecz: na minimalnym systemie czy w kontenerze polecenia może w ogóle nie być — pakiet to zwykle mlocate albo plocate (szybszy następca). Składnia jest niemal identyczna, ale drobne flagi potrafią się różnić, więc w razie wątpliwości zerknij w man locate. Pamiętaj też, że locate respektuje uprawnienia: domyślnie nie pokaże plików, do których twój użytkownik nie ma dostępu.

Powiązane komendy: updatedb (budowa bazy), find (przeszukiwanie na żywo, wolniejsze, ale aktualne), which i whereis (lokalizowanie binarek i dokumentacji).