4.9. Manipulating Information from the Shell
From the shell's point of view, there are three kinds of
information: standard input, standard output, and standard
error. In simple terms, standard input is
the information that a user enters from the keyboard for the
shell to use, such as commands and filenames.
Standard output is essentially the
information the shell prints on the screen after evaluating a
user's commands. Standard error is the
information that indicates that something has gone wrong.
Collectively, these three types of information are referred to
as standard I/O (input/output).
The ability to manipulate and use information from the shell
is one of the strengths of Red Hat Enterprise Linux. This section discusses the
simpler aspects of standard I/O manipulation.
4.9.1. Pipes and Pagers
In Section 4.8.5 Viewing and creating files with
cat, we saw that using
cat to view a large file causes the contents to scroll off the
screen. Using a pipe, we can control
that behavior. A pipe is the ( | ) symbol. It is used to
connect the standard output of one command to the standard
input of another command. Essentially, it allows a user to
string commands together. Pagers are commands (such as
less) that display text in the terminal
window.
Using cat, the pipe (|), and
less together displays the file one page at
a time. You can then use the up and down arrow keys to move
backward and forward through the pages.
The above command opens the file named
<filename> using the
cat command, but does not allow it to
scroll off the screen.
Using the pipe with a pager is also useful when examining
large directories with ls. For example,
view the /etc/ directory with the
ls command.
Notice that the contents scroll past too quickly to view.
To get a closer look at the output of the
ls command, pipe it through
less.
Now you can view the contents of
/etc/ one screen at a time. Remember
that you can navigate forward and backward through the screens
and even search for specific text using the
[/] key.
You can combine redirection with wildcards.
The above displays all files and directories in
/etc/ that start with the letter
"a" one screen at a time.
4.9.2. Using Redirection
Redirection means changing where
standard input comes from or where the standard output goes.
To redirect standard output, use the > symbol. Placing
> after the cat command (or after any
utility that writes to standard output) redirects its output
to the file name following the symbol.
Remember that the cat command echoes the
text you enter on the screen. Those echoes are the standard
output of the command. To redirect this
output to a file, type the following at a shell prompt and
press Enter: cat > foo.txt. Enter a few
more lines of text, and use the
[Ctrl]-[D] key
combination to quit cat.
The following screen is an example, redirecting three lines of
text into the file foo.txt.
The following screen is another example, redirecting
three more lines of text to create the file bar.txt.
The following screen demonstrates cat's concatenate
function, adding the contents of bar.txt to the end of foo.txt.
Without redirection to the file example1.txt, cat displays
the concatenated contents of foo.txt and bar.txt on the screen.
The following screen displays the contents of
example1.txt, so that the user can see how the files were added
together.
| Caution |
---|
| Be careful when you redirect the output to a file,
because you can easily overwrite an existing file! Make sure
the name of the file you are creating does not match the
name of a pre-existing file, unless you want to replace it.
|
4.9.3. Appending Standard Output
The symbol >> appends
standard output. This means it adds the standard output to
the end of a file, rather than over-writing the file.
The following screen shows the command to append
bar.txt to foo.txt.
The contents of bar.txt are now
permanently added to the end of foo.txt.
The cat command is called a second time to
display the contents of foo.txt.
To compare example1.txt and the modified
foo.txt, use the diff
command. diff compares text files
line-by-line and reports the differences to standard output.
The following screen shows the comparison between
example1.txt and
foo.txt. Because there are no
differences, diff returns no information.
4.9.4. Redirecting Standard Input
You can also perform the same type of redirection with
standard input.
When you use the redirect standard input symbol <, you
are telling the shell that you want a file to be read as input
for a command.
The following screen shows foo.txt being
redirected as input for cat: