Разница между locate и которая в Linux


27

В чем разница между locateи whichв Linux?

Почему, когда я использую 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, в стандартный вывод, по одному на строку.

Source locate (1) - справочная страница по Linux

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

updatedbобычно запускается ежедневно cron(8) для обновления базы данных по умолчанию ( /var/lib/mlocate/mlocate.db)

Источник updatedb (8) - справочная страница по Linux


whichищет исполняемый файл, ища его в каталогах в PATHпеременной среды.

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

используя тот же алгоритм, что и bash(1).

Источник который (1) - справочная страница по Linux


locate mentorперечисляет наставника, но which mentorговорит "нет наставника в ..."

Что это значит?

У вас есть несколько файлов с именами, mentorкоторые можно найти в locateбазе данных.

У вас нет исполняемого файла или сценария с именем mentorв вашем PATH.


2
"updatedb" - приятно знать, что не только Microsoft предлагает слишком неопределенные имена для вещей. (В Win32 DeleteObjectудаляет объект GDI, CloseHandleзакрывает дескриптор ядра и т. Д. Аналогичным образом updatedbобновляет locateБД)
user253751

«which» также особенно полезно в том случае, если у вас может быть несколько версий одной и той же программы в разных местах на вашем пути, поэтому она сообщает вам, какая из них действительно выполняется при запуске команды. Раньше это помогало мне в диагностике непредвиденного поведения - например, оно помогло мне понять, что я оставил установленную вручную версию утилиты в моей системе так, что она переопределяла версию, установленную менеджером пакетов.
Карсер

11

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

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


2
Пожалуйста, предоставьте ссылки на ваши источники - описания в вашем ответе взяты непосредственно из справочных страниц для этих утилит.
Восстановить Монику iamnotmaynard

5

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

whichэто команда для поиска полного пути команды в каталогах, интерпретируемая PATHпеременной среды.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.