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.
Let's dive straight in.
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.
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)
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 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!
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 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.
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
18.104.22.168 github.com www.github.com to my
/etc/hosts file by using
echo "22.214.171.124 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 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.
chmod +x my_script.sh
And then you can run the script like so
sh my_script.sh or
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
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 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.
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.
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
-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.
tail -f log/development.log to show a constant stream, which you can end by pressing
tail -n 5 log/development.log to view the last 5 lines.
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
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.
Check out part part 3 here!