В чем разница между местонахождением / где / какой

В чем основная разница между locatewhereis а также which команда.

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

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

3 ответа

Решение

which находит двоичный исполняемый файл программы (если он находится в вашей переменной PATH). man which объясняет более четко:

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

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

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

Просто

$ which samba

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

$ whereis samba

Команда whereis также ищет программы, которых нет в настройке PATH

$locate samba

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

Я бы также предложил найти, чтобы распечатать все результаты

      find . -type d -name gimp -print

и если вы решите также удалить использование

      find . -type d -name gimp -print -delete

Я надеюсь, что это поможет, кто-нибудь еще ищет его

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