How can I update the cache / index of locate? I installed new packages and the files are clearly not yet indexed. So which command do I have to commit, in order for the indexer to trigger?

I'm currently working on debian jessie (testing): with Linux mbpc 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux

  • If your locate is from the GNU Find Utilities project (which, if you are using Debian Jessie, it probably is), then you can find the project's website and documentation here: gnu.org/software/findutils
    – user6860
    Apr 23, 2018 at 17:48

3 Answers 3


The command is:

sudo updatedb

See man updatedb for more details.

  • 2
    as I remember you have to be root to do that, or sudo it Apr 14, 2014 at 8:11
  • 22
    If you're not root, you shouldn't be on ServerFault anyway...
    – Jenny D
    Apr 14, 2014 at 8:30
  • 2
    I meant one should run it as root Apr 14, 2014 at 9:04
  • 13
    @JennyD This isn't ServerFault...
    – John Hunt
    Dec 1, 2014 at 14:08
  • 3
    One remark here, this command runs for ~13 minutes on Debian Stretch RC3 and Sata SSD drive, so be patient.
    – Marecky
    Jun 1, 2017 at 20:33

On OSX this is: sudo /usr/libexec/locate.updatedb

Which can be linked with: sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb

Seems silly to have to make a symbolic link for a standard unix command, but there it is.


While the answer:

sudo updatedb

is technically correct, it is almost never a good idea to run updatedb on a command line by itself, if there is also a cron job installed. Depending on the Unix flavor the cronjob contains locking provisions and any amount of configuration which is not covered by the standalone updatedb command.

If the locate database needs to be updated frequently, it is definitely worth the effort to determine the proper cron job for a specific host and run it manually.

Depending on the administrator, the cronjob for updatedb may be hidden in various locations. So a simple brute-force attempt to find the cron job would be:

( sudo crontab -l > /tmp/crontab.root;
  ( echo /tmp/crontab.root; ls -1d /etc/*cron* /etc/*cron*/* ) \
  | tr '\n' '\0' \
  | xargs -0 -r -e grep -nH -e updatedb;
  rm -f /tmp/crontab.root
) 2>/dev/null

which shows the following result on one of my Ubuntu systems:

/etc/cron.daily/mlocate:5:[ -x /usr/bin/updatedb.mlocate ] || exit 0
/etc/cron.daily/mlocate:21:flock --nonblock /run/mlocate.daily.lock $IONICE /usr/bin/updatedb.mlocate

The correct command to update the locate database in this case is therefore

sudo /etc/cron.daily/mlocate

A more systematic approach is to determine the package which provides locate and updatedb.

E.g., on an OS with apt/dpkg packaging you can find which flavor of locate is installed with:

dpkg -S locate | grep /bin/

In my case it is:

mlocate: /usr/bin/updatedb.mlocate

To see, which cron job if any is responsible, run:

dpkg -L mlocate | grep cron

Which in my case shows:


To update the database, run the cron job as root:

sudo /etc/cron.daily/mlocate

If there is no cronjob, and updatedb by itself does not work, try finding your installed flavor with:

dpkg -L mlocate | grep /bin/

which returns:


NB: If you downvote this answer, be so nice and let me know why the hobbyist answer is considered better.

  • sudo crontab -l yelds no crontab for root on linux mint. What could be the issue ? Apr 23, 2020 at 13:43
  • 1
    @HenriquedeSousa Usually there is no crontab for root. So it is not an issue. There are either scripts in /etc/cron.monthly, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, which are exectued as root. Or there are crontab entries in /etc/crontab, /etc/cron.d, where the user can be specified. However, some administrators do add a user crontab for root, so the crontab -l this is just used to make sure.
    – wolfmanx
    Apr 30, 2020 at 16:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.