Photo by Raphael Schaller on Unsplash
Essential Guide to Shell Navigation for Beginners
Mastering Command Line Interface (CLI) Basics in UNIX
Introduction
You do not have to be a hacker to understand interfaces like this one!
In computer systems, there are two types of user interfaces:
The Graphical User Interface (GUI) and the Command Line Interface (CLI).
Most users are familiar with the GUI but the CLI provides a more powerful and efficient way to interact with the computer.
Graphical User Interface (GUI) vs. Command Line Interface (CLI)
In a Graphical User Interface, the user interacts with graphical components of the computer such as icons, buttons, menus etc.
A command line user interface is a text-based interface used to interact with the computer, manage files and run programs on the computer.
Your first encounter with a computer was most probably with a graphical user interface (GUI).
In the shell, you make use of the Command Line Interface (CLI) to interact with the computer.
Accessing the Shell:
You can access the shell on a macOS with the terminal and on a Windows computer, you can access the shell with a program called command prompt. Other operating systems also have programs that enable you to access the shell. To unlock the full potential of the CLI, you need to master shell commands and your first step should be learning how to navigate the shell.
Understanding the File System:
You may be familiar with how files are stored in different drives on a Windows machine: Local Disk (C:), DVD RW DRIVE (D:), New Volume (E:)
What this means is that different partitions on your hard disk are created to store these files but in a unix operating system which is similar to macOS, everything is stored inside a root folder which is called root. The root directory is the first directory and every other file folder or subdirectory is contained in the root directory. Unix and Unix-like operating systems do not employ the concept of drive letters.
Take note that a directory is what you call a folder on a Windows machine.
Essential Navigation Commands:
pwd
It stands for print working directory.
The first command you should master to know how to navigate the shell is pwd
.
A good analogy to understand pwd
is to think of it as a GPS. A GPS can tell you your location anywhere you are in the world while pwd
can tell you your location anywhere you are on your computer.
This can come in handy when you do not know the current directory which you’re currently in, you can simply type pwd
and it will print the location of your current directory.
Go ahead and type pwd
on your terminal and see the output it gives you.
Did you try it? If you did, you should get a result similar to this 👇
[user@mycomputer ~]$ pwd
/home/user
When you open the terminal, by default, the current directory should be the home of the currently logged-in user except if you changed this configuration.
cd
It stands for change directory.
Think of cd
as a teleportation device that can take you anywhere in the world. When you use the command cd, you can change your current directory to a different location on your file system. To use the command, type cd followed by the pathname of the location you wish to navigate to
[user@mycomputer ~]$ cd /var/www
ls
It stands for list.
To understand the ls
command, think of it as a torchlight that helps you see what’s in a dark room. The ls
command helps you see all the files and directories in your present directory.
Go ahead and type the ls command in your current working directory to see all the files present.
Advanced File System Navigation:
Let’s dive deeper into how to navigate the file system. There are two important concepts you need to understand.
Absolute pathname: This specifies the location of a directory from the root directory to the target file or directory. The root directory is
/
[user@mycomputer ~]$ cd /usr/john/documents [user@mycomputer documents]$ pwd /usr/john/documents
Relative pathname: This specifies the location of a directory relative to the current directory. e.g.
[user@mycomputer ~]$ cd subdirectory/documents [user@mycomputer documents]$ pwd /home/user/subdirectory/sub-sub-directory/documents
There are some special notations used as relative pathnames
..
means parent directory of the current directory.[user@mycomputer ~]$ cd .. [user@mycomputer ~]$ pwd /home/user
.
means the current directory[user@mycomputer ~]$ cd . [user@mycomputer ~]$ pwd /home/user
Advanced ls
Commands:
You can write the ls
commands with flags.ls -a
-a
stands for all.
This command lists all the hidden files in the current or specified directory. Files that start with .
are known as hidden files. You can not view them with the ls
command hence, you need to add the -a
flag.
[user@mycomputer ~]$ ls -a
. file1.txt my_directory
.. file2.txt .hidden_file
ls -l
-l
stands for long format.
This command ls
to list all contents of a directory with the following information:
File types and permissions: This displays the read, write and execute permissions for the owner, group and others. Read more on file permissions
Number of hard links: Number of hard links to the file or directory.
Owner: Displays the owner of the file or directory.
Group: Displays the group associated with the file or directory.
File size: Displays the size of the file or directory in bytes. 4096 means an empty directory.
Modification Date and Time: The date and time the file was last modified
Name: The name of the file or directory.
[user@mycomputer ~]$ ls -l
total 16
-rw-r--r-- 1 user users 200 Sep 16 10:00 file1.txt
-rw-r--r-- 1 user users 300 Sep 16 10:05 file2.txt
drwxr-xr-x 2 user users 4096 Sep 16 10:10 my_directory
ls -n
-n
stands for numeric.
This flag tells ls
to display user and group IDs as numbers rather than their names.
[user@mycomputer ~]$ ls -n
total 8
drwxr-xr-x 2 1000 1000 4096 Sep 10 14:30 my_directory
-rw-r--r-- 1 1000 1000 32 Sep 10 14:29 file1.txt
-rw-r--r-- 1 1000 1000 32 Sep 10 14:29 file2.txt
You can combine the -a
and the -l
flag this way ls -aln
or ls -lan
. The format in which you write it does not matter. This will display all the files (including hidden files) in long format and numerical order.
Practice and Tips
The commands explained above are just a few out of hundreds out there. You do not have to master them all at once but with time and practice, you will gain mastery.
If you come across a command that you are not familiar with, simply type man
followed by the command on your terminal.
[user@mycomputer ~]$ man ls
This syntax will display the documentation for the command you specified.
Conclusion
I hope you found this article helpful. If there is any topic or concept that you'd want me to buttress, do not hesitate to leave a comment and I will attend to it ASAP.