Яка різниця між locate / whereis / what


13

Яка основна різниця між locate whereisі whichкомандою.

Основна відмінність, яку я зауважила, полягає в тому, що locateлокалізує всі пов'язані імена файлів у всій файловій системі, тоді як whereisі whichкоманди вказують лише розташування (системна / локальна адреса файлу) встановленої програми. Наскільки точне моє спостереження?

Як ці команди реалізуються внутрішньо. Чому locateпрацює так швидко порівняно з пошуковим тире, при цьому locateдоводиться шукати конкретне ім’я файлу, яке відповідає цільовому рядку у всій ієрархії файлової системи?


2
а про що type? : P
jamesmstone

@jamesmstone, що ви маєте на увазі type, будь ласка, докладно поясніть
Chinmaya B

2
Вибачте, що я просто намагався додати ваше запитання. typeце ще одна команда, яка, здається (на мій погляд), робить подібну дію з тією, яку ви згадали.
jamesmstone

@jamesmstone Я не думаю, що в моїй системі є якась команда типу. Я не можу знайти жодної сторінки керівництва чи інформації для typeкоманди. Я спробував man typeі info type.
Chinmaya B

Хм, мені цікаво, чому ... Ти використовуєш баш?
jamesmstone

Відповіді:


17

whichзнаходить двійковий виконуваний файл програми (якщо він є у вашому PATH). man whichпояснює більш чітко:

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

whereisзнаходить файли бінарних файлів, джерела та довідкової сторінки для програми. Наприклад

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Ви можете отримати додаткову деталь, передавши висновок цих команд як аргументи до ls -lабоfile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locateдійсно знаходить усі файли, що мають шаблон, вказаний в будь-якому місці їхніх шляхів. Ви можете сказати, щоб він знаходив лише файли та каталоги, імена яких (а не повні шляхи) містять шаблон із -bможливістю вибору, яка зазвичай є тим, що ви хочете, і дає менш громіздкий список.

locateшвидко, тому що він використовує двійкову базу даних, яка періодично оновлюється (раз на день cron). Ви можете оновити його самостійно, щоб переконатися, що нещодавно додані файли знайдено запускомsudo updatedb

Ще одна річ locate- не важливо, чи існують файли чи ні, тому, щоб не знайти нещодавно видалених файлів, використовуйте -e. Часто я також підказую, що lessяк список може бути довгим. Зазвичай я роблю:

sudo updatedb && locate -b -e gimp | less

Про те, як працює тире Unity, пояснюється тут - він використовує Zeitgeist для індексації системних файлів та навчання за шаблонами використання, а також дає можливість іншим програмам використовувати ці дані, тому це робить набагато більше роботи, ніж locate.


чи можете ви порівняти тире та знайти деталі виконання та виконання команд? Оновлення двійкової бази даних повинно бути здійснено після створення будь-якого нового файлу в системі, чи не так, щоб цей період був невизначено правильним чи він керується системними процесами?
Chinmaya B

2
@Creator оновлює базу даних автоматично, здійснюється cron один раз на день. Ви можете перевірити, встановивши те, з чим не зможете відразу знайти файли locate. Тире використовує зовсім інший індекс - повільніше, оскільки він робить більше матеріалів (я відредагував свою відповідь)
Zanna

1
Отже, підсумовувати пошук корисніше та потужніше, ніж те чи що, але німий, тоді як тире є більш потужним та реалізує машинне навчання. і дякую за sudo updatedbвашу команду дуже корисно не знаю, що, хоча я використовував -е регулярно.
Chinmaya B

@Creator так, ви краще це сформулювали :) щасливі, що це допомогло
Zanna

0

Просто

$ which samba

яка команда здійснює пошук у списку програм, перелічених нижче в налаштуваннях PATH

$ whereis samba

де команда також шукає програми, які відсутні в налаштуваннях PATH

$locate samba

Також знаходить файли за назвою файлів, але не шукає саму структуру каталогу, а лише базу даних, підготовлену оновленням. Через це знайти швидше, ніж знайти, але менш точно. Приклади:

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