В чем разница между местонахождением / где / какой
В чем основная разница между locate
whereis
а также 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
Я надеюсь, что это поможет, кто-нибудь еще ищет его