I have dozens of aliases and functions available in any shell in any terminal on any of my machines. If I add Homebrew installs and PATH priorities, it can be a lot to keep track of.

You probably know about the which command. It returns the path to the binary which would be executed by a given command. If that command is an alias or function — or even binaries located outside of a default scope — it won’t return anything. The alternative is the shell builtin type.

When you use type [command], it will tell you whether it’s an alias, a function, a file, or a hashed binary. For functions and aliases, it will also display the actual script or show you what command it’s aliased to. That means that not only will type explain that an alias is overriding a default binary, it will also show you the equivalent of alias [command] at the same time. You can even use the -a option to show every possible destination of that command.

Next time you’re trying to remember what’s aliased to what, what a function does, or why a command is giving unexpected results, turn to type.

Here’s the documentation for additional options:

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 any of the arguments are
found, false if none are found.