Jaka jest różnica między „lokalizowaniem” a „znajdowaniem” w systemie Linux?

41

Dlaczego w Linuksie są dwa tak podobne polecenia? i zwykle w jakich okolicznościach należy użyć każdego z nich?

zhanwu
źródło
6
Aby uzyskać lepsze odpowiedzi zarówno pod względem głębi, jak i kompletności, zobacz tę odpowiedź w Unix i Linux .
Ten Brazylijczyk

Odpowiedzi:

38

findwyszukuje w prawdziwym systemie. Jest wolniejszy, ale zawsze aktualny i ma więcej opcji (rozmiar, czas modyfikacji, ...)

locateużywa poprzednio zbudowanej bazy danych (polecenie updatedb). Jest znacznie szybszy, ale korzysta ze „starszej” bazy danych i wyszukuje tylko nazwy lub ich części.

W każdym razie man findi man locatepomoże ci dalej.

eumiro
źródło
1
... i updatedbrobić mniej więcej coś takiego find / -type f | gzip > locate.gz.
F. Hauri
10
unix.stackexchange.com/questions/60205/… odpowiada bardziej szczegółowo na to pytanie.
orzechowy o natty
3

Zarówno locatei findpoleceń znajdzie plik, ale działają w zupełnie inny sposób.

locate będzie działać w trybie offline:

  • Dla prostego wyjaśnienia baza danych indeksowania plików w systemie Unix o nazwie slocate wyświetli lokalizację wszystkich plików dostarczanych z systemem Unix. Po uruchomieniu locateużyje tej bazy danych do wyszukania określonego pliku. Problem locatepolega na tym, że jeśli właśnie utworzyłeś plik, który chcesz teraz wyszukać, lokalizacja nie będzie działać, ponieważ baza danych slocate nie jest aktualna. Aby rozwiązać ten problem, możesz użyć updatedbdo zaktualizowania bazy danych Slocate . Wykonywanie locateponownie znajdzie się teraz na nowo utworzony plik. Dlatego wielu administratorów systemu Linux używa cronzadania do regularnej aktualizacji bazy danych slocate .

find będzie działać w trybie online / „w czasie rzeczywistym”.

  • W rzeczywistości przejdzie do wszystkich katalogów, aby znaleźć określony plik i sprawdzi każdy plik jeden po drugim. Dlatego wymaga wielu wywołań We / Wy.

Tak więc w oparciu o naturę jasne jest, że lokalizowanie jest szybsze niż wyszukiwanie, ale wyszukiwanie odbywa się w czasie rzeczywistym.

Mam nadzieję, że pomoże to wyjaśnić ten pomysł. Wszystkiego najlepszego. :)

kazi Tanvir Ahsan
źródło
0

locate po prostu przegląda bazę danych i zgłasza lokalizację pliku.

find nie korzysta z bazy danych, przegląda wszystkie katalogi i ich podkatalogi i szuka plików spełniających podane kryterium.

kotwica
źródło
0

Alternatywą dla użycia find jest polecenie locate. To polecenie jest często szybsze i może z łatwością przeszukiwać cały system plików. Możesz zainstalować polecenie za pomocą apt-get:

sudo apt-get update
sudo apt-get install mlocate

Lokalizacja jest szybsza niż znajdowanie, ponieważ polega ona na bazie danych plików w systemie plików. Baza danych jest zwykle aktualizowana raz dziennie za pomocą skryptu cron, ale można ją zaktualizować ręcznie, wpisując:

sudo updatedb

Uruchom to polecenie teraz. Pamiętaj, że baza danych musi być zawsze aktualna, jeśli chcesz znaleźć ostatnio uzyskane lub utworzone pliki.

m-tech
źródło