Sometimes it would be useful if you could write the output of a command to a file for further editing or if you could combine several commands, using the output of one command as the input for the next one. The shell offers this function by means of redirection or pipes.
Normally, the standard output in the shell is your screen (or an open shell window) and the standard input is the keyboard. With the help of certain symbols you can redirect the input or the output to another object, such as a file or another command.
With > you can forward the output of a command
to a file (output redirection), with < you can
use a file as input for a command (input redirection).
By means of a pipe symbol | you can also redirect
the output: with a pipe, you can combine several commands, using the
output of one command as input for the next command. In contrast to
the other redirection symbols > and <, the use of the pipe is
not constrained to files.
To write the output of a command like ls to a file, enter
ls -l > filelist.txt
This creates a file named filelist.txt that
contains the list of contents of your current directory as generated
by the ls command.
However, if a file named filelist.txt already
exists, this command overwrites the existing file. To prevent this,
use >> instead of >. Entering
ls -l >> filelist.txt
simply appends the output of the ls command to an
already existing file named filelist.txt. If the
file does not exist, it is created.
Redirections also works the other way round. Instead of using the standard input from the keyboard for a command, you can use a file as input:
sort < filelist.txt
This will force the sort command to get its input
from the contents of filelist.txt. The result is
shown on the screen. Of course, you can also write the result into
another file, using a combination of redirections:
sort < filelist.txt > sorted_filelist.txt
If a command generates a lengthy output, like ls
-l may do, it may be useful to pipe the
output to a viewer like less to be able to scroll
through the pages. To do so, enter
ls -l | less
The list of contents of the current directory is shown in
less.
The pipe is also often used in combination with the
grep command in order to search for a certain
string in the output of another command. For example, if you want to
view a list of files in a directory which are owned by the user
tux, enter
ls -l | grep tux