which Command in Linux with Examples

In the intricate world of Linux, understanding the exact location of command binaries is paramount for various tasks, from scripting to system administration. The which command emerges as an essential tool in this context, pinpointing the path of the command’s executable. In this guide, we’ll embark on a comprehensive journey to understand the which command, its nuances, and practical applications.

Understanding the which Command

What is the which Command?

In the vast ecosystem of Linux, commands can be scattered across various directories. The version of a command that gets executed is determined by its sequence in the PATH environment variable. Amidst this complexity, the which command in Linux emerges as an invaluable tool. It assists users in pinpointing the precise path of the command that the shell would execute, eliminating ambiguity.

Why is the which Command in Linux Important?

Version Control

In scenarios where multiple software versions are installed, the which command can be instrumental. It helps ascertain which version as the default, ensuring users and administrators reference the intended version.


For scriptwriters, especially those crafting scripts intended for diverse systems, the path’s accuracy is paramount. The which command ensures that scripts reference the correct command path, promoting consistency and reducing potential errors.

System Administration

System administrators frequently face the task of verifying software installations. The which command aids in this process, allowing admins to quickly check if specific utilities are installed and their exact locations.

Basic Syntax and Usage of the which Command in Linux

The fundamental structure of the which command is simple yet powerful:

which [options] command_name

For instance, to determine the path of the ls command:

which ls

This might return:


This output signifies that the ls command’s binary is located in the /bin directory.

Options for the which Command in Linux

The which command comes with a set of options that enhance its functionality:

  • -a: Print all matching pathnames of each argument.
  • -i: Ignore the case of command names.
  • --skip-dot: Skip directories in PATH that start with a dot.
  • --skip-tilde: Skip directories in PATH that start with a tilde.
  • --show-dot: Don’t expand a leading dot to the current directory in pathnames.
  • --version: Display the version information and exit.

Each option can be combined with the command name to refine the search and output, catering to specific needs and scenarios.

Practical Examples of which Command in Linux

Locating the grep Command

In text processing, grep is an invaluable tool used to search for specific patterns within files. If you’re looking to determine where the grep command resides:

which ls

You might receive the following:


This output indicates that the grep command’s binary is located in the /bin directory, a standard directory for essential command binaries.

Checking Paths for Multiple Commands

Sometimes, you might want to quickly verify the locations of several commands, especially if you’re setting up a new environment:

which ls pwd echo

This could produce:

ls: /bin/ls
pwd: /bin/pwd
echo: /bin/echo

This consolidated view provides paths for the ls, pwd, and echo commands, showcasing the efficiency of which when dealing with multiple queries.

Verifying Installation of nginx

After installing a web server like nginx, it’s essential to confirm its setup:

which nginx

If nginx is correctly installed and available in your PATH, you might see the following:


This path suggests that nginx is installed and ready for configuration or usage.

Finding the Location of python3

With the coexistence of Python 2 and Python 3 on many systems, determining the exact path of python3 becomes crucial:

which python3

You might get:


This confirms the location of the Python 3 interpreter, ensuring you’re using the right version for your scripts.

Determining the Path of systemctl

For system administrators, tools like systemctl are essential for managing system services:

which systemctl

This could return:


Knowing the location of systemctl can be crucial when troubleshooting service-related issues.

Checking the Location of ffmpeg

For multimedia tasks, tools like ffmpeg are invaluable. To discover its path:

which ffmpeg

You might see:


This path indicates where the ffmpeg binary resides, essential for scripts or direct command-line multimedia processing.

Locating the tar Command

Archiving and compression tasks often employ the tar command. To determine its location:

which tar

This might yield:


Knowing the location of tar can be essential when dealing with backup scripts or data transfer tasks.

Finding the awk Command

Text processing in Linux often involves commands like awk. To determine its path:

which awk

You might get:


This path confirms the location of the awk command, a staple in many text-processing tasks.

Checking the Path of mysql

Database operations often involve tools like mysql. To find its path:

which mysql

You might receive the following:


This path provides insights into the MySQL client’s location, which is essential for database management tasks.

Verifying the Installation of Docker

Containerization tools like docker are popular in modern development. To check its installation:

which docker

If installed, you might see:


This confirms that Docker is installed and accessible from the command line.

Advanced Tips for the which Command in Linux

Understanding Absence of Output

If you run which for a command and there’s no output, it indicates the command isn’t found in the directories listed in the PATH variable. For instance:

which non_existent_command

No output suggests that non_existent_command isn’t in the standard directories. However, this doesn’t necessarily mean the command isn’t present on your system; it might just be outside the standard directories.

Using which with Aliases

Aliases can sometimes overshadow default commands. If you’ve aliased ls to a custom function or script, you can inspect the path of this aliased command:

which -a ls

This might display multiple paths associated with the ls command, helping you identify any aliases.

Displaying All Matches

By default, which might display only the first match. If you have multiple versions of a tool, like python, and want to see all matches in the PATH:

which -a python

This could return:


This output is particularly useful if you have multiple versions of a program installed, allowing you to understand which version will be executed first based on the PATH order.

Checking the Path of Shell Built-ins

Commands like echo are often shell built-ins. This means they are integrated directly into the shell and might not have a separate binary executable. However, some systems might also have a standalone binary for such commands. To determine if you’re using a built-in or an external command:

which echo

If echo is available as a standalone binary, you might receive:


If there’s no output, it indicates that echo is likely a shell built-in on your system.

Verifying the Location of Script Files

If you’ve written custom scripts and placed them in directories within your PATH, you can use which to verify their location. For instance, for a script named myscript:

which myscript

Assuming myscript is in your PATH, you might get:


This confirms the location of your custom script, ensuring it’s accessible and executable from any directory.

Determining the Path with Highest Priority

If you have multiple versions of a tool, like node, and want to know which one has the highest priority based on the PATH:

which node

This might return:


This indicates that the version of node in /usr/local/bin will be executed first, even if other versions exist elsewhere in your PATH.

Using which to Check for Common Developer Tools

For developers, tools like gcc or make are fundamental. To quickly check their paths:

which gcc make

You might receive:

gcc: /usr/bin/gcc
make: /usr/bin/make

This output confirms the locations of these essential developer tools, ensuring they’re correctly installed and accessible.

Identifying the Path of Networking Tools

Networking tools like netstat or ifconfig are crucial for system and network administrators. To find their paths:

which netstat ifconfig

You might get:

netstat: /usr/bin/netstat
ifconfig: /sbin/ifconfig

This provides insights into the locations of these networking tools, aiding in network diagnostics and management tasks.

Final Thoughts on which Command in Linux

With these practical and advanced examples, users should gain a deeper understanding of the which command in Linux. This command, while simple at first glance, plays a pivotal role in various tasks, from development to system administration, making it an indispensable tool in the Linux toolkit.

Share to...