Почему команда unix locate по-прежнему показывает файлы / папки, которых там больше нет?

StackOverflow https://stackoverflow.com/questions/1060919

Вопрос

Недавно я перевел всю свою локальную область веб-разработки на использование материалов MacPorts, вместо того чтобы использовать MAMP на моем Mac.Я начал разбираться в Python / Django, и на самом деле мне больше не нужен был MAMP.

Дело в том, что я удалил MAMP из папки Applications вместе с файлом настроек, но почему, когда я запускаю команду 'locate MAMP' в терминале, она по-прежнему показывает все мои / Applications / MAMP / stuff, как будто все это все еще там?И когда я 'cd' в /Applications/MAMP/ его не существует?

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

Это было полезно?

Решение

У вас правильная идея: locate использует базу данных под названием 'locatedb'.Обычно он обновляется системными заданиями cron (не уверен, какие именно в OS X).;вы можете принудительно выполнить обновление с помощью updatedb команда.Видишь http://linux-sxs.org/utilities/updatedb.html среди прочих.


Кроме того, если вы не надо найдите файлы, которые вы ожидаете найти, обратите внимание на это важное предостережение из раздела ОШИБОК OSX' определить местонахождение (1) справочная страница:

The locate database is typically built by user ''nobody'' and the locate.updatedb(8) utility skips directories which are not readable for user ''nobody'', group ''nobody'', or world. For example, if your HOME directory is not world-readable, none of your files are in the database.

Другие советы

Другие ответы верны относительно необходимости обновления базы данных locate.У меня есть этот псевдоним, чтобы обновить мою базу данных locate:

alias update_locate='sudo /usr/libexec/locate.updatedb'

На самом деле я больше не использую locate так часто, теперь, когда я нашел мдфинд.Он использует индекс файла spotlight, который OSX намного лучше поддерживает в актуальном состоянии по сравнению с locatedb.Он также обладает гораздо большей мощностью в том, что он может искать из командной строки.

Действительно, найти команда выполняет поиск по индексу, вот почему это происходит довольно быстро.Индекс генерируется с помощью обновленный b команда, которая обычно выполняется как ежевечернее или еженедельное задание.

Поэтому, чтобы обновить его вручную, просто запустите обновленный b.

Согласно справочной странице, его база данных обновляется раз в неделю:

NAME
     locate.updatedb -- update locate database

SYNOPSIS
     /usr/libexec/locate.updatedb

DESCRIPTION
     The locate.updatedb utility updates the database used by locate(1).  It is typically run once a week by
     the /etc/periodic/weekly/310.locate script.

Взгляните на справочную страницу поиска

http://unixhelp.ed.ac.uk/CGI/man-cgi?locate+1

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top