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

2993
Naddy

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

Почему, когда я использую locate mentor, он перечисляет всех наставников, но когда я использую which mentorэто, он говорит «нет наставника в ...» - что это значит?

27
См. Этот связанный http://unix.stackexchange.com/a/60208/84427 pun 8 лет назад 0
Есть также `где` и [` whereis`] (http://superuser.com/questions/40301/which-whereis-differences). Jan Tojnar 8 лет назад 0
в bash предпочитайте: `type -all acommand`. И если я прочитаю XYProblem за вашим вопросом: у вас есть команда, вы можете увидеть ее через locate, но не можете ее выполнить? затем отредактируйте PATH либо в файле `~ / .profile` вашего конкретного пользователя, либо, если вы уверены, что знаете, что делать, в глобальном файле` / etc / profile` [ПРЕДУПРЕЖДЕНИЕ: вы можете нарушать системные скрипты (и, возможно, большая часть ОС), если вы добавите неправильный путь в $ PATH / etc / profile ... (например, пути, содержащие команды, обычно находятся здесь). Предпочитаю только добавлять в конце переменной. И, пожалуйста, не помещайте `::` или `.` в любом месте этого пути. Olivier Dulac 8 лет назад 0
Возможный дубликат [В чем разница между «найти» и «найти» в Linux?] (Http://superuser.com/questions/199472/what-is-the-difference-between-locate-and-find-in -linux) Abraxas 8 лет назад 0

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

45
DavidPostill

В чем разница между 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.

"updatedb" - приятно знать, что не только Microsoft предлагает слишком неопределенные имена для вещей. (В Win32 `DeleteObject` удаляет объект GDI,` CloseHandle` закрывает дескриптор ядра и т. Д. Подобным образом `updatedb` обновляет базу данных` locate`) user20574 8 лет назад 2
«which» также особенно полезно в том случае, если у вас может быть несколько версий одной и той же программы в разных местах вашего пути, поэтому она сообщает вам, какая из них действительно выполняется при запуске команды. Раньше это помогало мне в диагностике непредвиденного поведения - например, оно помогло мне понять, что я оставил установленную вручную версию утилиты в моей системе так, что она переопределяла версию, установленную менеджером пакетов. Carcer 8 лет назад 0
11
manjesh23

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

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

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

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

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

Похожие вопросы