Learn How to Set Your $PATH Variables Permanently in Linux

In Linux (also UNIX) $PATH is environment variable, used to tell the shell where to look for executable files. $PATH variable provides great flexibility and security to the Linux systems and it is definitely safe to say that it is one of the most important environment variables.

Don’t Miss: How to Set and Unset Local, User and System Wide Environment Variables

Programs/scripts that are located within the $PATH’s directory, can be executed directly in your shell, without specifying the full path to them. In this tutorial you are going to learn how to set $PATH variable globally and locally.

First, let’s see your current $PATH’s value. Open a terminal and issue the following command:

$ echo $PATH

The result should be something like this:

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

The result shows a list of directories separated by colons. You can easily add more directories by editing your user’s shell profile file.

In different shells this can be:

  1. Bash shell -> ~/.bash_profile, ~/.bashrc or profile
  2. Korn Shell -> ~/.kshrc or .profile
  3. Z shell -> ~/.zshrc  or .zprofile

Please note that depending on how you are logging to the system in question, different file might be read. Here is what the bash manual says, keep in mind that the files are similar for other shells:

/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file|

Considering the above, you can add more directories to the $PATH variable by adding the following line to the corresponding file that you will be using:

$ export PATH=$PATH:/path/to/newdir

Of course in the above example, you should change “/path/to/newdir” with the exact path that you wish to set. Once you have modified your .*rc or .*_profile file you will need to call it again using the “source” command.

For example in bash you can do this:

$ source ~/.bashrc

Below, you can see an example of mine $PATH environment on a local computer:

[email protected][TecMint]:[/home/marin] $ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/marin/bin

This is actually a good practice to create a local “bin” folder for users where they can place their executable files. Each user will have its separate folder to store his contents. This is also a good measure to keep your system secured.

If you have any questions or difficulties setting your $PATH environment variable, please do not hesitate to submit your questions in the comment section below.

Best Affordable Linux and WordPress Services For Your Business
Outsource Your Linux and WordPress Project and Get it Promptly Completed Remotely and Delivered Online.

If You Appreciate What We Do Here On TecMint, You Should Consider:

  1. Stay Connected to: Twitter | Facebook | Google Plus
  2. Subscribe to our email updates: Sign Up Now
  3. Get your own self-hosted blog with a Free Domain at ($3.45/month).
  4. Become a Supporter - Make a contribution via PayPal
  5. Support us by purchasing our premium books in PDF format.
  6. Support us by taking our online Linux courses

We are thankful for your never ending support.

Marin Todorov

I am a bachelor in computer science and a Linux Foundation Certified System Administrator. Currently working as a Senior Technical support in the hosting industry. In my free time I like testing new software and inline skating.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

16 Responses

  1. Todd says:

    @Ryan

    When setting up the Android & Java SDKs on this system I had the same issue when defining the needed PATH variables and adding the library paths. I dug around and found that my current system has both ~/.bashrc and /etc/profile and that no matter what I tried defining them in ~/.bashrc & it wasn’t working, but commenting the lines out in ~/.bashrc and copying them to /etc/profile did exactly as expected.

    I came to the conclusion that perhaps there’s an overwrite happening, but I’ve never had a chance to understand it further.

  2. Ryan says:

    Hello,

    I am trying to change my $PATH and i did a vi on .bash_profile where i added this command:

    export PATH=$PATH:/HOME/scripts
    

    Then I saved the file and then i did a source ~/.bashrc, but my scripts file did not show up when i ran this command.

    $ echo $PATH
    

    WHAT did i do wrong? Respectfully request your help.

    Thank you.
    cajunchief

  3. Shima says:

    Hi,

    My system is Fedora 28 and the default shell is tcsh. I want to know how can I set permanent PATH? It is necessary to say that I do not have root access.

    Before, I had Ubuntu, the default shell was BASH. So I used to edit .bashrc file.

    Thanks,
    Shima

  4. chk666 says:

    Hello and good days.

    I need help what happened if i run virtualenv in my environment path, what i mean is “[email protected]:$ virtualenv” did the path environment is change on bashrc, profile, or even in the /etc/bash, /etc/profile.

    The problem is, I cannot detect my python and when i try to echo path should get /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/marin/bin
    but I am getting blank, not showing up. Need help I run 16.04 Ubuntu.

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.