Как использовать команду updatedb как обычный пользователь?
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 ответа
Измените команду на:
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 и не доступна для чтения "другим".
Вот все шаги, чтобы получить полное решение (протестировано в 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>
Вы можете просто создать базу данных в доме с -o
аргумент updatedb
:
updatedb -o ~/.locate.db
И использовать его с slocate
как это:
slocate --database=~/.locate.db <pattern>
Вы, вероятно, хотите определить псевдоним для slocate --database=~/.locate.db
,