Difference between locate and which in Linux
What is the difference between locate
and which
in Linux?
Why when I use locate mentor
does it list all the mentor but when I used which mentor
it says "no mentor in..." - what does this mean?
Solution 1:
What is the difference between locate
and which
?
locate
uses a previously built database to locate the file.
locate
reads one or more databases prepared byupdatedb
(8) and writes file names matching at least one of the PATTERNs to standard output, one per line.
Source locate(1) - Linux man page
updatedb
creates or updates a database used bylocate
(1). If the database already exists, its data is reused to avoid rereading directories that have not changed.
updatedb
is usually run daily bycron
(8) to update the default database (/var/lib/mlocate/mlocate.db
)
Source updatedb(8) - Linux man page
which
looks for an executable file by searching for it in the directories in the PATH
environmental variable.
which
takes one or more arguments. For each of its arguments it prints tostdout
the full path of the executables that would have been executed when this argument had been entered at the shell prompt. It does this by searching for an executable or script in the directories listed in the environment variablePATH
.
using the same algorithm as bash
(1).
Source which(1) - Linux man page
locate mentor
lists mentor, but which mentor
says "no mentor in..."
What does that mean?
You have some files named mentor
which can be found in the locate
database.
You don't have an executable file or script named mentor
in your PATH
.
Solution 2:
which
is to locate a command (which
returns a path name of the files / links that would be executed in the current environment)
locate
is to find files by name (locate
reads one or more databases prepared by updatedb
and writes files names matching at least one of the patterns to standered output, one per line)