Почему, когда я использую locate mentor, он перечисляет всех наставников, но когда я использую which mentorэто говорит «нет наставника в ...» - что это значит?
в Баш, предпочитают: type -all acommand. И если я прочитаю XYProblem за вашим вопросом: у вас есть команда, вы можете увидеть ее через locate, но не можете ее выполнить? затем отредактируйте PATH либо в ~/.profileфайле вашего конкретного пользователя , либо, если вы уверены, что знаете, что делать, в глобальном /etc/profileфайле [ПРЕДУПРЕЖДЕНИЕ: вы можете нарушать системные скрипты (и, возможно, многие ОС), если добавляете неправильный путь в $ PATH / etc / profile ... (например, пути, содержащие команды, обычно находятся здесь). Предпочитаю только добавлять в конце переменной. И , пожалуйста , не ставьте ::или . где - нибудь в этом PATH.
locate использует ранее созданную базу данных, чтобы найти файл.
locateчитает одну или несколько баз данных, подготовленных с помощью updatedb(8), и записывает имена файлов, соответствующие по крайней мере одному из PATTERN, в стандартный вывод, по одному на строку.
updatedbсоздает или обновляет базу данных, используемую locate(1). Если база данных уже существует, ее данные используются повторно, чтобы избежать перечитывания каталогов, которые не изменились.
updatedbобычно запускается ежедневно cron(8) для обновления базы данных по умолчанию ( /var/lib/mlocate/mlocate.db)
whichищет исполняемый файл, ища его в каталогах в PATHпеременной среды.
whichпринимает один или несколько аргументов. Для каждого из своих аргументов он печатает stdoutполный путь к исполняемым файлам, которые были бы выполнены, если бы этот аргумент был введен в приглашении оболочки. Это делается путем поиска исполняемого файла или сценария в каталогах, перечисленных в переменной среды PATH.
"updatedb" - приятно знать, что не только Microsoft предлагает слишком неопределенные имена для вещей. (В Win32 DeleteObjectудаляет объект GDI, CloseHandleзакрывает дескриптор ядра и т. Д. Аналогичным образом updatedbобновляет locateБД)
user253751
«which» также особенно полезно в том случае, если у вас может быть несколько версий одной и той же программы в разных местах на вашем пути, поэтому она сообщает вам, какая из них действительно выполняется при запуске команды. Раньше это помогало мне в диагностике непредвиденного поведения - например, оно помогло мне понять, что я оставил установленную вручную версию утилиты в моей системе так, что она переопределяла версию, установленную менеджером пакетов.
Карсер
11
whichнайти команду ( whichвозвращает путь к файлам / ссылкам, которые будут выполнены в текущей среде)
locateнайти файлы по имени ( locateчитает одну или несколько подготовленных баз данных updatedbи записывает имена файлов, соответствующие по крайней мере одному из шаблонов, в стандартный вывод, по одному на строку)
Пожалуйста, предоставьте ссылки на ваши источники - описания в вашем ответе взяты непосредственно из справочных страниц для этих утилит.
Восстановить Монику iamnotmaynard
5
locateпо умолчанию принимает шаблон glob (также можно использовать шаблон Regex) и ищет в базе данных /var/lib/mlocate/mlocate.dbлюбое имя файла, соответствующее шаблону.
whichэто команда для поиска полного пути команды в каталогах, интерпретируемая PATHпеременной среды.
where
иwhereis
.type -all acommand
. И если я прочитаю XYProblem за вашим вопросом: у вас есть команда, вы можете увидеть ее через locate, но не можете ее выполнить? затем отредактируйте PATH либо в~/.profile
файле вашего конкретного пользователя , либо, если вы уверены, что знаете, что делать, в глобальном/etc/profile
файле [ПРЕДУПРЕЖДЕНИЕ: вы можете нарушать системные скрипты (и, возможно, многие ОС), если добавляете неправильный путь в $ PATH / etc / profile ... (например, пути, содержащие команды, обычно находятся здесь). Предпочитаю только добавлять в конце переменной. И , пожалуйста , не ставьте::
или.
где - нибудь в этом PATH.Ответы:
В чем разница между
locate
иwhich
?locate
использует ранее созданную базу данных, чтобы найти файл.Source locate (1) - справочная страница по Linux
Источник updatedb (8) - справочная страница по Linux
which
ищет исполняемый файл, ища его в каталогах вPATH
переменной среды.используя тот же алгоритм, что и
bash
(1).Источник который (1) - справочная страница по Linux
locate mentor
перечисляет наставника, ноwhich mentor
говорит "нет наставника в ..."У вас есть несколько файлов с именами,
mentor
которые можно найти вlocate
базе данных.У вас нет исполняемого файла или сценария с именем
mentor
в вашемPATH
.источник
DeleteObject
удаляет объект GDI,CloseHandle
закрывает дескриптор ядра и т. Д. Аналогичным образомupdatedb
обновляетlocate
БД)which
найти команду (which
возвращает путь к файлам / ссылкам, которые будут выполнены в текущей среде)locate
найти файлы по имени (locate
читает одну или несколько подготовленных баз данныхupdatedb
и записывает имена файлов, соответствующие по крайней мере одному из шаблонов, в стандартный вывод, по одному на строку)источник
locate
по умолчанию принимает шаблон glob (также можно использовать шаблон Regex) и ищет в базе данных/var/lib/mlocate/mlocate.db
любое имя файла, соответствующее шаблону.which
это команда для поиска полного пути команды в каталогах, интерпретируемаяPATH
переменной среды.источник