5

На OS X я думаю, что БД locate заполняется запуском:

sudo /usr/libexec/locate.updatedb

Но, похоже, что locate не находит ничего внутри или ниже ~/

Должен ли locate.updatedb индексировать мою домашнюю папку по умолчанию? Если это так, какие-либо предложения или идеи, почему это не так? Если он не индексирует ~/ по умолчанию, есть ли причины не индексировать эту иерархию папок? Если нет, то как мне это настроить?


Кроме того, когда я запускаю locate.updatedb из ~/ (без полномочий root), это работает. Когда я запускаю его из чего-либо ниже (например, ~/ Desktop/), я получаю следующие ошибки:

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
find: .: Permission denied

2 ответа2

6

Locate запускается от имени "nobody", чтобы другие пользователи не могли видеть "ваши" файлы в базе данных locate. Поскольку ваша учетная запись - единственная, у которой есть права на просмотр ваших файлов, программа locate их не видит. Даже если ваша учетная запись является единственным локальным пользователем, это ограничение применяется. Когда вы sudo сценария locate.updatedb, команда find он нерестится специально начала как непривилегированные. Хотя вы можете изменить сценарий, чтобы предотвратить эту проблему, я не могу сказать, что он рекомендуется.

Кроме того, локализация не включена по умолчанию, так как предполагается, что Spotlight/MDS лучше для большинства людей. Я бы предложил попробовать команду mdfind. Если вы решили, что хотите запускать locate регулярно, выполните sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist чтобы загрузить запущенное задание для регулярной переиндексации.

4

Поиск можно найти почти везде, изменив /usr/libexec/locate.updatedb .

Изменить:

if [ "$(id -u)" = "0" ]; then

сказать,

if [ "$(id -u)" = "1" ]; then

Некоторое снижение безопасности. Используйте только на персональном компьютере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .