Bądź: Wyszukaj na stronie z użyciem Google
reklama:

niedziela, 7 grudnia 2008

Szybkie wyszukiwanie plików z poziomu konsoli - locate

Autor: , 17:57, niedziela, 7 grudnia 2008


Istnieje program, który jest dostępny chyba we wszystkich dystrybucjach Linuksa... A jego zadaniem jest wyszukiwanie plików na podstawie ich nazwy. Polecenie nazywa się locate i bywa bardzo przydatne.


Na wstępie chciałem zwrócić uwagę czytelników na to, że locate niejedno ma imię. Istnieją różne implementacje tego narzędzia. W repozytorium Ubuntu bez problemu można odnaleźć pakiety locate, slocate i mlocate. W Ubuntu Hardy Heron domyślnie zainstalowany jest wariant mlocate, który jest "bezpieczniejszy" - nie wyświetla tych plików, których dany użytkownik nie mógłby normalnie wyświetlić ze względu na brak uprawnień (taka funkcjonalnosć instnieje także w slocate), a poza tym powinien być szybszy przy indeksowaniu, ponieważ nie odczytuje zawartości katalogu, jeśli się on nie zmienił od ostatniego indeksowania. Opisy pakietów można przeczytać z poziomu Synaptica.
Jak działa program locate? Przeszukuje bazę z listą plików i jeżeli odnajdzie w niej ciąg taki, jaki wpisaliśmy jako parametr (i mamy wystarczające uprawnienia do pliku), wypisze nazwę ścieżki. Na przykład, wpisanie locate c/X wypisze na ekran na przykład /etc/X11 wraz z podkatalogami i zawartością, ale także plik /usr/share/X11/locale/koi8-c/XI18N_OBJS (jeśli oczywiście taki plik mamy na dysku).
Jeszcze jedna sprawa: polecenie locate nie odnajdzie plików, które nie zostały jeszcze zindeksowane. W standardowej konfiguracji Ubuntu indeksowanie odbywa się raz dziennie i odpowiada za to skrypt /etc/cron.daily/mlocate, a ściślej polecenie updatedb (updatedb.mlocate).

Poniżej zaprezentuję typowe przykłady użycia.
Uwaga: wyrażenia podam w pojedynczym cudzysłowie ('), ale jeśli nazwa nie zawiera spacji i znaków typu #, $, cudzysłów można pominąć.

wyszukanie elementu abc
locate 'abc'

wyszukanie elementu abc bez względu na wielkość liter (abc, ABC, Abc, ...)
locate -i 'abc'

wyszukanie elementu abc - tylko w nazwie podstawowej (--basename, -b) - nie wewnątrz ścieżki
locate -b 'abc'

wyszukanie elementu zawierającego ciąg abc i zawierającego ciąg def
locate 'abc' | grep 'def'

jak wyżej, bez uwzględniania wielkości liter
locate -i 'abc' | grep -i 'def'

wyświetlenie statystyk
locate -S

****

Polecenie locate może zostać użyte, gdy interesuje nas ścieżka do jakiegoś programu (np. locate -b apt-get). Istnieją jednak specjalne polecenia służące do tego: whereis i which (to pierwsze wyświetla nieco więcej, na przykład gdzie znajduje się podręcznik man danego programu).
Komentarze 9 comments
Paweł pisze...

w wierszach o znajdowanieu abc i def jednoczesnie

locate 'abc' | grep 'abc'
chyba powinno być locate 'abc' | grep 'def'

znajdź wszystkie abc i wyświetl te z def :)

Enlik pisze...

Dzięki wielkie! Moja pomyłka.
Ale co do tego: "znajdź wszystkie abc i wyświetl te z def" - technicznie jest to lepiej napisane, ale na jedno wychodzi. :-)

fieloryb pisze...

Czytuję sobie tego bloga z przyjemnością i jedna wada jaką widzę we wpisach to fakt, że często ledwie "napoczynasz" temat nie zajmując się nim do końca.

Dobrze, że są czytelnicy. Tym razem nie wspomniałeś o poleceniu
updatedb
które uaktualnia bazę danych z której korzysta locate.

Tak przy okazji - jak z wiersza poleceń wyszukać fragment tekstu w plikach konfiguracyjnych i tekstowych? Co w takim wypadku z polskimi znakami diakrytycznymi w różnych stronach kodowania (win iso utf)?? To jest problem...

fieloryb pisze...

ale bubla walnąłem - jest update, jest
...
właśnie się czerwienię ze wstydu

w ramach usprawiedliwienia napiszę, że zaraz idę spać i jutro już błędu nie popełnię...

Anonimowy pisze...

a jak znalesc plik szukajac bezposrednio w katalogach, a nie w bazie danych?

fieloryb pisze...

jeśli koniecznie chcesz to sposobem jest użycie midnight commandera (w konsoli po zainstalowaniu wydajesz polecenie mc)

Enlik pisze...

Jest polecenie find.
@fieloryb
Dobrze prawisz, mc nawet pozwala na wyszukiwanie zawartości w plikach (przed chwilą sprawdziłem - miodzio). ;)

Marcin pisze...

Jak w mc wyszukać plik po zawartości ??

Enlik pisze...

rozwiń menu (F9) -> Polecenie -> Znajdź plik
lub skrót: alt + ?

w okienku możesz wcisnąć alt+h - pojawią się wcześniej wpisane elementy
(w polach Rozpoczęcie w i 2 pozostałych)

po wypełnieniu pól przycisk OK

Prześlij komentarz


Popularne posty

Etykiety