The locate command is very useful tool on Linux, but it seems only root can run updatedb command which is very unconvinent to use it. So how to make ordinary user to have the priviledge to run updatedb command?

updatedb is the command use to update the db used by locate command.

But there is the following error message when try to run updatedb as ordinary user:

[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 Answers 3


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".

  • you explain what the --require-visibility flag is... but maybe you could explain a little bit about why? like why not just do what @xaizek is doing and generate the database in a location your user has permission without using the --require-visibility flag? Commented Nov 29, 2018 at 15:28
  • later on in the man page there is an answer to my question: SECURITY Databases built with --require-visibility no [tbs: or 0] allow users to find names of files and directories of other users, which they would not otherwise be able to do. Commented Nov 29, 2018 at 15:39
  • Note that the --require-visibility flag is only present under plocate and not locate
    – Alkanshel
    Commented Apr 12 at 1:22

Here are all the steps to have a complete solution (tested in Centos 6.5)

1) generate the db:

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

2) use the db:

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

3) create an alias:

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

4) use your locale locate db:

mylocate <my pattern>
  • 1
    use $HOME instead of ~, or just get rid of the =. both of the following will work: locate --database ~/.locate.db or locate --database=$HOME/.locate.db. see this thread: stackoverflow.com/questions/11587343/…
    – ardnew
    Commented Jul 18, 2017 at 16:19

You can just create database in home with -o argument of updatedb:

updatedb -o ~/.locate.db

And use it with slocate like this:

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

You probably want to define an alias for slocate --database=~/.locate.db.

  • 1
    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
    Commented Sep 19, 2012 at 15:06
  • 1
    @hugemeow not sure why it happens. Maybe /mirror/tmp was mounted with non-standard options, which forbid updatedb to change group. Though it createsd database file with xaizek:users owner:group pair for me, so group is the default one. You can also check options in /etc/updatedb.conf file.
    – xaizek
    Commented Sep 19, 2012 at 19:26
  • do i have to use slocate rather than locate? cannot find slocate on centos...
    – hugemeow
    Commented Oct 14, 2012 at 2:12
  • 1
    @hugemeow slocate is a more secure version of old locate. I think centos should have slocate installed with name locate. Anyway, there should be no differences in your case, and basically in most possible cases (on Slackware locate is just a symbolic link to slocate).
    – xaizek
    Commented Oct 14, 2012 at 8:40
  • 1
    @hugemeow It's written that mlocate should be faster, but still compatible with slocate. I'm not sure if it's the reason. If you wan't to try slocate, which site isn't working, download sources from one of Slackware mirrors, they include sources of the packages: see here.
    – xaizek
    Commented Oct 14, 2012 at 18:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .