Skip to main content

Command Palette

Search for a command to run...

Which Command Linux

Updated
7 min read

Introduction

If you spend time working in the Linux terminal, you’ve probably wondered where exactly a command you type is located. The Linux which command is your go-to tool for this. It helps you find the full path of executables, so you know which version of a command will run.

In this article, I’ll walk you through how the which command works, why it’s useful, and some handy tips to get the most out of it. Whether you’re a beginner or a seasoned user, understanding which will make your Linux experience smoother and more efficient.

What Is the Linux which Command?

The which command in Linux is a simple utility that shows the full path of the executable file that will run when you enter a command. It searches through the directories listed in your PATH environment variable and returns the first matching executable it finds.

For example, if you type which python, it will display the path to the Python interpreter that will run when you type python in the terminal.

How which Works

  • It checks each directory in the PATH variable in order.
  • It looks for an executable file matching the command name.
  • It returns the full path of the first match.
  • If no executable is found, it returns nothing or an error.

This makes which very useful for verifying which version of a command you are using, especially if you have multiple versions installed.

Basic Usage of the which Command

Using which is straightforward. You just type which followed by the command name you want to locate.

which ls

This might output:

/bin/ls

This tells you that the ls command you run is located in /bin/ls.

Examples of Basic Usage

  • which gcc — Finds the path to the GNU C Compiler.
  • which node — Shows where the Node.js executable is.
  • which git — Displays the location of the Git command.

You can also check multiple commands at once:

which python java gcc

This will print the paths for all three commands, one per line.

Why Use the which Command?

The which command is handy for several reasons:

  • Verify command location: Know exactly which executable will run.
  • Troubleshoot PATH issues: If a command isn’t working, check if it’s in your PATH.
  • Avoid confusion: When multiple versions of a program exist, which shows which one is active.
  • Script debugging: Ensure scripts call the correct executables.

For example, if you have Python 2 and Python 3 installed, which python might point to Python 2, while which python3 points to Python 3. This helps avoid running the wrong interpreter.

Understanding the PATH Environment Variable

The which command relies on the PATH environment variable. This variable lists directories where the shell looks for executables.

How PATH Works

  • It contains a colon-separated list of directories.
  • When you type a command, the shell searches these directories in order.
  • The first matching executable found is run.

You can see your current PATH by running:

echo $PATH

Example output:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

If a command isn’t in any of these directories, which won’t find it.

Differences Between which and Similar Commands

Linux offers other commands that seem similar to which, but they have different purposes.

whereis

  • Finds the binary, source, and manual page locations for a command.
  • Searches a predefined set of directories, not just those in PATH.
  • Example: whereis ls might return /bin/ls /usr/share/man/man1/ls.1.gz.

type

  • Shows how a command name is interpreted by the shell.
  • Indicates if it’s an alias, function, builtin, or file.
  • Example: type ls might say ls is aliased to 'ls --color=auto'.

command -v

  • POSIX-compliant way to find the command location.
  • Similar to which, but more portable.
  • Example: command -v ls outputs /bin/ls.

When to Use Each

  • Use which to quickly find the executable path.
  • Use whereis to find related files.
  • Use type to understand shell command behavior.
  • Use command -v in scripts for portability.

Advanced which Command Options

While which is simple, it has some options to enhance its functionality.

Common Options

  • -a or --all: Show all matching executables in PATH, not just the first.
  • --skip-alias: Ignore aliases and functions, show only executables.
  • --help: Display help information.

Example: Finding All Matches

which -a python

This might output:

/usr/bin/python
/usr/local/bin/python

This shows all python executables found in your PATH.

Using which in Scripts

In scripts, you can use which to check if a command exists before running it:

if which git > /dev/null; then
  echo "Git is installed"
else
  echo "Git is not installed"
fi

This prevents errors if the command is missing.

Common Issues and Troubleshooting with which

Sometimes, which might not behave as expected. Here are common issues and how to fix them.

which Returns Nothing

  • The command is not in your PATH.
  • You might have a typo in the command name.
  • The executable is not installed.

Command Is an Alias or Function

which only finds executables, not aliases or shell functions. To check for aliases, use:

alias command_name

To check for functions, use:

type command_name

which Not Installed

Some minimal Linux systems might not have which installed by default. You can install it via your package manager:

  • Debian/Ubuntu: sudo apt install which
  • Fedora: sudo dnf install which
  • Arch: sudo pacman -S which

Alternatives to which for More Detailed Information

If you want more detailed info about commands, try these tools:

whereis

Shows locations of binaries, sources, and manuals.

whereis ls

type

Shows if a command is an alias, function, or builtin.

type cd

command -v

POSIX-compliant way to find command location.

command -v ls

hash

Shows the path of commands cached by the shell.

hash -t ls

Practical Examples of Using which

Here are some real-world examples to help you understand how to use which.

Example 1: Checking Python Version Location

which python

Output:

/usr/bin/python

You now know which Python interpreter runs when you type python.

Example 2: Finding Multiple Versions of Node.js

which -a node

Output:

/usr/local/bin/node
/usr/bin/node

This shows you have two Node.js versions installed.

Example 3: Verifying Git Installation in a Script

if which git > /dev/null; then
  echo "Git is ready to use."
else
  echo "Please install Git first."
fi

This script checks if Git is installed before proceeding.

Conclusion

The Linux which command is a simple yet powerful tool that helps you find the exact location of executables in your system. It’s especially useful when you have multiple versions of a program or want to troubleshoot command issues.

By understanding how which works and how it relates to your PATH, you can avoid confusion and improve your command-line efficiency. Remember, combining which with other commands like type and whereis gives you a fuller picture of your Linux environment.

FAQs

What does the which command do in Linux?

The which command shows the full path of the executable that runs when you type a command. It searches directories in your PATH and returns the first match.

Can which find aliases or shell functions?

No, which only finds executables. To check aliases or functions, use the type command.

How do I find all versions of a command using which?

Use the -a option like this: which -a command_name. It lists all matching executables in your PATH.

What should I do if which returns nothing?

Check if the command is installed and included in your PATH. You can also verify spelling or install the missing program.

Is there a more portable alternative to which?

Yes, command -v is POSIX-compliant and works similarly to which, making it better for scripts that run on different Unix-like systems.

More from this blog

L

LinuxBloke | Linux Tips, Tricks & Troubleshooting

672 posts

Which Command Linux