Різниця між locate та що у Linux


27

Яка різниця між Linux locateта whichLinux?

Чому, коли я використовую locate mentor, у ньому перераховано весь наставник, але коли я which mentorйого використовую, написано "немає наставника у ..." - що це означає?


Перегляньте це пов’язане unix.stackexchange.com/a/60208/84427
каламбур

Є також whereі whereis.
Ян Тойнар

в Баш, вважають за краще: type -all acommand. І якщо я прочитаю XYProblem за вашим запитанням: у вас є команда, ви можете бачити її за допомогою locate, але не можете її виконати? потім відредагуйте PATH або у ~/.profileфайлі конкретного користувача , або якщо ви впевнені, що знаєте, що робити, у глобальному /etc/profileфайлі [ПОПЕРЕДЖЕННЯ: ви можете порушити системні сценарії (і, можливо, багато ОС), якщо ви додасте неправильний шлях у $ PATH / etc / profile ... (наприклад: шляхи, що містять команди, які зазвичай знаходяться в інших місцях). Віддайте перевагу лише додаванню в кінці змінної. І , будь ласка , не ставте ::або . де - небудь в цьому PATH.
Олів'є Дулак

Відповіді:


45

У чому різниця між locateі which?

locate використовує раніше вбудовану базу даних, щоб знайти файл.

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

Знайти джерело (1) - man man сторінку

updatedbстворює або оновлює базу даних, яку використовує locate(1). Якщо база даних вже існує, її дані повторно використовуються, щоб уникнути перечитування каталогів, які не змінилися.

updatedbзазвичай виконується щодня cron(8) для оновлення бази даних за замовчуванням ( /var/lib/mlocate/mlocate.db)

Джерело updatedb (8) - Людина сторінки Linux


whichшукає виконуваний файл, шукаючи його в каталогах PATHзмінної середовища.

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

використовуючи той же алгоритм, що і bash(1).

Джерело, яке (1) - Сторінка man Linux


locate mentorперелічує наставника, але which mentorкаже, що "жоден наставник у ..."

Що це означає?

У вас є імена файлів, mentorякі можна знайти в locateбазі даних.

Ви не виконуваний файл або скрипт з ім'ям mentorу вашому PATH.


2
"updatedb" - добре знати, що не тільки Microsoft придумує надто неспецифічні назви речей. (У Win32 DeleteObjectвидаляє об'єкт GDI, CloseHandleзакриває ручку ядра тощо. Аналогічно updatedbоновлює locateБД)
user253751

"котрий" також є особливо корисним у тому випадку, якщо у вас можуть бути декілька версій однієї програми, що б'ють у різних місцях вашого шляху, тому він повідомляє вам, яка саме виконується під час виконання команди. Це було мені корисно раніше, ніж діагностувати несподівану поведінку - наприклад, це допомогло мені зрозуміти, що я залишив вручну встановлену версію утиліти в моїй системі таким чином, що вона перекриває версію, встановлену менеджером пакунків.
Carcer

11

whichполягає у знаходженні команди ( whichповертає назву шляху файлів / посилань, які виконувалися б у поточному середовищі)

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


2
Будь ласка, надайте атрибуцію для своїх джерел - описи у вашій відповіді беруться безпосередньо із підручних сторінок цих утиліт.
Відновіть Моніку ямнотмайнар

5

locateза замовчуванням приймає глобульний шаблон (також може бути використаний шаблон Regex) і шукає в базі даних /var/lib/mlocate/mlocate.dbбудь-яке ім'я файлу, що відповідає шаблону.

whichце команда пошуку повного шляху команди в каталогах, інтерпретованих PATHзмінною оточення.

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