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 by updatedb(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 by locate(1). If the database already exists, its data is reused to avoid rereading directories that have not changed.

updatedb is usually run daily by cron(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 to stdout 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 variable PATH.

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)