jakie / gdzie różnice


112

Jaka jest różnica między whichi whereis?


Przykro mi, ale na moim systemie OS X 10.5.8, które i gdziekolwiek zawsze dają te same wyniki. Być może jest to pytanie specyficzne dla systemu OS X, ponieważ zgadzam się, że oczekiwany jest inny wynik. Może whereis nie przestrzega tego, co powinien zrobić. Przynajmniej dwa przykłady (patrz poniżej) nie działają: whereis ls i whereis php zawsze dają ten sam wynik, co ... Czy ktoś to może potwierdzić? Czy Snow Leopard zachowuje się tak samo?
Wolf

Tak, wiem, dlatego zadałem to pytanie.
mk12

@Wolf tutaj jest przykład whichi whereisdaje różne dane wyjściowe (na macOS Sierra) apple.stackexchange.com/questions/259047/…
Matthew

@ mk12 Wydaje mi się, że typejest lepszy. Wie także o zdefiniowanych
aliasach

Odpowiedzi:


121

Co powiesz na naukę whereisi whichkorzystanie whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Zasadniczo whereiswyszukuje „potencjalnie przydatne” pliki, podczas gdy whichszuka tylko plików wykonywalnych.

Rzadko używam whereis. Z drugiej strony whichjest bardzo przydatny, szczególnie w skryptach. whichjest odpowiedź na następujące pytanie: Skąd pochodzi to polecenie?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2

34
nie wiedziałem o whatis, dzięki.
mk12

1
BTW, usunę tag „osx”, ponieważ to pytanie dotyczy wszystkich wariantów unixa (w tym Linux, BSD, Mac OS X, ...)
Denilson Sá Maia

zmieniono na unix
mk12

1
Jest w tym coś więcej. W moim systemie whereis i które zwracają różne ścieżki wykonywalne. Mogę tylko uzyskać ścieżkę do tego, który faktycznie biegnie whereis, a nie do tego which.
Jordan Reiter,

1
@JordanReiter: Nie może być! whichpokazuje rzeczywistą ścieżkę. Czy jesteś pewien, że wskazana ścieżka whichnie jest tylko dowiązaniem symbolicznym do wskazanej ścieżki whereis? Może to jest alias powłoki. W bash spróbuj uruchomić type your_cmd_here.
Denilson Sá Maia

23

whereis przeszukuje standardowe lokalizacje * nix w poszukiwaniu określonego polecenia.

whichprzeszukuje Twoją ŚCIEŻKĘ określoną przez użytkownika (która może obejmować niektóre lokalizacje, w których przeszukuje, i może nie obejmować innych - może również obejmować niektóre miejsca, które whereisnie wyszukują, jeśli dodałeś do ŚCIEŻKI)


Co to jest * nix?
mk12

2
Unix, Linux itp. (Mac OS X należący do itp.)

8
Ohhh, haha, zawsze myślałem, że przepełnienie stosu cenzurowało U w unixie, ilekroć to widziałem z jakiegoś powodu ..
mk12 12.09.2009

Nie. Tylko dość powszechna konwencja twórczego używania symboli wieloznacznych w odniesieniu do rodziny podobnych systemów operacyjnych. ;)

6

Cytując strony man:

gdzie :

whereis lokalizuje sekcje źródłowe / binarne i podręczniki dla określonych plików.

Na przykład :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

tzn. plik wykonywalny „php” i kilka innych rzeczy (takich jak strony podręcznika man).


i który :

który zwraca ścieżki do plików, które zostałyby wykonane w bieżącym środowisku

Na przykład :

$ which php
/usr/bin/php

tzn. tylko plik wykonywalny „php”.


1

które wyszukują pliki wykonywalne w katalogach określonych przez zmienną środowiskową PATH. A jeśli się dowiesz, zostanie wydrukowana pełna nazwa ścieżki tego pliku wykonywalnego.

$ which ls
/ bin / ls
$ which ifconfig
$ # Brak danych wyjściowych, ponieważ ifconfig istnieje tylko w ścieżce roota.

whereis automatycznie wyszukuje pliki wykonywalne, pliki źródłowe i strony podręcznika, korzystając z bazy danych zbudowanej przez system.

$ whereis mniej
mniej: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Wygląda jednak na to, że whereis i locate nie korzystają z tej samej bazy danych. Kiedy zainstalowałem oprogramowanie, a następnie użyłem whereis i natychmiast zlokalizowałem, aby wyszukać to oprogramowanie. Powoduje to, że whereis może znaleźć niektóre pliki związane z tym oprogramowaniem, podczas gdy lokalizacja nie może. Czy naprawdę używają innej bazy danych? Jak działa baza danych? - No to może odmówić bycia pedantem? :)


czy uruchomiłeś komendę updatedb? locate polega na tym, o ile pamiętam
Oliver M. Grech,
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.