Каково различие между locate/whereis/which

Между чем основное различие locate whereis и which команда.

Основное различие, которое я наблюдал, является этим locate определяет местоположение всех связанных имен файлов во всей файловой системе, тогда как whereis и which команды только дают местоположение (системный адрес / локальный адрес файла) установленного приложения. Насколько точный мое наблюдение?

Как эти команды реализованы внутренне. Почему делает locate работайте настолько быстро по сравнению с поиском тире, в то время как locate должен искать конкретное имя файла, соответствующее целевой строке во всей иерархии файловой системы?

13
задан 24 November 2016 в 01:24

2 ответа

which находит двоичный исполняемый файл программы (если это находится в Вашем ПУТИ). man which объясняет более ясно:

то, которое возвращает пути файлов (или ссылки), который был бы выполнен в текущей среде, имело ее аргументы, данный как команды в строго совместимой на POSIX оболочке. Это делает это путем поиска ПУТИ исполняемые файлы, соответствующие названиям аргументов. Это не переходит по символьным ссылкам.

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

То, как тире Единицы работает, объяснено здесь - он использует Дух времени, чтобы индексировать системные файлы и извлечь уроки из шаблонов использования, и позволяет другим приложениям использовать эти данные, таким образом, он делает намного больше работы, чем locate.

17
ответ дан 23 November 2019 в 03:19

Просто

$ which samba

то, которые управляют, ищет список программ, перечисленных вниз посредством настроек PATH

$ whereis samba

, команда whereis также ищет программы, которые не присутствуют в установке

$locate samba

PATH, Также находит файлы именем файла, но не ищет саму структуру каталогов, но только базу данных, подготовленную updatedb. Из-за этого найдите, быстрее, чем находят, но менее точный. Примеры:

0
ответ дан 23 November 2019 в 03:19

Другие вопросы по тегам:

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