13.1 The Power of the Unix Shell
While it's true that the shell is an older style of
interacting with a computer than the GUI, the graphical user
interface is actually the more primitive interface. The
GUI is easy to learn and widely used, but
the shell is vastly more sophisticated. Using a GUI is somewhat like
communicating in American Indian sign language. If your message is a
simple one, like "We come in
peace," you can communicate it by using a few
gestures. However, if you attempted to give
Lincoln's Gettysburg address—a notably short
public discourse—you'd find your task quite
formidable.
The designer of a program that provides a GUI must anticipate all the
possible ways in which the user will interact with the program and
provide ways to trigger the appropriate program responses by means of
pointing and clicking. Consequently, the user is constrained to
working only in predicted ways. The user is therefore unable to adapt
the GUI program to accommodate unforeseen tasks and circumstances. In
a nutshell, that's why many system administration
tasks are performed using the shell: system administrators, in
fulfilling their responsibility to keep a system up and running, must
continually deal with and overcome the unforeseen.
The shell reflects the underlying philosophy of Unix, which provides
a wide variety of small, simple tools (that is, programs), each
performing a single task. When a complex operation is needed, the
tools work together to accomplish the complex operation as a series
of simple operations, one step at a time. Many Unix tools manipulate
text, and since Unix stores its configuration data in text form
rather than in binary form, the tools are ideally suited for
manipulating Unix itself. The shell's ability to
freely combine tools in novel ways is what makes Unix powerful and
sophisticated. Moreover, as you'll learn, the shell
is extensible: you can create
shell scripts that let
you store a series of commands for later execution, saving you the
future tedium of typing or pointing and clicking to recall them.
The contrary philosophy is seen in operating systems such as
Microsoft Windows, which employ elaborate, monolithic programs that
provide menus, submenus, and dialog boxes. Such programs have no way
to cooperate with one another to accomplish complex operations that
weren't anticipated when the programs were designed.
They're easy to use so long as you remain on the
beaten path, but once you step off the trail, you find yourself in a
confusing wilderness.
Of course, not everyone shares this perspective. The Usenet
newsgroups, for example, are filled with postings debating the
relative merits of GUIs. Some see the Unix shell as an arcane and
intimidating monstrosity. But, even if they're
correct, it's inarguable that when you learn to use
the shell, you begin to see Unix as it was intended (whether
that's for better or for worse).
When you are performing common, routine operations, a GUI that
minimizes typing can be a relief, but when faced with a complex,
unstructured problem that requires a creative solution, the shell is
more often the tool of choice. Creating solutions in the form of
shell scripts allows solutions to be stored for subsequent reuse.
Perhaps even more important, shell scripts can be studied to quickly
bone up on forgotten details, expediting the solution of related
problems.
|