какие / где различия


112

Какая разница между whichа whereis?


Извините, но в моей системе OS X 10.5.8, которая всегда дает одинаковые результаты. Может быть , это является очень OS X конкретный вопрос, так как я согласен, другой результат , как ожидается. Возможно, где это не соответствует тому, что он должен делать. По крайней мере, два примера (см. Ниже) не работают: whereis ls и whereis php всегда дают один и тот же результат, который какой ... Кто-нибудь может это подтвердить? Снежный барс ведет себя так же?
Вольф

Да, я знаю, поэтому я задал этот вопрос.
mk12

@ Волк, вот пример whichи whereisвыдача другого вывода (на macOS Sierra) apple.stackexchange.com/questions/259047/…
Матфея

@ mk12 Я чувствую, что typeлучше. Он также знает об определенных псевдонимах, функциях и т. Д.
phil294

Ответы:


121

Как насчет изучения whereisи whichиспользования 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

По сути, whereisищет «возможно полезные» файлы, а whichищет только исполняемые файлы.

Я редко использую whereis. С другой стороны, whichэто очень полезно, особенно в сценариях. whichответ на следующий вопрос: откуда эта команда?

$  which ls
/bin/ls

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

34
не знал о чем, спасибо.
mk12

1
Кстати, я бы удалил тег «osx», так как этот вопрос относится ко всем вариантам Unix (включая Linux, BSD, Mac OS X, ...)
Денилсон Са Майя

изменено на unix
mk12

1
Это больше, чем это. В моей системе, где и которые возвращают разные пути к исполняемым файлам. Я могу получить только путь к тому, с кем работает whereis, а не к тому, для которого which.
Джордан Рейтер

1
@JordanReiter: Этого не может быть! whichпоказывает фактический путь. Вы уверены, что указанный путь - whichэто не просто символическая ссылка на указанный путь whereis? Может быть, это псевдоним оболочки. В bash попробуйте запустить type your_cmd_here.
Денилсон Са Майя

23

whereis ищет в стандартных местоположениях * nix указанную команду.

whichвыполняет поиск в вашем пользовательском PATH (который может включать некоторые местоположения, в которых выполняется поиск, и может не включать другие - он может также включать некоторые места, в которых whereisне выполняется поиск, если вы добавили в свой PATH)


Что такое * nix?
mk12

2
Unix, Linux и т. Д. (Mac OS X принадлежат и т. Д.)

8
Оооо, ха-ха, я всегда думал, что переполнение стека подвергает цензуре U в Unix всякий раз, когда я вижу это по какой-то причине ..
mk12

Нет. Просто довольно распространенное соглашение о творческом использовании подстановочных знаков для обозначения семейства подобных операционных систем. ;)

6

Цитирую их справочные страницы:

где :

whereis находит разделы с исходными / двоичными файлами и руководствами для указанных файлов.

Например :

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

то есть исполняемый файл "php" и некоторые другие вещи (например, страницы man).


и который :

который возвращает пути к файлам, которые будут выполняться в текущей среде

Например :

$ which php
/usr/bin/php

т.е. только исполняемый файл "php".


1

который ищет исполняемые файлы в каталогах, указанных в переменной окружения PATH. И если выяснится, будет напечатан полный путь к этому исполняемому файлу.

$ which ls
/ bin / ls
$ which ifconfig
$ # Нет выходных данных, потому что ifconfig существует только в PATH root.

где поиск исполняемых файлов, исходных файлов и страниц справочника с использованием базы данных, созданной системой автоматически.

$ где меньше
меньше: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Но похоже, что whereis и locate не используют одну и ту же базу данных. Когда я установил программное обеспечение, а затем использовал whereis и сразу же найти его для поиска этого программного обеспечения. Результатом является то, что whereis может найти некоторые файлы, связанные с этим программным обеспечением, в то время как найти не удалось. Они действительно используют другую базу данных? Как работает база данных? - Ну, а как насчет того, чтобы отказаться от педанта? :)


вы запустили команду updatedb? насколько я помню, locate полагается на это
Oliver M Grech
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.