9

Команда locate - очень полезный инструмент в Linux, но кажется, что только root может запустить команду updatedb что очень неудобно для ее использования. Так как же заставить обычного пользователя иметь привилегию для запуска команды updatedb?

updatedb - это команда, используемая для обновления базы данных, используемой командой locate.

Но при попытке запустить updatedb от имени обычного пользователя появляется следующее сообщение об ошибке:

[mirror@home code]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

Или же:

updatedb -o db
updatedb: can not change group of file `/var/lib/gforge/chroot/home/users/bigmeow/tmp/db.uhEZFQ': Operation not permitted

3 ответа3

15

Измените команду на:

updatedb --require-visibility 0 -o ~/.locate.db

из "updatedb (8)":

-l, --require-visibility FLAG

Установите флаг « Требовать видимость файла перед тем, как сообщить об этом » в сгенерированной базе данных на FLAG.

Если FLAG равен 0 или нет, или если файл базы данных доступен для чтения "другим" или он не принадлежит slocate, locate(1) выводит записи базы данных, даже если пользователь, выполняющий locate(1), не смог прочитать необходимый каталог выяснить файл, описанный в записи базы данных.

Если FLAG равен 1 или yes (по умолчанию), locate (1) проверяет разрешения родительских каталогов каждой записи, прежде чем сообщать об этом вызывающему пользователю. Чтобы сделать существование файла действительно скрытым от других пользователей, группа базы данных настроена на slocate, а разрешения базы данных запрещают чтение базы данных пользователями, используя другие средства, кроме locate (1), которая является set-gid slocate.

Обратите внимание, что флаг видимости проверяется только в том случае, если база данных принадлежит slocate и не доступна для чтения "другим".

3

Вы можете просто создать базу данных дома с аргументом -o updatedb:

updatedb -o ~/.locate.db

И используйте его с slocate следующим образом:

slocate --database=~/.locate.db <pattern>

Вы, вероятно, хотите определить псевдоним для slocate --database=~/.locate.db .

1

Вот все шаги, чтобы получить полное решение (протестировано в Centos 6.5)

1) сгенерировать БД:

updatedb --require-visibility 0 -o ~/.locate.db

2) использовать БД:

locate --database=/full/path/to/.locate.db (does not work with ~)
or
locate --database=.locate.db

3) создать псевдоним:

alias mylocate='locate --database=/full/path/to/.locate.db'

4) используйте вашу локаль locate db:

mylocate <my pattern>

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