Setting PATH
Table of Contents
Doesn’t matter if you are a developer or not, you are bound to deal with a PATH issue at least once.
What is PATH?⌗
PATH is an environment variable which decides what commands you can or cannot run on your PC.
The commands you run on the CLI are, >95% of the times, binaries — executable files compiled with a compiler (.exe on Windows). mv, touch,chown, chmod in Linux are all normal programs. But you do not have to know where they are stored in order to run them. Just type in the name and the program runs. Or as we say, the command completes. That’s because your OS has pre-configured your PATH with their locations.
What if there’s no PATH?⌗
You can absolutely run comamnds without a properly configured PATH. You can either always cd to the location your executables are stored in and then run them with the current directory reference (e.g. ./touch newfile) or you can always supply the complete path to the executable to run it from anywhere (e.g. /usr/bin/touch newfile).
How does PATH look like?⌗
The PATH variable holds a list of directory locations separated by a colon (:) on *—Nix systems and a semi-colon (;) on Windows systems. When you run a command, the name is searched through all the directories listed in the PATH starting from the leftmost entry to find a matching file to execute.
It means there are two cases when running a command can error out:
- If you rename the corresponding program/binary/executable.
- If you remove the directory path holding the corresponding program/binary/executable from the
PATH.
To illustrate the point, you can try this experiment.
- Fire up your Linux box or WSL if you are on Windows.
- Head over to the terminal and type in
which touch. If that doesn’t work, trywhereis touch. You’ll gettouch’s location printed.
Screenshot of the Terminal
- You can verify if the directory reported in is in the
PATHor not withecho $PATH.
- You can verify if the directory reported in is in the
- Now rename that file.
1sudo mv /usr/bin/touch /usr/bin/touchmenot - Try running the
touchcommand now. It fails. Try runningtouchmenot. Yourtouchis nowtouchmenot. - Revert the change to make things go back to normal again.
1sudo mv /usr/bin/touchmenot /usr/bin/touch
It should be clear now how important the PATH is.
Next time you download and install something but the command that “should work” doesn’t work, you know it’s your PATH to be blamed.
Setting PATH⌗
On Windows⌗
Assumption made:
- you have a
MinGW-w64build extracted at the root of theC:drive - you want to have the
mingwutilities accessible anywhere from the command line
- Hit the Windows Key and Search for “environment variables”. Open the first result.

Search Result to Choose
- Choose “Environment Variables” in the opened “System Properties” window.

System Properties
- Based on whether you want the utilities available to all the user accounts on the PC or just yours, choose the
PATHunder “System Variables” or “User Variables” section respectively and hit “Edit”.
PATH under User Variables
- Select “Browse” in the next window and locate the
binfolder of the build just like you would do in the File Explorer.- You can also just copy-paste the full path from the File Explorer by clicking “New”.


- You can also just copy-paste the full path from the File Explorer by clicking “New”.
- There should now be a new entry in the editing window.

Congratulations! You just added a new directory in your PATH.
How to choose between “User Variables” and “System Variables”?⌗
Most of the times the answer is “User Variables”. That way even if the configuration gets messed up, you can use another account to restore the machine. Plus it helps keep separation of concerns. The other user doesn’t unexpectdly run a different file if their filename is same as yours.
On *—Nix⌗
On *—Nix systems the naive and simplest way to edit PATH is by editing the rc file for your default shell. Most Linux distros have bash as their default and newers Macs have zsh as their default. Just add the following new line in your .bashrc or .zshrc accordingly:
| |
If you want a specific GUI application like GIMP to read these changes you can launch them from the CLI. If you don’t like it however then what are you are looking for is a way to import environment changes into the login session. The right steps to do so depend on your setup. I have mentioned an example in this blog post.
*—Nix users have to keep in mind the same thing as Windows users. Refrain from editing PATH anywhere outside your user directory so that even if things mess up you can use another account to recover.
Security Implication of modifying PATH⌗
Since the directories are searched according to their listing order when running a command, if there are two files with the same name in the PATH, the one whose parent directory comes first wins.
This creates an issue if you blindly add new locations to the beginning of the PATH. If a developer knowingly or unknowingly ships a binary with the same name as a system utility and you run it with administrative privileges, you leave your entire machine vulnerable.
Hence, always add new directories below/after the existing (pre-configured) entries and stay safe.
Where there is a PC, there is a PATH
Happy Hacking ;)