This book is practical because it uses tutorial examples that show you what you will see on your terminal screen each step of the way. It is a guide because it takes you from logging in on your system (Chapter 2) through writing complex shell programs (Chapters 11, 12, and 13), using sophisticated software development tools (Chapter 14), and administrating a system (Chapter 15). Part II is a reference guide to more than 85 Linux utilities. This Practical Guide is intended for people with some computer experience but little or no experience with a Linux/UNIX system. However, more experienced Linux/UNIX system users will find the later chapters and Part II to be useful sources of information on subjects such as GUIs, basic and advanced shell programming, editing, C programming, debugging, source code management, networks, The Internet, The World Wide Web, graphical user interfaces, and Linux system administration.
This book will appeal to a wide range of readers. As a minimum it assumes some experience with a PC or a Mac, but it does not require any programming experience. It is appropriate for
- Users of both single- and multiuser Linux systems
- Students taking a class about Linux
- Students taking any class in which they use Linux
- Computer science students studying operating systems
- People who want to run Linux at home
- Professionals who want to use Linux at work
- Programmers who need to understand the Linux programming environment
Benefits to You, the Reader
You will come away from this book with a broad knowledge of Linux, and how to use it in day-to-day work. Whether you are a C or Shell programmer or a user who wants to run application programs or use the DOS emulator under Linux, this book will give you the knowledge to proceed. A Practical Guide to Linux gives you a broad understanding of Linux, including how to administer, maintain, and update the system. It will remain a valuable reference tool for years to come.
Scope of Coverage and Features
A Practical Guide to Linux covers a broad range of topics, from writing simple shell scripts to recursive shell programming; from local email to using Netscape to browse the World Wide Web; from using simple utilities to source code management using RCS and CVS; from using a system to administrating one. Below is a list highlighting some of the features of this book, followed by more in-depth discussions of some of these features.
- Compatible with all distributions of Linux
- Broad Internet coverage including Netscape, ftp, and downloading software and documentation, using a search engine, and constructing a simple HTML page
- A Help! appendix written in FAQ style that covers everything from setting up special keyboard keys to downloading, compiling, and installing software
- Many examples throughout
- Thorough shell coverage with chapters on the Bourne Again Shell (bash), the TC Shell (tcsh), and the Z Shell (zsh). Coverage includes both interactive use of the shells and programming with the shells
- Using and customizing the X Window System and the fvwm window manager
- Using C, imake, make, and source code management (RCS and CVS) under Linux
- In-depth coverage of the emacs and vi editors
- Complete instructions on using software from the Internet: finding, downloading, compiling, and installing software from the Internet
- Getting online documentation from many sources (local and Internet)
- A complete discussion of the Linux filesystem
- An appendix covering regular expressions
- A comprehensive index
- An appendix on POSIX standards
The following sections highlight some of the features of this book:
Part I and Part II A Practical Guide to Linux shows you how to use Linux from your terminal. Part I comprises the first 15 chapters, which contain step-by-step tutorials covering the most important aspects of the Linux operating system. (If you have used a Linux/UNIX system before, you may want to skim over Chapters 2 and 3.) The more advanced material in each chapter is presented in sections marked "Optional" which you are encouraged to return to after mastering the more basic material presented in the chapter. Review exercises are included at the end of each chapter for readers who want to hone their skills. Some of the exercises test the reader's understanding of material covered in the chapter, while others challenge the reader to go beyond the material presented to develop a more thorough understanding.
Part II offers a comprehensive, detailed reference to the major UNIX utilities, with numerous examples. If you are already familiar with the Linux/UNIX system, this part of the book will be a valuable, easy-to-use reference. If you are not an experienced user, you will find Part II a useful supplement while you are mastering the tutorials in Part I.
Organizing Information In Chapters 2, 3, and 4, you will learn how to create, delete, copy, move, and search for information using your system. You will also learn how to use the UNIX system file structure to organize the information you store on your computer.
Electronic Mail and Telecommunications Chapters 2 and 3 and Part II include information on how to use utilities (pine, talk, and write) to communicate with users on your system and other systems. Chapter 7 details how to address electronic mail to users on remote, networked systems.
Using the Shell In Chapter 5 you will learn how to redirect output from a program to the printer, to your terminal, or to a file--just by changing a command. You will also see how you can use pipes to combine Linux utilities to solve problems right from the command line.
Shell Programming Once you have mastered the basics of Linux, you can use your knowledge to build more complex and specialized programs using a shell programming language (shell scripts). Chapter 11 shows you how to use the Bourne Again Shell to write your own scripts composed of Linux system commands. Chapter 12 covers the TC Shell. Chapter 13 covers the Z Shell, which combines many of the popular features of the C Shell (such as history and aliases) with a programming language similar to that of the Bourne Shell. This chapter also covers many concepts of advanced shell programming. The examples in Part II also demonstrate many features of the Linux utilities that you can use in shell scripts.
Using Programming Tools Chapter 14 introduces you to the C compiler and LinuxÕs exceptional programming environment. This chapter describes how to use some of the most useful software development tools: make, the Concurrent Versions System (CVS), and the Revision Control System (RCS). The make utility automates much of the drudgery involved in ensuring that a program you compile contains the latest versions of all program modules. CVS and RCS help you to track the versions of files involved in a project.
Networking Chapter 7 is devoted to explaining what a network is, how it works, and how you can use it. It tells you about types of networks, various network implementations, distributed computing, how to use the network for communicating with other users, and using various networking utilities (such as telnet and ftp).
Internet and the World Wide Web Chapter 7 also discusses the use of the Internet and shows, with examples, how to use a browser (Netscape) and a search engine (Alta Vista) and how to create a simple page on the Web.
Graphical User Interfaces (GUIs) Chapter 6 discusses the X Window system, how to open and control windows, how to customize your X work environment, and how to customize the Motif and fvwm window managers.
The Z Shell and Advanced Shell Programming Chapter 13 covers many of the features of this powerful shell. It extends the concepts of shell programming introduced in Chapter 11 into more advanced areas, including more information on the locality of variables, recursion, and the coprocess.
The vi Editor The screen-oriented vi editor, which was originally a part of Berkeley UNIX, is still one of the most widely used text editors. Chapter 8 starts with a tutorial on vi and goes on to explain how to use many of the advanced features of vi, including special characters in search strings, the general-purpose and named buffers, parameters, markers, and executing commands from vi. The chapter concludes with a sum-mary of vi commands.
The emacs Editor Produced and distributed (for minimal cost) by the Free Software Foundation, the emacs editor has grown in popularity and is available for Linux. Chapter 9 includes information on emacs Version 19 and the X Window System, allowing you to use a mouse and take advantage of X Window System features with emacs. This chapter explains how to use many of the features of this versatile editor, from a basic orientation to the use of the META, ALT, and ESCAPE keys; key bindings, buffers, the concept of Point, the cursor, Mark, and Region, incremental and complete searching for both character strings and regular expressions; using the online help facilities, cutting and pasting (from the keyboard and with a mouse), using multiple windows; and C Mode, which is designed to aid a programmer in writing and debugging C code. The chapter concludes with a summary of emacs commands.
Job Control The job control commands, which originated on Berkeley UNIX, allow a user to work on many jobs at once from a single window, and switch back and forth between the jobs as desired. Job control is available under the Bourne Again, TC, and Z shells.
Shell Functions A feature of the Bourne Again and Z shells, shell functions enable you to write your own commands that are similar to the aliases provided by the TC Shell, only more powerful.
Source Code Management: CVS and RCS The Concurrent Versions System (CVS) and Revision Control System (RCS) are convenient sets of tools that enable programmers to track multiple versions of files on a number of different types of projects.
POSIX The IEEE POSIX committees have developed standards for programming and user interfaces based on historical UNIX practice, and new standards are under development. Appendix D describes these standards and their direction and effect on the UNIX industry.
System Administration Chapter 15 explains the inner workings of the Linux system. It details the responsibilities of the Superuser and explains how to bring up and shut down a Linux system, add users to the system, back up files, set up new devices, check the integrity of a filesystem, and more. This chapter goes into detail about the structure of a filesystem and explains what administrative information is kept in the various files.
Using Linux Utilities The Linux system includes hundreds of utilities. Part II contains extensive examples of how to use many of these utilities to solve problems without resorting to programming in C (or another language). The example sections of awk (over 20 pages, starting on pageÊ648), and sort (pageÊ856), give real-life examples that demonstrate how to use these utilities alone and with other utilities to generate reports, summarize data, and extract information.
Regular Expressions Many UNIX utilities allow you to use regular expressions to make your job easier. Appendix A explains how to use regular expressions, so that you can take advantage of some of the hidden power of your Linux system.Thank you both very much.
From Pat Parseghian's large-scale system-administration experience at Princeton and her interest in data networks to her work with Linux systems at Transmeta, she brings a breadth to this book that ties together the technobabble of computers and their use in the real world. Pat is responsible for much of the work on the Networking and GUI chapters.
Thanks to the Texan, JFP (Dr. John Frank Peters), for his many hours on the emacs chapter. His under-standing of this editor gives this chapter a depth and breadth that makes you want to dive right in. Fred Zlotnick, author of The POSIX.1 Standard, did a lot of work on the POSIX Appendix.
Larry Ewing (email@example.com) is responsible for the wonderful penguin playing on the tip of the Linux iceberg on the cover of the book and for other penguins herein as well. He created them with a tool named the GIMP (General Image Manipulation Program.
Also, a big, "Thank You"; to the folks who read through the draft of the book and made comments that caused me to refocus parts of the book where things were not clear or were left out altogether. Thanks to Brian LaRose; Byron A. Jeff, Clark Atlanta University; Charles Stross; Eric H. Herrin, II, University of Kentucky; Jeff Gitlin, Lucent Technologies; Kurt Hockenbury; Maury Bach, Intel Israel Ltd.; Peter H. Salus; Rahul Dave, University of Pennsylvania; Sean Walton, Intelligent Algorithmic Solutions; and Tim Segall, Computer Sciences Corporation for reviewing the book.
A Practical Guide to Linux is based in part on my two previous UNIX books, A Practical Guide to UNIX and UNIX System V: A Practical Guide, both in their third editions. There were many people who helped me with those books and thanks is due them here: Arnold Robbins, Georgia Tech. University; Behrouz Forouzan, DeAnza College; Mike Keenan, Virginia Polytechnic Institute and State University; Mike Johnson, Oregon State University; Jandelyn Plane, University of Maryland; Sathis Menon, Georgia Tech. University; Cliff Shaffer, Virginia Polytechnic Institute and State University; and Steven Stepanek, California State University, Northridge.
I continue to be grateful to the many people who helped with the early editions of my UNIX books. This book would not have been possible without the help and support of everyone at Informix Software, Inc. Special thanks to Roger Sippl, Laura King, and Roy Harrington for introducing me to the UNIX system. My mother, Dr. Helen Sobell, provided invaluable comments on the manuscript at several junctures.
Dr. Kathleen Hemenway researched, wrote, analyzed reviews, and generally coordinated all the efforts that went into the second edition of my UNIX books. From her work on the UNIX system at Bell Labs, her teaching experience, and her work at Sun, she brought a breadth to this book that greatly increases its value as a learning tool.
Isaac Rabinovitch provided a very thorough review of the system administration chapter. Professor Raphael Finkel and Professor Randolph Bentson each reviewed the manuscript several times, making many significant improvements. Bob Greenberg, Professor Udo Pooch, Judy Ross, and Dr. Robert Veroff also reviewed the manuscript and made useful suggestions. In addition, the following people provided critical reviews and were generally helpful during the long haul: Dr. Mike Denny, Joe DiMartino, Dr. John Mashey, Diane Schulz, Robert Jung, Charles Whitaker, Don Cragun, Brian Dougherty, Dr. Robert Fish, Guy Harris, Ping Liao, Gary Lindgren, Dr. Jarrett Rosenberg, Dr. Peter Smith, Bill Weber, Mike Bianchi, Scooter Morris, Clarke Echols, Oliver Grillmeyer, Dr. David Korn, Dr. Scott Weikart, and Dr. Richard Curtis.
Dr. Brian Kernighan and Rob Pike graciously allowed me to reprint the bundle script from their book, The UNIX Programming Environment.
Of course I take responsibility for any errors or omissions. If you find one or just have a comment, let me know (at firstname.lastname@example.org or c/o the publisher), and I'll fix it in the next printing.It also contains copies of the longer scripts from the book and pointers to many interesting Linux pages.