Różnica między lokalizacją a tym, które w systemie Linux

27

Jaka jest różnica pomiędzy Linuksem locatea whichLinuksem?

Dlaczego, kiedy korzystam locate mentor, wyświetla listę wszystkich mentorów, ale kiedy korzystam which mentor, mówi „brak mentora w ...” - co to znaczy?

Naddy
źródło
Zobacz to powiązane unix.stackexchange.com/a/60208/84427
pun
Są też wherei whereis.
Jan Tojnar
w bash, wolą: type -all acommand. A jeśli przeczytam XYProblem za twoim pytaniem: masz polecenie, możesz je zobaczyć przez lokalizację, ale nie możesz go wykonać? następnie edytuj ŚCIEŻKĘ w ~/.profilepliku konkretnego użytkownika lub jeśli jesteś przekonany, że wiesz, co robić, w /etc/profilepliku globalnym [OSTRZEŻENIE: możesz zepsuć skrypty systemowe (i być może wiele systemów operacyjnych), jeśli dodasz niewłaściwą ścieżkę w $ PATH z / etc / profile ... (np. ścieżki zawierające polecenia zwykle spotykane gdzie indziej). Preferuj dodawanie tylko na końcu zmiennej. I proszę, nie umieszczaj ::ani . nigdzie w tej ŚCIEŻCE.
Olivier Dulac

Odpowiedzi:

45

Jaka jest różnica między locatei which?

locate używa wcześniej zbudowanej bazy danych do zlokalizowania pliku.

locateodczytuje jedną lub więcej baz danych przygotowanych przez updatedb(8) i zapisuje nazwy plików pasujące co najmniej do jednej z WZORÓW na standardowe wyjście, po jednej w wierszu.

Lokalizacja źródła (1) - strona podręcznika użytkownika systemu Linux

updatedbtworzy lub aktualizuje bazę danych używaną przez locate(1). Jeśli baza danych już istnieje, jej dane są ponownie wykorzystywane, aby uniknąć ponownego czytania katalogów, które nie uległy zmianie.

updatedbjest zwykle uruchamiany codziennie przez cron(8) w celu aktualizacji domyślnej bazy danych ( /var/lib/mlocate/mlocate.db)

Źródło zaktualizowaneb (8) - strona podręcznika użytkownika systemu Linux


whichszuka pliku wykonywalnego, wyszukując go w katalogach PATHzmiennej środowiskowej.

whichpobiera jeden lub więcej argumentów. Dla każdego z argumentów wypisuje stdoutpełną ścieżkę do plików wykonywalnych, które zostałyby wykonane, gdyby ten argument został wprowadzony w wierszu poleceń powłoki. Robi to, szukając pliku wykonywalnego lub skryptu w katalogach wymienionych w zmiennej środowiskowej PATH.

przy użyciu tego samego algorytmu jak bash(1).

Źródło, które (1) - strona podręcznika użytkownika systemu Linux


locate mentorwymienia mentora, ale which mentormówi „brak mentora w ...”

Co to znaczy?

Masz kilka nazwanych plików, mentorktóre można znaleźć w locatebazie danych.

Nie masz plik wykonywalny lub skrypt o nazwie mentorw twojej PATH.

DavidPostill
źródło
2
„updatedb” - dobrze wiedzieć, że nie tylko Microsoft wymyśla zbyt niespecyficzne nazwy rzeczy. (W Win32 DeleteObjectusuwa obiekt GDI, CloseHandlezamyka uchwyt jądra itp. Podobnie updatedbaktualizuje locateDB)
user253751
„Które” jest również szczególnie przydatne w przypadku, gdy możesz mieć wiele wersji tego samego programu, które uruchamiają się w różnych miejscach na twojej ścieżce, więc mówi ci, który z nich jest faktycznie wykonywany po uruchomieniu polecenia. Było to dla mnie pomocne w diagnozowaniu nieoczekiwanego zachowania - na przykład pomogło mi uświadomić sobie, że zostawiłem ręcznie zainstalowaną wersję narzędzia w moim systemie, tak że zastępowało wersję zainstalowaną przez menedżera pakietów.
Carcer
11

whichjest zlokalizowanie polecenia ( whichzwraca nazwę ścieżki do plików / linków, które zostałyby wykonane w bieżącym środowisku)

locatepolega na znajdowaniu plików według nazwy ( locateodczytuje jedną lub więcej baz danych przygotowanych przez updatedbi zapisuje nazwy plików pasujące co najmniej jeden z wzorców do standardowego wyjścia, jeden w wierszu)

manjesh23
źródło
2
Podaj atrybucję dla swoich źródeł - opisy w odpowiedzi pochodzą bezpośrednio ze stron podręcznika dla tych narzędzi.
Przywróć Monikę iamnotmaynard
5

locatedomyślnie przyjmuje wzorzec globalny (można również użyć wzorca Regex) i przeszukuje bazę danych w /var/lib/mlocate/mlocate.dbposzukiwaniu dowolnej nazwy pliku pasującej do wzorca.

whichto polecenie służące do wyszukiwania pełnej ścieżki polecenia w katalogach interpretowanych przez PATHzmienną środowiskową.

heemayl
źródło