PATH Environment Variable in Linux/Unix

What is the $PATH environment variable?

Every Linux & Unix System has several environment variables which are dynamic variables essential for running several processes in the system. $HOME,$env being some of the well known environment variables.

The $PATH environment variable stores all the paths where one can find the binary executables for all the commands that we use.

Whenever a command is invoked from the terminal,all the paths in the $PATH environment variable are looked up and if the binary is found, the command is executed.

Trying this out on the terminal produces:

    echo $PATH
    
    /home/linus/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

The path variable can be usually edited or updated from the .bash_profile hidden file(On Unix like OS) or directly by exporting the variable with the export command.

Creating your own command recipies

Linux or Unix commands can be usually built by shell scripts, Python or Perl scripts. Let us create a simple Bash script that calculates the factorial of the number sent to it as an argument in the command.


    #!/bin/bash
    count=$1 
    fact=1
    while [ $count -gt 0 ] 
    do
       fact=$(( $fact * $count ))
       count=$(( $count - 1 ))
    done
    echo $fact
    

Create a sample file with a .sh extension and copy the factorial code as given above. Add the directory which contains the given file to your $PATH variable. Edit the variable from your .bash_profile or .profile located in your root directory with your preferred text editor.


    nano ~/.bash_profle

The file may contain several other aliases and variables but look out for the lines and update as shown below (Make sure there are no spacings between PATH and =)


    export PATH=/home/linus/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/directory_of_bash_script
    

Do not forget to source the .bash_profile or .profile file with the source command or .

    
    source .bash_profile

Calling the script file name from the terminal with any number as the argument to the command will print the factorial to stdout. The same thing can also be done by creating a symbolic link which will be discussed later.

Avatar
Chaitanya Rahalkar
Software Security Engineer

Software Security Engineer at Block Inc., specializing in cloud-native security and application security.