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

29019
mk12

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

96
Извините, но в моей системе OS X 10.5.8, которая ** и ** всегда ** дают одинаковые результаты. Может быть, это * очень специфический вопрос для OS X, так как я согласен, ожидается другой результат. Возможно, где это не соответствует тому, что он должен делать. По крайней мере два примера (см. Ниже) не работают: whereis ls и whereis php всегда дают один и тот же результат, что и какой ... Кто-нибудь может это подтвердить? Снежный барс ведет себя так же? Wolf 14 лет назад 0
Да, я знаю, поэтому я задал этот вопрос. mk12 14 лет назад 0
@Wolf - это пример того, как `which` и` whereis` дают различный вывод (на macOS Sierra) http://apple.stackexchange.com/questions/259047/ssh-add-k-has-stopped-working Matthew 7 лет назад 0
@ mk12 Я чувствую, что `type` лучше. Он также знает об определенных псевдонимах, функциях и т. Д. Blauhirn 5 лет назад 0

4 ответа на вопрос

107
Denilson Sá Maia

Как насчет изучения 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 
не знал о чем, спасибо. mk12 14 лет назад 28
Кстати, я бы удалил тег "osx", так как этот вопрос относится ко всем вариантам Unix (включая Linux, BSD, Mac OS X, ...) Denilson Sá Maia 14 лет назад 1
поменял на юникс mk12 14 лет назад 0
Это больше, чем это. В моей системе, где и которые возвращают разные пути к исполняемым файлам. Я могу получить только путь к тому, который на самом деле работает с `whereis`, а не к тому, для которого` which`. Jordan Reiter 7 лет назад 1
@JordanReiter: Этого не может быть! `which` показывает фактический путь. Вы уверены, что путь, на который указывает `which`, не просто символическая ссылка на путь, на который указывает 'whereis`? Может быть, это псевдоним оболочки. В bash попробуйте запустить `type your_cmd_here`. Denilson Sá Maia 7 лет назад 1
@ DenilsonSá, к сожалению, я не могу воссоздать ситуацию, но когда я столкнусь с ней снова, я предоставлю более подробную информацию. Jordan Reiter 7 лет назад 0
@ DenilsonSáMaia, я получаю то же самое. `` `$ type xcodebuild -> xcodebuild хэшируется (/ usr / local / bin / xcodebuild) $ which xcodebuild -> / usr / local / bin / xcodebuild $ whereis xcodebuild -> / usr / bin / xcodebuild`` `И при запуске` xcodebuild` всегда выбирается неправильная (то есть команда `/ usr / bin`), даже если` / usr / local / bin` имеет более высокий приоритет `$ PATH`. jdk1.0 5 лет назад 0
21
Amber

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

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

Что такое * nix? mk12 14 лет назад 0
Unix, Linux и т. Д. (Mac OS X, принадлежащие и т. Д.) 14 лет назад 2
Оооо, ха-ха, я всегда думал, что переполнение стека подвергает цензуре U в Unix всякий раз, когда я вижу это по какой-то причине ... mk12 14 лет назад 8
Нету. Просто довольно распространенное соглашение о творческом использовании подстановочных знаков для обозначения семейства подобных операционных систем. ;) 14 лет назад 0
6
Pascal MARTIN

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

где :

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
user192505

который ищет исполняемые файлы в каталогах, указанных в переменной окружения 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? Насколько я помню, локация опирается на это Oliver M Grech 6 лет назад 0