які / де відмінності


112

Яка різниця між whichі whereis?


Вибачте, але в моїй системі 10.5.8 OS X, яка і де завжди дає однакові результати. Може бути , це є дуже OS X конкретне питання, так як я згоден, інший результат , як очікується. Можливо, це не відповідає тому, що він повинен робити. Принаймні два приклади (див. Нижче) не працюють: де ls і де php завжди дають такий самий результат, як і який ... Чи може хтось це підтвердити? Чи так поводиться Сніговий леопард?
Вовк

Так, я знаю, тому я задав це питання.
mk12

@Wolf ось приклад 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
BTW, я б видалив тег "osx", оскільки це питання стосується всіх варіантів unix (включаючи Linux, BSD, Mac OS X, ...)
Denilson Sá Maia,

змінено на unix
mk12

1
Тут є більше, ніж це. У моїй системі, де повертаються різні виконувані шляхи. Я можу отримати лише той шлях, до якого насправді працює whereis, а не той, для якого which.
Jordan Reiter

1
@JordanReiter: Не може бути! whichпоказує фактичний шлях. Ви впевнені, що шлях, на який вказує, whichне є просто символьним посиланням на вказаний шлях whereis? Можливо, це псевдонім оболонки. В баш, спробуйте бігти type your_cmd_here.
Denilson Sá Maia

23

whereis здійснює пошук у стандартних * nix місцях для вказаної команди.

whichздійснює пошук у вашому користувальницькому PATH (який може включати деякі місця, де здійснюється пошук, а може не включати інші - він також може включати деякі місця, які whereisне здійснюють пошук, якщо ви були додані до вашої PATH)


Що таке * nix?
mk12

2
Unix, Linux тощо (Mac OS X, що належить і т. Д.)

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

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

6

Цитуючи свої чоловічі сторінки:

де :

де знаходиться джерельний / двійковий та посібники розділи для вказаних файлів.

Наприклад :

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

тобто виконуваний файл "php" та деякі інші елементи (наприклад, man man).


і які :

який повертає імена файлів, які були б виконані в поточному середовищі

Наприклад :

$ which php
/usr/bin/php

тобто виконується тільки "php".


1

які шукають виконувані файли в каталогах, визначених змінною середовища PATH. І якщо це з'ясується, буде надруковано повне ім'я цього виконуваного файлу.

$ what ls
/ bin / ls
$ what ifconfig
$ # Немає результатів, оскільки ifconfig існує лише у PATH кореня.

в якому пошук виконуваних файлів, вихідних файлів та сторінок керівництва за допомогою автоматичної бази даних, створеної системою.

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

Але мені здається , що WhereIs і місцезнаходження не використовувати ту ж базу даних. Коли я встановив програмне забезпечення , а потім використовував WhereIs і знайти відразу шукати для цього програмного забезпечення. Результатом є те , що WhereIs може знайти деякі файли , пов'язані з цим програмним забезпеченням , поки знайти не вдалося. Вони справді використовують різні бази даних? Як працює база даних? - Ну, а як із відмовою бути педантом? :)


Ви запустили оновлену команду? Локація покладається на це, наскільки я пам’ятаю
Олівер М Греч,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.