Jaka jest różnica między locate / whereis / which


13

Jaka jest podstawowa różnica między poleceniem locate whereisa whichkomendą.

Podstawową różnicą, którą zaobserwowałem, jest to, że locatelokalizuje wszystkie powiązane nazwy plików w całym systemie plików, whereisa whichpolecenia podają tylko lokalizację (system / lokalny adres pliku) zainstalowanej aplikacji. Jak dokładna jest moja obserwacja?

W jaki sposób te polecenia są implementowane wewnętrznie. Dlaczego locatedziała tak szybko w porównaniu do wyszukiwania myślnika, podczas gdy locatemusi wyszukiwać konkretną nazwę pliku pasującą do ciągu docelowego w całej hierarchii systemu plików?


2
i co type? : P
jamesmstone,

@jamesmstone, co masz na myśli type, proszę rozwinąć
Chinmaya B

2
Przepraszam, właśnie próbowałem dodać do twojego pytania. typeto kolejne polecenie, które wydaje mi się (moim zdaniem) podobne do tych, o których wspomniałeś.
jamesmstone,

@ jamesmstone Nie sądzę, aby w moim systemie działało polecenie typu. Nie mogę znaleźć żadnej instrukcji ani strony informacyjnej dla tego typepolecenia. Próbowałem man typei info type.
Chinmaya B,

Hmm Zastanawiam się, dlaczego ... Używasz bash?
jamesmstone,

Odpowiedzi:


17

whichznajduje binarny plik wykonywalny programu (jeśli jest w twojej ŚCIEŻCE). man whichwyjaśnia jaśniej:

który zwraca ścieżki do plików (lub łączy), które byłyby wykonywane w bieżącym środowisku, gdyby jego argumenty były podane jako polecenia w ściśle zgodnej z POSIX powłoce. Robi to, przeszukując PATH w poszukiwaniu plików wykonywalnych pasujących do nazw argumentów. Nie podąża za symbolicznymi linkami.

whereisznajduje pliki binarne, źródłowe i strony man dla programu. Na przykład

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Możesz uzyskać dodatkowe szczegóły, przekazując dane wyjściowe tych poleceń jako argumenty do ls -llubfile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locatefaktycznie znajduje wszystkie pliki, które mają wzorzec określony w dowolnym miejscu na ścieżce. Możesz nakazać mu znajdowanie tylko plików i katalogów, których nazwy (zamiast pełnych ścieżek) zawierają wzorzec z -bopcją, która jest zwykle tym, czego chcesz, i daje mniej nieporęczną listę.

locatejest szybki, ponieważ korzysta z binarnej bazy danych, która jest okresowo aktualizowana (raz dziennie przez cron). Możesz go zaktualizować samodzielnie, aby mieć pewność, że ostatnio dodane pliki zostaną odnalezione przez uruchomieniesudo updatedb

Jeszcze jedno locate- nie ma znaczenia, czy pliki nadal istnieją, czy nie, więc aby uniknąć znajdowania ostatnio usuniętych plików, użyj -e. Często też przesyłam potokiem, lessponieważ lista może być długa. Zazwyczaj robię:

sudo updatedb && locate -b -e gimp | less

Jak działa kreska jedności wyjaśnił, jest tutaj - korzysta Zeitgeist do systemu plików indeksowych i uczyć się od sposobu użytkowania i umożliwia innych aplikacji do korzystania z tych danych, więc to robi dużo więcej pracy niż locate.


czy potrafisz porównać myślnik i zlokalizować szczegóły wykonania polecenia i implementacji? Aktualizacji binarnej bazy danych należy dokonać po utworzeniu nowego pliku w systemie, czyż nie jest tak, że okres byłby nieokreślony poprawnie, czy też jest zarządzany przez procesy systemowe?
Chinmaya B,

2
@Creator automatycznie aktualizuje bazę danych przez crona, raz dziennie. Możesz sprawdzić, kiedy instalujesz coś, z czym nie możesz od razu znaleźć plików locate. Kreska używa zupełnie innego indeksu - wolniej, ponieważ robi więcej rzeczy (zredagowałem swoją odpowiedź)
Zanna

1
Podsumowując, lokalizowanie jest przydatne i potężniejsze niż to, które lub gdzie jest, ale jest głupie, podczas gdy myślnik jest potężniejszy i wdraża uczenie maszynowe. i dzięki za sudo updatedbtwoje polecenie jest bardzo pomocne nie wiedziałem, że chociaż regularnie używałem -e.
Chinmaya B,

@ Twórca, tak, lepiej to sformułowałeś :) szczęśliwy, że to pomogło
Zanna,

0

Po prostu

$ which samba

które polecenie przeszukuje listę programów wymienionych w ustawieniach PATH

$ whereis samba

Komenda whereis wyszukuje również programy, które nie są obecne w ustawieniu PATH

$locate samba

Znajduje również pliki według nazwy pliku, ale nie przeszukuje samej struktury katalogów, a jedynie bazę danych przygotowaną przez updatedb. Z tego powodu lokalizacja jest szybsza niż wyszukiwanie, ale mniej dokładna. Przykłady:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.