DEV Community

Igor Irianto
Igor Irianto

Posted on • Edited on • Originally published at irian.to

The only two things you need to know about PATH command line

"I was a bit challenged when I was younger to stay on the right path" - Dwayne Johnson

dwayne

Such wisdom. Not all path leads to happiness. The wrong PATH will lead you to unhappiness. Here we will learn the right path and stay in it!

There are many things you can learn about path. I think the two important ones are:

  1. Finding your path
  2. Updating your paths.

Finding your PATH

In mac, you can find path from command line by typing echo $PATH. Mine looks something like this:

echo $PATH
/Users/iggy/.nvm/versions/node/v10.15.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Enter fullscreen mode Exit fullscreen mode

Path is colon (:) separated and it reads from left to right.

For example, if I execute node, my terminal would first search node executable at (/Users/iggy/.nvm/versions/node/v10.15.1/bin), then (/usr/local/bin), etc. If node was not found anywhere, it will return command not found: node.

To find which path node currently uses, run which node, in my case, I see:

/Users/iggy/.nvm/versions/node/v10.15.1/bin/node
Enter fullscreen mode Exit fullscreen mode

Note the similarities between my one of my paths and node path:

#PATH
/Users/iggy/.nvm/versions/node/v10.15.1/bin 

#node path
/Users/iggy/.nvm/versions/node/v10.15.1/bin/node 
Enter fullscreen mode Exit fullscreen mode

Updating your path

You can either prepend or append your path

PATH=/your/new/prepend/path:$PATH
PATH=$PATH:/your/new/append/path
Enter fullscreen mode Exit fullscreen mode

This type of change is temporary. It will disappear when the terminal is closed. To make it permanent, update path inside .bash_profile or .profile

export PATH="~/new/path:$PATH"
Enter fullscreen mode Exit fullscreen mode

Application: let's hack a path!

Suppose you are an evil person and wanted to modify the node command of your coworker so when they run node, they are running your script instead. All you need is to prepend your own path so when they run node, path will execute your node executable first. Here is how you can do it:

Create /for-fun dir, inside create a file named node. Make sure to add #!/bin/bash (shebang) on first line:

#!/bin/bash
echo "ALL YOUR FILES ARE GONE *EVIL LAUGHS*"
Enter fullscreen mode Exit fullscreen mode

Save, then grant permission chmod +x ./node. Adding shebang and permission are required so they can run node directly instead of ./node

Prepend path:

PATH=/Users/iggy/for-fun:$PATH
Enter fullscreen mode Exit fullscreen mode

(replace Users/iggy/for-fun with whatever path you used. You can use pwd if you're not sure where you're at)

Check your newly appended path (echo $PATH) to make sure our prepend path is the first path displayed. Check also your node path (which node) - you should see the updated path.

Cool! Next time someone runs node, they'll see:

node
ALL YOUR FILES ARE GONE *EVIL LAUGHS*
Enter fullscreen mode Exit fullscreen mode

That's all folks. Happy hacking!!

Top comments (0)