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?
@ 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
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)
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? :)
which
iwhereis
daje różne dane wyjściowe (na macOS Sierra) apple.stackexchange.com/questions/259047/…type
jest lepszy. Wie także o zdefiniowanychOdpowiedzi:
Co powiesz na naukę
whereis
iwhich
korzystaniewhatis
?Zasadniczo
whereis
wyszukuje „potencjalnie przydatne” pliki, podczas gdywhich
szuka tylko plików wykonywalnych.Rzadko używam
whereis
. Z drugiej stronywhich
jest bardzo przydatny, szczególnie w skryptach.which
jest odpowiedź na następujące pytanie: Skąd pochodzi to polecenie?źródło
whereis
, a nie do tegowhich
.which
pokazuje rzeczywistą ścieżkę. Czy jesteś pewien, że wskazana ścieżkawhich
nie jest tylko dowiązaniem symbolicznym do wskazanej ścieżkiwhereis
? Może to jest alias powłoki. W bash spróbuj uruchomićtype your_cmd_here
.whereis
przeszukuje standardowe lokalizacje * nix w poszukiwaniu określonego polecenia.which
przeszukuje 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órewhereis
nie wyszukują, jeśli dodałeś do ŚCIEŻKI)źródło
Cytując strony man:
gdzie :
Na przykład :
tzn. plik wykonywalny „php” i kilka innych rzeczy (takich jak strony podręcznika man).
i który :
Na przykład :
tzn. tylko plik wykonywalny „php”.
źródło
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.
whereis automatycznie wyszukuje pliki wykonywalne, pliki źródłowe i strony podręcznika, korzystając z bazy danych zbudowanej przez system.
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? :)
źródło