Your Complete Guide To Mastering Command Line (Linux CLI)
One of the more amazing features of Linux is the vast number of command-line utilities. There are literally thousands of commands, each of which is designed to perform a specific task. Having so many commands provides a great deal of flexibility, but it also makes the process of learning Linux a bit more daunting.
The goal of this post is to introduce you to some of the more essential command-line utilities. You learn commands used to manage files and directories, including how to view,copy, and delete files. You also learn the basics of a powerful feature called regular expressions, which allows you to view and modify files using patterns. This post introduces some of the more commonly used file-compression utilities, such as the tar and gzip utilities.
After reading this post and completing the exercises, you will be able to do the following:
- Manage files and directories
- Use shell features such as shell variables
- Be able to re-execute previous commands using the shell feature called history
- Identify regular expressions and know how to use them with commands like find, grep, and sed
- Manage file-compression utilities
The Linux operating system includes a large number of files and directories. As a result, a major component of working on a Linux system is knowing how to manage files. Now, you learn some of the essential command-line tools for file management.
The Linux Filesystem
Most likely you are already familiar with Microsoft Windows. That operating system makes use of drives to organize the different storage devices. For example, the primary hard drive is typically designated the C: drive. Additional drives, such as CD-ROM drives, DVD drives, additional hard drives, and removable storage devices (USB drives) are assigned D:, E:, and so on. Even network drives are often assigned a “drive letter” in Microsoft Windows.
In Linux, a different method is used. Every storage location, including remote drives and removable media, is accessible under the top-level directory, named root. The root directory is symbolized by a single slash (/) character. See the following image for a demonstration of a small portion of a Linux filesystem (a full Linux filesystem would contain hundreds, if not thousands, of directories).
Using the example in figure above, the boot, bin, etc, home, and usr directories are considered to be “under” the / directory. The julia and sarah directories are considered to be “under” the home directory. Often the term subdirectory or child directory is used to describe a directory that is under another directory. The term parent directory is used to describe a directory that contains subdirectories. Hence, the home directory is the parent directory of the julia subdirectory.
To describe the location of a directory, a full path is often used that includes all the directories up to the root directory. For example, the julia directory can be described by the /home/julia path. In this path, the first / represents the root directory and all further / characters are used to separate additional directories in the path.
You may be wondering what is stored in these different directories. That is a good question, but also a difficult one to answer at this point given that you are just starting to learn about the Linux operating system. So although the answer will be provided here, realize this isn’t something you should worry about too much right now—these locations will make more sense as you explore Linux further.
The Filesystem Hierarchy Standard (FHS) is a definition of where files and directories are supposed to be placed on Unix and Linux operating systems.
A summary of some of the more important locations is provided in the image below:
The standard way of executing a shell command is to type the command at a command prompt and then press the Enter key. Here’s an example:[student@localhost rc0.d]$
Commands also accept options and arguments:
An option is a predefined value that changes the behavior of a command. How the option changes the behavior of the command depends on the specific command.
Typically options are a single character value that follow a hyphen (-) character, as in -a, -g, and -z. Often these single-character options can be combined together (for example, -agz). Some newer commands accept “word” options, such as –long or –time. Word options start with two hyphens.
Arguments are additional information, such as a filename or user account name, that is provided to determine which specific action to take. The type of argument that is permitted depends on the command itself. For example, the command to remove a file from the system would accept a filename as an argument, whereas the command to delete a user account from the system would accept a user name as an argument.
Unlike options, arguments do not start with a hyphen (or hyphens).
To execute a sequence of commands, separate each command with a semicolon and press the Enter key after the last command has been entered. Here’s an example:
The pwd Command
The pwd (print working directory) command displays the shell’s current directory:
The cd Command
The cd command is one of those “no news is good news” sort of commands. If the command succeeds, no output is displayed (however, note that the prompt has changed). If the command fails, an error will be displayed, as shown here:
For security reasons, users cannot cd into all directories.
When the argument you provide starts with the root directory symbol, it is considered to be an absolute path. An absolute path is used when you provide directions to where you want to go from a fixed location (the root directory). For example, you could type the following command:
You can also give directions based on your current location. For example, if you are already in the /etc directory and want to go down to the skel directory, you could execute the cd skel command. In this case, the skel directory must be directly beneath the etc directory. This form of entering the pathname is called using a relative pathname.
If you think about it, you have given directions in one of these ways many times in the past. For example, suppose you had a friend in Las Vegas and you wanted to provide directions to your house in San Diego. You wouldn’t start providing directions from the friend’s house, but rather from a fixed location that you both are familiar with (like a commonly used freeway). But, if that same friend was currently at your house and wanted directions to a local store, you would provide directions from your current location, not the previously mentioned fixed location.
In Linux, there are a few special characters that represent directories to commands like the cd command:
- Two “dot” (period) characters (..) represent one level above the current directory. So, if the current directory is /etc/skel, the command cd .. would change the current directory to the /etc directory.
- One dot (.) represents the current directory. This isn’t very useful for the cd command, but it is handy for other commands when you want to say “the directory I am currently in.”
- The tilde character (~) represents the user’s home directory. Every user has a home directory (typically /home/username) where the user can store their own files. The cd ~ command will return you to your home directory.
The ls Command
The ls command is used to list files in a directory. By default, the current directory’s files are listed, as shown in the following example:
As with the cd command, you can provide a directory argument using either an absolute or relative path to list files in another directory.
The ls command has many options. Some of the most important options are shown in below:
What Could go Wrong?
In Linux, commands, options, filenames, and just about everything else is case sensitive. This means that if you try to execute the command ls -L, you will get different output (or an error message) than if you type the command ls -l.
The output of the ls -l command includes one line per file.
A file glob (also called a wildcard) is any character provided on the command line that represents a portion of a filename. The following globs are supported:
This example displays all files in the current directory that begin with the letter D:
The file Command
The file command will report the type of contents in the file. The following commands provide some examples:
Why use the file command? The next few commands in this post are designed to work only on text files, such as the /etc/hosts file in the previous example. Nontext files shouldn’t be displayed with commands such as the less, tail, and head commands.
The less Command
The less command is used to display large chunks of text data, pausing after displaying the first page of information. Keys on the keyboard allow the user to scroll through the document.
The head Command
The head command displays the top part of text data. By default, the top ten lines are displayed. Use the -n option to display a different number of lines:
The tail Command
The tail command displays the bottom part of text data. By default, the last ten lines are displayed. Use the -n option to display a different number of lines:
Hope you enjoyed learning these linux commands but let us tell you that this is not it there is much more to it which we will be covering in the future posts. For now please practice these commands.