Although Ubuntu is a desktop-driven OS, the system is running on a powerful and incredibly flexible command-line core. Inspired by more than 20 years of UNIX heritage, the command-line environment present on Linux systems enables you to perform some incredibly powerful tasks by stringing together different commands in different ways.
The philosophy behind UNIX is to create a large number of small tools, each of which is designed to do one task but do it incredibly well. As an example, there is a command called ls that does nothing more than list files in a folder. Although listing files is its singular function in life, it has every option imaginable for listing files.
Although ls is limited by itself, it can be combined with other commands that have equal levels of flexibility to create impressively powerful combinations. To do this, a pipeline is created using the | symbol to connect these different commands. Pipelines can be constructed in any number of different ways, and once the user has the knowledge of what the different commands do, stringing together a pipeline of commands can solve virtually any task you can imagine.
It should be made 100 percent clear that using the command line is not an essential skill required to use Ubuntu, but it is a skill that can increase the flexibility of your computer for more advanced, customized tasks.
A Crash Course in the Terminal
Fire up the terminal by clicking Applications > Accessories > Terminal. You will see a terminal window similar to the one shown in Figure 4-20.
Figure 4-20 It is handy to drop into the terminal when you need to tweak something in particular.
In the terminal window you can see the terminal prompt and a black cursor. The prompt shows your current username, the name of the host, and the name of the folder you are currently in. When you first fire up the terminal, the folder is shown as a tilde (~), which is shorthand for your home directory.
First have a look at the files in your home folder by running the following command:
The ls command lists the files in your current folder. The default command just displays a collection of items that are in your folder. To make ls more useful, you can pass it options:
foo@bar~$ ls -al
The -al parts are options that can be passed to the command. In this example, two options, a (list all files) and l (use a long display format to display file permissions, dates, sizes, and more), are used with ls to display all of the files (including hidden files) and their details.
Now jump to a different directory:
foo@bar~$ cd Desktop
The cd command changes the directory to the place you specify after the command (in this case, the desktop directory). A nice shortcut that you can use when typing files and folders is to type the first few letters and then press the Tab key to fill in the remainder of the file/folder name. As an example, in the previous command you could type cd Des and press the Tab key to fill in the rest of Desktop.
When inside a directory, you may want to have a quick look at the contents of a text file. To do this, use the cat command:
foo@bar~$ cat myfile.txt
This command outputs the contents of the file to the screen.
As you can imagine, there are hundreds and hundreds of different commands available on the system, and we don't have the space to cover them here. A number of superb Web sites and books can help you find out about the many different commands.
The power of the command line really comes into its own when you start combining commands into pipelines. A pipeline uses the pipe symbol (|) to string together a number of commands to perform a specific task. As an example, if you use the cat command to display the contents of a file to the screen, but the file scrolls past you, create a pipeline and use the less command so you can browse the file:
foo@bar~$ cat foo.txt | less
To see how this works, break the command into parts, each separated by the pipe. The output of the part on the left (cat'ing the file) is fed into the less command on the right, which allows you to browse the file with the arrow keys.
Pipelines can be useful for finding specific information on the system. As an example, if you want to find out how many particular processes are running, run a command like this:
foo@bar~$ ps ax | grep getty | wc -l
Here you count how many getty processes are running (getty is the software that runs a console session). The ps ax command on the left lists the processes on the system, and then the grep command searches through the process list and returns only the lines that contain the text "getty". Finally, these lines are fed into wc, which is a small tool that counts the number of words or lines. The -l option specifies that the number of lines should be counted.
Running Commands as the Superuser
When you log in to your computer, the account you use is a normal user account. This account is restricted from performing various system administration tasks. The security model behind Ubuntu is that you should run as a normal user all the time and dip into the system administrator account only when you need to.
To jump to this superuser account when using the terminal, put the sudo command before the command you want to run. As an example, if you want to restart the networking system from the command line, run:
foo@bar~$ sudo /etc/init.d/networking restart
The command to the right of sudo is the command that should be run as the administrator, but sudo lets you run the command as the current user. When you run the above command, you are asked for the administrator password. This is the same password as the one you established for the first user you added when you installed Ubuntu on the computer. If you are using that user's account, just enter your normal password.
When you have authenticated yourself to sudo, you will not be asked for the password again for another 15 minutes.
Each command on your computer includes a manual page—or man page—that contains a list of the options available. Man pages are traditionally rather terse and intended only for referencing the different ways the command should be used. For a friendlier introduction to using commands, we recommend a Google search.
To view a man page (such as the man page for ls), run:
foo@bar~$ man ls
The man page command itself has a number of options (run man man to see them), and one of the most useful is -k. This option allows you to search the man pages for a particular word. This is useful when you don't remember the command. As an example, you could find all commands related to processes by running:
foo@bar~$ man -k processes