Permission Issues
locate is designed to be secure. It won't show you files you don't have permission to access.
How it Works
The updatedb process runs as root and indexes everything it can see. However, when you run locate as a non-root user, it filters the results.
Issue: File Exists but Locate Doesn't Show It
Even after updatedb, a file might be missing from your results if:
- Parent Directory Permissions: If you don't have
+x(execute) permission on a parent directory,locate(depending on the version) might hide everything inside it. - Explicit Exclusions: The directory might be excluded in
/etc/updatedb.conf(e.g.,/tmp,/var/spool).
Troubleshooting
Check if root can see it:
sudo locate myfile.txt
If root sees it but you don't, it's a permission issue.
Check /etc/updatedb.conf:
Look at PRUNEPATHS and PRUNENAMES to see if your path is being skipped by the indexer.
grep PRUNE /etc/updatedb.conf
SUID and slocate
Older versions (slocate) used a special setuid bit to manage permissions. Modern mlocate and plocate use a more efficient and secure group-based access model (locate group). Ensure your locate binary has the correct permissions:
ls -l $(which locate)
# Should show something like -rwx--s--x 1 root mlocate