≡ Menu

How to add to bash $PATH permanently on Linux

I am a new Linux and bash shell user. How do I permanently set $PATH on Linux? How can I permanently add a directory to shell PATH on Linux?

You need to setup a variable called PATH. The search path for commands defined by $PATH shell variable. It is nothing but a colon-separated list of directories in which the shell looks for commands. The default path is system-dependent, and is set by the sysadmin who installs bash or operating system for you.

See current PATH settings

Type the following command:

echo $PATH
## OR ##
printf "%s\n", $PATH

Sample outputs:


How to correctly add a path to PATH?

The syntax is:




To add $HOME/bin/ directory to path type:

## ~/bin/ to be searched after all other directories ##


## ~/bin/ to be searched before all other directories ##

The first syntax adds $HOME/bin/ at the end PATH. The second syntax adds $HOME/bin/ at the beginning of PATH.

Fig.01: Sample bash shell session

Fig.01: Sample bash shell session

Permanently add a directory to shell PATH

To permanently add shell path edit ~/.profile ~/.bash_profile file:
$ vi ~/.profile
$ vi ~/.bash_profile
Append path setting:

## ~/bin/ to be searched after all other directories ##
export PATH=$PATH:$HOME/bin/

Save and close the file. To reload changes immedialty without logout, enter:
$ source ~/.profile
$ source ~/.bash_profile
Verify it:
$ echo $PATH

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 3 comments… add one }
  • DJC November 17, 2016, 5:28 pm

    worth adding a note about the danger of adding “.” to root profile …

  • netikras November 17, 2016, 7:10 pm

    Nice topic. A few things I’d like to add though…
    PATH is used by pretty much all the shells, not just BASH. Also it is highly recommended to hardcode the PATH env in every single script (probably in the beginning).
    While being a very nice place to keep references to all our binaries it might be harmful if not used carefully. Say you got some malware in the system (yes, it happens in Linux too – I’ve learnt it the hard way) which creates some custom scripts and renames them to ‘uptime’, ‘date’ or whatever other usual Linux command and stores them, say, in /tmp/bin/. Then it replaces PATH with “/tmp/bin/${PATH}” and executes any executable using ‘uptime’ internally. And a distracted sysadmin accidentally left a setuid bit enabled on some root-owned script… this means that this malware can easily trigger its script with root permissions because that suid-enabled script uses, say, a command ‘uptime’ which originally resides in /usr/bin, but thanks to modified PATH it has been overriden with /tmp/bin/uptime. Now malware gets a full access to your system to do anything it likes. See this:

    netikras@netikras-xps ~ $ mkdir /tmp/bin
    netikras@netikras-xps ~ $ vim /tmp/bin/uptime
    netikras@netikras-xps ~ $ chmod +x /tmp/bin/uptime 
    netikras@netikras-xps ~ $ PATH="/tmp/bin:${PATH}" which uptime
    netikras@netikras-xps ~ $ 

    Not pretty, is it?

    Similar requirements apply to IFS as well. If one is writing a script one should either always hardcode PATH or always specify use full path to the executables (the former is much more practical). Hardcoded IFS always is a very good idea too.

    • Josh November 18, 2016, 4:44 pm

      You sir, are a very smart man. Makes a lot of sense. @netikiras

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , ,