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.