You generally don't want to use the
which command. In Bash you should be using the
command commands. See this Q&A for reasons why, titled: Why not use “which”? What to use then?.
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
$ type -a vim
vim is /usr/bin/vim
$ command -v ls
alias ls='ls --color=auto'
$ command -v vim
From Bash's man page.
excerpt on type
type [-aftpP] name [name ...]
With no options, indicate how each name would be interpreted if used as a
command name. If the -t option is used, type prints a string which is
one of alias, keyword, function, builtin, or file if name is an alias,
shell reserved word, function, builtin, or disk file, respectively. If the
name is not found, then nothing is printed, and an exit status of false
is returned. If the -p option is used, type either returns the name of the
disk file that would be executed if name were specified as a command name,
or nothing if ``type -t name'' would not return file. The -P option
forces a PATH search for each name, even if ``type -t name'' would not
return file. If a command is hashed, -p and -P print the hashed value, not
necessarily the file that appears first in PATH. If the -a option is used,
type prints all of the places that contain an executable named name. This
includes aliases and functions, if and only if the -p option is not also
used. The table of hashed commands is not consulted when using -a.
The -f option suppresses shell function lookup, as with the command
builtin. type returns true if all of the arguments are found, false if
any are not found.
excerpt on command
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function lookup.
Only builtin commands or commands found in the PATH are executed. If
the -p option is given, the search for command is performed using a
default value for PATH that is guaranteed to find all of the standard
utilities. If either the -V or -v option is supplied, a description of
command is printed. The -v option causes a single word indicating the
command or file name used to invoke command to be displayed; the -V
option produces a more verbose description. If the -V or -v option is
supplied, the exit status is 0 if command was found, and 1 if not.
If neither option is supplied and an error occurred or command
cannot be found, the exit status is 127. Otherwise, the exit status
of the command builtin is the exit status of command.