[2/4] Beginners BASH basics - learning the way of the shell
Tags: beginners, bash, webdev, productivity
Published: 2020-06-25 00:06:16

## Part 2 of a 4 part series
Part 1 is available [here](https://dev.to/haydenrou/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk) and [part 3 here](https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9)

In part 1 we discussed commands that will give you your first feel into the world of the command line. We learnt how to read the docs, look at and read your files, remove them and even search in them, but now it's time to learn some tools that will _really_ increase your productivity in the terminal.

Part 2 aims to give you the knowledge you'll need to start using the command line over your editor in certain scenarios. You'll learn how to start reading what's _actually_ happening in some basic scripts and more importantly, you'll be able to start being super fast and productive inside the often daunting black and white world that is the terminal. 

![superfastwhaaaaaa](https://media.giphy.com/media/bAplZhiLAsNnG/giphy.gif)

Let's dive straight in.

# touch
`touch` will create a file, in the same way that `mkdir` will create a directory. You will learn later on how you can save a file directly through the vim editor, however there may be an occasion where you want to create one or multiple files but not edit them at the time.

Example usage: `touch projects/TODO.md`

# echo
`echo` is a versatile command that allows you to print arguments or variables. `echo "Hello, world!"` to print out some plain text to the terminal, or `echo $HOME` to view an environment variables value. (P.S, we'll get more into that on part 4)

Example usage: `echo` can be used just print a value, to append a line to the bottom of a file with `echo $HOME >> my_file.md` or even to override a files content from the top with `echo $HOME > my_file.md`.

# curl
`curl` is used to transfer data from or to a server. You can for instance try `curl https://dev.to` which will give you the response for here!

Example usage:
You may see the following common usage for `curl`, which will place the output to the file specified (setup.sh): `curl -fLo ~/setup.sh https://raw.githubusercontent.com/haydenrou/dotfiles/master/setup.sh`

# ping
`ping` will send packets to a host, expecting the host to receive them. It's often used to check that a host is up and running.

Example usage: `ping dev.to`

Tip: Recently I came across an issue on one of my servers where I couldn't connect to github. My first point of call was to `ping github.com`, to see if the issue was there. I knew my server had internet access, but for some reason my ping was dropping off and not working. This was preventing me deploying my application and in general was just a pain.

To fix it, I simply added `140.82.112.3 github.com www.github.com` to my `/etc/hosts` file by using `echo "140.82.112.3 github.com www.github.com" >> /etc/hosts` which makes sure when trying to access github, my server knew where to go to. Problem solved.

# chmod
`chmod` can be used to change file modes.

One of the most common usage is to change a file to be executable, for example if you've created a script and want to run it.

Example usage: `chmod +x my_script.sh`

And then you can run the script like so `sh my_script.sh` or `./my_script.sh`

You can use `chmod` to change permissions to be read only, read and write, or just about whatever you want - you can see all the uses in the `man` page!

# less
When you open up a `man` page or use some other utilities, you may notice that the way the file is shown is within a menu that at first may be unfamiliar.
You may gather quickly that you can go up and down using the arrow keys or `hjkl` if you use vim, and that you can exit using `q`, but I always wondered for a while... what exactly was this?

In most cases, this opens an instance of `less`. `less` will open a file from the top, and allow you to scroll through it as mentioned above, or search for what you're looking for. `less` is great if you want to quickly skim a file or see the contents in an easier to navigate way.

Example usage: `less my_file.md`

Tips: `ctrl-d` and `ctrl-u` will go down and up respectively. `/my_search` will search when you press enter and bring what you're looking for to the top. And of course you can go up and down slower using `hjkl` or the arrow keys.

# tail
As you've probably guessed, `tail` will show you the tail end of a file. 

Why is this useful? Well you can view the constant updates to a file by using `tail`s `-f` flag, and see it updating on the spot. 

If you have a file (like a Rails application's log for example) that you want to follow, you can run `tail -f log/development.log` (or `production.log` in the relevant environment) to see the stream of output.

Example usage: `tail -f log/development.log` to show a constant stream, which you can end by pressing `ctrl-c`. `tail -n 5 log/development.log` to view the last 5 lines.

## conclusion

That's part 2 of our beginners BASH basics, I hope you enjoyed it! Next we're going to dive deep into some more complex tools and programs such as `vim`, `sed` and `awk`, so stay tuned!

As always, feel free to ask any questions or if you're interested in how I've customised my environment, head over to my repository below.

{% github https://github.com/haydenrou/dotfiles no-readme %}

Check out part part 3 [here](https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9)!