Как использовать команду updatedb как обычный пользователь?

19128
hugemeow

Команда 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 
8

3 ответа на вопрос

14
user292632

Edit the command to:

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

from "updatedb (8)":

-l, --require-visibility FLAG 

Set the 'require file visibility before reporting it' flag in the generated database to FLAG.

If FLAG is 0 or no, or if the database file is readable by "others" or it is not owned by slocate, locate(1) outputs the database entries even if the user running locate(1) could not have read the directory necessary to find out the file described by the database entry.

If FLAG is 1 or yes (the default), locate(1) checks the permissions of parent directories of each entry before reporting it to the invoking user. To make the file existence truly hidden from other users, the database group is set to slocate and the database permissions prohibit reading the database by users using other means than locate(1), which is set-gid slocate.

Note that the visibility flag is checked only if the database is owned by slocate and it is not readable by "others".

Вы объясняете, что такое флаг `--require-visibility` ... но, может быть, вы могли бы немного объяснить, почему? например, почему бы просто не сделать то, что делает @xaizek, и сгенерировать базу данных в месте, где у вашего пользователя есть разрешение, без использования флага `--require-visibility`? Trevor Boyd Smith 5 лет назад 0
позже на странице руководства есть ответ на мой вопрос: `Базы данных SECURITY, созданные с параметром --require-visibility no [tbs: или 0], позволяют пользователям находить имена файлов и каталогов других пользователей, которые в противном случае не были бы такими. в состоянии сделать. Trevor Boyd Smith 5 лет назад 0
3
xaizek

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

updatedb -o ~/.locate.db 

И используйте это slocateтак:

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

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

in fact even with -o option, i failed, why? updatedb -o dbdb updatedb: can not change group of file `/home/mirror/tmp/dbdb.zwHn1W': Operation not permitted hugemeow 11 лет назад 1
@ Hugemeow не уверен, почему это происходит. Может быть, / mirror / tmp был смонтирован с нестандартными параметрами, которые запрещают обновленной группе изменить группу. Хотя он создает файл базы данных с парой `xaizek: users` owner: group для меня, так что группа по умолчанию. Вы также можете проверить параметры в файле `/ etc / updatedb.conf`. xaizek 11 лет назад 1
я должен использовать вместо локации slocate? не могу найти slocate на centos ... hugemeow 11 лет назад 0
@hugemeow `slocate` - более безопасная версия старого` locate`. Я думаю, что centos должен иметь `slocate` с именем` locate`. В любом случае, в вашем случае не должно быть никаких различий, и в основном в большинстве возможных случаев (в Slackware `locate` - это просто символическая ссылка на` slocate`). xaizek 11 лет назад 1
кто-то сказал мне, что mlocate лучше, чем slocate :( Кстати, почему я не могу найти исходный код slocate, я хочу собрать его из исходного кода ... hugemeow 11 лет назад 0
@hugemeow Написано, что `mlocate` должен быть быстрее, но все же совместим с` slocate`. Я не уверен, если это причина. Если вы не хотите попробовать `slocate`, сайт которого не работает, загрузите исходники с одного из зеркал Slackware, они включают источники пакетов: [см. Здесь] (http://mirror.aarnet.edu.au/ паб / Slackware / Slackware тока / источник / а / slocate /). xaizek 11 лет назад 1
почему команда `updatedb -o db` не работает? hugemeow 11 лет назад 0
Кажется, edit1, почему `updatedb -o db` не удалось после запуска в течение примерно двух минут? hugemeow 11 лет назад 0
@hugemeow Может быть, проще попросить системного администратора добавить вас в группу `slocate` (или` mlocate`)? Даже если группа не может быть изменена, файл есть, так что вы должны иметь возможность использовать его (`updatedb`, вероятно, не удалил, не так ли?). xaizek 11 лет назад 0
0
Yann Sagon

Вот все шаги, чтобы получить полное решение (протестировано в 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> 
используйте `$ HOME` вместо` ~ `, или просто избавьтесь от` = `. оба из следующих будут работать: `locate --database ~ / .locate.db` или` locate --database = $ HOME / .locate.db`. см. эту тему: https://stackoverflow.com/questions/11587343/difference-between-home-and-tilde ardnew 6 лет назад 0