Между чем основное различие locate
whereis
и which
команда.
Основное различие, которое я наблюдал, является этим locate
определяет местоположение всех связанных имен файлов во всей файловой системе, тогда как whereis
и which
команды только дают местоположение (системный адрес / локальный адрес файла) установленного приложения. Насколько точный мое наблюдение?
Как эти команды реализованы внутренне. Почему делает locate
работайте настолько быстро по сравнению с поиском тире, в то время как locate
должен искать конкретное имя файла, соответствующее целевой строке во всей иерархии файловой системы?
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
.
Просто
$ which samba
то, которые управляют, ищет список программ, перечисленных вниз посредством настроек PATH
$ whereis samba
, команда whereis также ищет программы, которые не присутствуют в установке
$locate samba
PATH, Также находит файлы именем файла, но не ищет саму структуру каталогов, но только базу данных, подготовленную updatedb. Из-за этого найдите, быстрее, чем находят, но менее точный. Примеры: