Como usar o comando updatedb como um usuário comum?

6

O comando locate é uma ferramenta muito útil no Linux, mas parece que somente o root pode executar o comando updatedb , o que é muito inconvencível para usá-lo. Então, como fazer com que o usuário comum tenha privilégio para executar o comando updatedb?

updatedb é o comando usado para atualizar o banco de dados usado pelo comando locate.

Mas há a seguinte mensagem de erro ao tentar executar o updatedb como usuário comum:

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

Ou:

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

3 respostas

13

Edite o comando para:

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

de "updatedb (8)":

-l, --require-visibility FLAG

Defina o sinalizador " exigir visibilidade do arquivo antes de denunciá-lo " no banco de dados gerado para FLAG.

Se FLAG for 0 ou não, ou se o arquivo do banco de dados for legível por "outros" ou não pertencer ao slocate, o locate (1) gerará as entradas do banco de dados mesmo que o usuário que está executando o locate (1) não tenha lido o diretório necessário para descobrir o arquivo descrito pela entrada do banco de dados.

Se o FLAG for 1 ou yes (o padrão), o locate (1) verificará as permissões dos diretórios pai de cada entrada antes de relatá-la ao usuário solicitante. Para tornar a existência do arquivo realmente oculta de outros usuários, o grupo de banco de dados é configurado para slocate e as permissões de banco de dados proíbem a leitura do banco de dados por usuários que usam outros meios além de locate (1), que é set-slid.

Observe que o sinalizador de visibilidade é verificado apenas se o banco de dados for de propriedade de slocate e não for legível por "outros".

    
por 23.01.2014 / 14:00
2

Você pode simplesmente criar um banco de dados em casa com o argumento -o de updatedb :

updatedb -o ~/.locate.db

E use-o com slocate da seguinte forma:

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

Você provavelmente desejará definir um alias para slocate --database=~/.locate.db .

    
por 28.08.2012 / 14:22
0

Aqui estão todos os passos para ter uma solução completa (testada no Centos 6.5)

1) gere o db:

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

2) use o db:

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

3) crie um alias:

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

4) use seu locale locate db:

mylocate <my pattern>
    
por 13.03.2014 / 11:06