8003 lines
306 KiB
Plaintext
8003 lines
306 KiB
Plaintext
|
||
Linux Installation and Getting Started
|
||
------------------------------------------------------------------------
|
||
Copyright 1993 Matt Welsh, <mdw@TC.Cornell.EDU>
|
||
Version 1.0, 5 August 1993.
|
||
|
||
This book is an introduction to the Linux system, including infor-
|
||
mation on how and where to get Linux, installation of the software,
|
||
a beginning UNIX tutorial, and an introduction to system adminis-
|
||
tration. This is the first book anyone with interest in Linux should
|
||
read.
|
||
|
||
Note: This is the ASCII version of Linux Installation and Getting
|
||
Started, which is a quick hack made possible by a combination of
|
||
a LaTeX style format, dvi2tty, and a couple of hours of manual
|
||
editing. It is only made available to give those with no PostScript
|
||
or .dvi viewing/printing capabilities a chance to use the book.
|
||
However, if you have access to a PostScript printer, xdvi, or
|
||
GhostView, I suggest that you use one of these to view or print the
|
||
.dvi or PostScript version of the book, which includes such features
|
||
as:
|
||
* Fonts
|
||
* Page numbers
|
||
* Table of contents
|
||
* Nicely-formatted page layout
|
||
* A complete vi tutorial
|
||
* Linux BBS list
|
||
* And more!
|
||
|
||
This ASCII version is slightly ugly, and in the future I hope that
|
||
LameTeX will provide enough functionality to format the LDP manuals
|
||
for ASCII. However, it's readable. Enjoy. --mdw
|
||
|
||
|
||
|
||
|
||
Preface
|
||
|
||
|
||
|
||
It's unfortunate that the Intel 80386 and 80486 line of processors
|
||
has been subjected to the growing popularity of so-called operating
|
||
systems such as MS-DOS, an aging system which doesn't exploit
|
||
the power of these machines. It's also unfortunate that better
|
||
operating systems, commercial UNIXes and OS/2 included, are
|
||
so large and expensive_not the enthusiast's forte. The question
|
||
everyone's been asking is, "Who's going to save the IBM PC?" Who
|
||
is going to save the PC world from the death grip of commercial
|
||
operating systems? Where's Richard Stallman when you need him?
|
||
|
||
Things were looking extremely bleak, as the dark cloud of Mi-
|
||
crosoft and IBM loomed menacingly on the horizon. But, at long
|
||
last, a messiah emerged unexpectedly from the fjords of Helsinki.
|
||
Kernel in hand, with a growing band of programmers, beta testers,
|
||
and other such brigands in tow_Linus Torvalds. And his system
|
||
was known as Linux: the free UNIX clone for the 386.
|
||
|
||
The author hopes that this book will bring the masses the god-
|
||
foot of that most miraculous of systems. Until recently only those
|
||
with a true aptitude for UNIX and, indeed, computers in gen-
|
||
eral have been able to take the plunge and run Linux on their
|
||
machines. We have braved the jungle of conflicting and obsolete
|
||
Linux documentation, and have fought with ardor to clear the path
|
||
for newcomers, those without the alleged software machete. But
|
||
trailblazing can only go so far. Sometimes it's best to burn down
|
||
the entire jungle and start anew. This manual is the result of this
|
||
destruction and rebirth.
|
||
|
||
Finally, the cowering bourgeois can install and run Linux on
|
||
almost any 386 or 486 based machine. Even those who have never
|
||
seen or touched the likes of UNIX before can immerse themselves
|
||
in the beauty of true multitasking, X Windows, TEX, and a myriad
|
||
of GNU software. And it doesn't cost a shilling_it is the free soft-
|
||
ware buff's dream. It is the chance for all of us UNIX-developer
|
||
wannabe's to get our hands dirty with kernel programming, port-
|
||
ing software, writing documentation, and fixing bugs. It is the
|
||
frustrated programmer's recluse from segmented memory and false
|
||
32-bit environments. It is the neophyte's escape from MS-DOS to
|
||
the Elysian Fields of UNIX, the future.
|
||
|
||
|
||
Audience
|
||
|
||
|
||
This book is for any personal computer user who wants to install
|
||
and use Linux on their system. We assume that you have basic
|
||
knowledge about personal computers and operating systems such
|
||
as MS-DOS. No previous knowledge about Linux or UNIX is as-
|
||
sumed.
|
||
|
||
|
||
Organization
|
||
|
||
|
||
This book contains the following chapters.
|
||
|
||
Chapter 1, Introduction, gives a general introduction to what
|
||
Linux is, what it can do for you, and what is required to run it on
|
||
your system.
|
||
|
||
Chapter 2, Getting Linux, explains how to obtain the Linux
|
||
software, either via U.S. Mail or from the Internet, via FTP. This
|
||
discussion focuses on the SLS distribution of Linux.
|
||
|
||
Chapter 3, Installing Linux, explains how to install the Linux
|
||
software, from repartitioning your drive, creating filesystems, and
|
||
loading the software on the system. Again, this discussion focuses
|
||
on the SLS distribution.
|
||
|
||
Chapter 4, Linux Tutorial, is a complete introduction to using
|
||
the Linux system for UNIX novices. If you have previous UNIX
|
||
experience, most of this material should be familiar.
|
||
|
||
Chapter 5, System Administration, introduces many of the im-
|
||
portant concepts of system administration under Linux. This will
|
||
also be of interest to UNIX system administrators who want to
|
||
know about the Linux-specific issues of running a system.
|
||
|
||
Chapter 6, Advanced Features, introduces the reader to a num-
|
||
ber of advanced features supported by Linux, such as the X Win-
|
||
dow System and TCP/IP networking.
|
||
|
||
Appendix A, Tips, Tricks, and Common Problems, contains
|
||
other information of interest to those setting up a new Linux sys-
|
||
tem, such as how to install Linux from the hard drive, and how to
|
||
set up Linux for use with multiple filesystems.
|
||
|
||
Appendix B, Bibliography and Sources of Information, is a list-
|
||
ing of other sources of information about Linux, including news-
|
||
groups, mailing lists, online documents, and books.
|
||
|
||
Appendix C, Quick FTP Tutorial, is a tutorial for downloading
|
||
files from the Internet with FTP. This appendix also includes a
|
||
listing of FTP archive sites which carry Linux software.
|
||
|
||
Appendix D, Linux BBS List, is a listing of bulletin board sys-
|
||
tems worldwide which carry Linux software. Because most Linux
|
||
users are do not have access to the Internet, it is important that
|
||
information on BBS systems becomes available.
|
||
|
||
Appendix E, The GNU General Public License, contains a copy
|
||
of the GNU GPL, the license agreement under which Linux is dis-
|
||
tributed. It is very important that Linux users understand the
|
||
GPL; many disagreements over the terms of the GPL have been
|
||
raised in recent months.
|
||
|
||
|
||
Acknowledgments
|
||
|
||
|
||
This book has been long in the making, and many people are re-
|
||
sponsible for the outcome. In particular, I would like to thank
|
||
Larry Greenfield and Karl Fogel for their work on the first version
|
||
of Chapter 4, and to Lars Wirzenius for his work on Chapter 5.
|
||
Thanks to Michael K. Johnson for his assistance with the LDP
|
||
and the LaTEX conventions used in this manual. I would also like
|
||
to thank Andy Oram, Lar Kaufman, and Bill Hahn at O'Reilly
|
||
and Associates for their assistance and interest in the Linux Doc-
|
||
umentation Project. And, of course, a special thanks to the many
|
||
activists, especially Linus Torvalds and Peter MacDonald, without
|
||
whom this would not have been possible.
|
||
|
||
In the last two years, we've seen Linux grow from a single hack-
|
||
er's operating systems programming project into a fully-functional
|
||
UNIX clone, with an expanding support base of software, users,
|
||
and programmers. Linux, as it stands now, is one of the greatest
|
||
accomplishments of free software in existence, and I can only antic-
|
||
ipate its further growth. I'd like to call it a revolution. I guess we'll
|
||
see. So, gentle reader, I give you Linux_soon to be your faithful
|
||
companion in the war against the wrath of proprietary operating
|
||
systems. Take no prisoners.
|
||
|
||
|
||
Matt Welsh
|
||
5 August 1993
|
||
|
||
|
||
Credits and Legalese
|
||
|
||
|
||
The Linux Documentation Project is a loose team of writers, proof-
|
||
readers, and editors who are working on a set of definitive Linux
|
||
manuals. The overall coordinator of the project is Matt Welsh,
|
||
aided by Lars Wirzenius and Michael K. Johnson.
|
||
|
||
This manual is but one in a set of several being distributed by
|
||
the Linux Documentation Project, including a Linux User's Guide,
|
||
System Administrator's Guide, and Kernel Hacker's Guide. These
|
||
manuals are all available in LaTEX source format and Postscript
|
||
output for anonymous FTP from tsx-11.mit.edu, in the directory
|
||
/pub/linux/ALPHA/LDP.
|
||
|
||
We encourage anyone with a penchant for writing or editing to
|
||
join us in improving Linux documentation. If you have Internet e-
|
||
mail access, you can join the DOC channel of the Linux-Activists
|
||
mailing list by sending mail to
|
||
|
||
|
||
linux-activists-request@niksula.hut.fi
|
||
|
||
|
||
with the line
|
||
|
||
|
||
X-Mn-Admin: join DOC
|
||
|
||
|
||
as the first line of the message body.
|
||
|
||
Feel free to get in touch with the author and coordinator of this
|
||
manual if you have questions, postcards, money, or ideas. Matt
|
||
Welsh can be reached via Internet e-mail at mdw@tc.cornell.edu,
|
||
and in real life at
|
||
|
||
|
||
205 Gray Street
|
||
Wilson, N.C. 27893
|
||
U.S.A.
|
||
|
||
|
||
UNIX is a trademark of Unix System Laboratories
|
||
Linux is not a trademark, and has no connection to UNIX[TM] or
|
||
Unix System Laboratories.
|
||
|
||
|
||
|
||
Copyright (c) 1993 Matt Welsh
|
||
205 Gray Street NE, Wilson NC, 27893 USA
|
||
mdw@tc.cornell.edu
|
||
|
||
|
||
|
||
Linux Installation and Getting Started may be reproduced and dis-
|
||
tributed in whole or in part, subject to the following conditions:
|
||
|
||
|
||
0. The copyright notice above and this permission notice must
|
||
be preserved complete on all complete or partial copies.
|
||
|
||
1. Any translation or derivative work of Linux Installation, Set-
|
||
up, and Getting Started must be approved by the author in
|
||
writing before distribution.
|
||
|
||
2. If you distribute Linux Installation and Getting Started in
|
||
part, instructions for obtaining the complete version of this
|
||
manual must be included, and a means for obtaining a com-
|
||
plete version provided.
|
||
|
||
3. Small portions may be reproduced as illustrations for reviews
|
||
or quotes in other works without this permission notice if
|
||
proper citation is given.
|
||
|
||
4. The GNU General Public License referenced below may be
|
||
reproduced under the conditions given within it.
|
||
|
||
5. Several sections of this document are held under separate
|
||
copyright. When these sections are covered by a different
|
||
copyright, the separate copyright is noted. If you distribute
|
||
Linux Installation and Getting Started in part, and
|
||
that part is, in whole, covered under a separate, not-
|
||
ed copyright, the conditions of that copyright apply.
|
||
|
||
|
||
Exceptions to these rules may be granted for academic purpos-
|
||
es: Write to Matt Welsh, at the above address, or email mdw@tc.cornell.edu,
|
||
and ask. These restrictions are here to protect us as authors, not
|
||
to restrict you as educators and learners.
|
||
|
||
|
||
|
||
All source code in Linux Installation and Getting Started is placed
|
||
under the GNU General Public License. See appendix E for a copy
|
||
of the GNU "GPL."
|
||
|
||
|
||
Documentation Conventions
|
||
|
||
|
||
These conventions should be obvious, but we'll include them here
|
||
for the pedantic.
|
||
|
||
|
||
Bold Used to mark new concepts, WARNINGS, and
|
||
keywords in a language.
|
||
|
||
|
||
italics Used for emphasis in text, and occasionally for
|
||
quotes or introductions at the beginning of a sec-
|
||
tion. Also used to indicate commands for the user
|
||
to type when showing screen interaction (see be-
|
||
low).
|
||
|
||
|
||
<slanted> Used to mark meta-variables in the text, espe-
|
||
cially in representations of the command line. For
|
||
example,
|
||
|
||
ls -l <foo>
|
||
|
||
where <foo> would "stand for" a filename, such as
|
||
/bin/cp.
|
||
|
||
|
||
Typewriter Used to represent screen interaction, as in
|
||
|
||
$ ls -l /bin/cp
|
||
-rwxr-xr-x 1 root wheel 12104 Sep
|
||
25 15:53 /bin/cp
|
||
|
||
Also used for code examples, whether it is C code,
|
||
a shell script, or something else, and to display
|
||
general files, such as configuration files. When nec-
|
||
essary for clarity's sake, these examples or figures
|
||
will be enclosed in thin boxes.
|
||
|
||
|
||
[Key] Represents a key to press. You will often see it in
|
||
this form:
|
||
|
||
Press [return] to continue.
|
||
|
||
|
||
|
||
|
||
|
||
Chapter 1
|
||
|
||
Introduction
|
||
|
||
|
||
|
||
This book is about Linux, the free clone of the UNIX operating
|
||
system for 80386 and 80486 machines. The rationale for writing
|
||
this manual is clear: as Linux has grown and gained popularity,
|
||
the old approach of searching a myriad of old documentation and
|
||
software, downloading megabytes of files, and hoping that every-
|
||
thing works is no longer adequate. Surprisingly, the number of
|
||
MS-DOS and OS/2 users who are moving to Linux is large, and
|
||
many of these users are new to UNIX. Here, rolled into one book,
|
||
is a complete guide to installing Linux, with enough introductory
|
||
material on using UNIX to get new users on their feet.
|
||
|
||
Linux is a clone of the UNIX operating system that runs on
|
||
Intel 80386 and 80486 based machines. It supports a wide range of
|
||
software, from TEX to X Windows to the GNU C/C++ compiler
|
||
to TCP/IP. It's a versatile, bona fide implementation of UNIX,
|
||
freely distributed by the terms of the GNU General Public License
|
||
(see Appendix E). Before we delve any further, a few words about
|
||
this book.
|
||
|
||
|
||
1.1 About This Book
|
||
|
||
|
||
In this manual, we'll cover:
|
||
|
||
|
||
o What Linux is;
|
||
|
||
o How to obtain and install Linux on your system;
|
||
|
||
o Getting started with Linux, even if you've never UNIX before;
|
||
|
||
o The basics of Linux system administration;
|
||
|
||
o An introduction to upgrading and installing new software.
|
||
|
||
|
||
This manual assumes no previous knowledge of Linux or UNIX.
|
||
Some experience with Intel-based personal computers is assumed,
|
||
and familiarity with MS-DOS or Microsoft Windows is helpful.
|
||
|
||
If you have previous UNIX experience, you may wish to skip
|
||
ahead to Chapter 2, "Getting Linux," and then read through Chap-
|
||
ter 3, "Installing Linux," and from there you're set. You may also
|
||
wish to read Chapter 6, discussing some of the more advanced and
|
||
interesting features of Linux. The rest of the manual covers issues
|
||
of concern to those new to UNIX.
|
||
|
||
|
||
1.2 Introduction to Linux and UNIX
|
||
|
||
|
||
UNIX is one of the most popular operating systems worldwide be-
|
||
cause of its large support base and distribution. It was originally
|
||
developed as a multitasking system for minicomputers and main-
|
||
frames in the mid-1970's, but has since grown to become one of the
|
||
most widely used operating systems anywhere, despite its some-
|
||
times confusing interface and lack of central standardization.
|
||
|
||
The real reason for UNIX's popularity? Many hackers feel that
|
||
UNIX is the Right Thing_the One True Operating System. Hence,
|
||
the development of Linux by an expanding group of UNIX hackers
|
||
who want to get their hands dirty with their own system. Doug
|
||
Gwyn said, "UNIX was never designed to keep people from doing
|
||
stupid things, because that policy would also keep them from doing
|
||
clever things." Most UNIX hackers would agree.
|
||
|
||
Versions of UNIX exist for many systems_ranging from person-
|
||
al computers to to supercomputers such as the Cray Y-MP. Most
|
||
versions of UNIX for personal computers are quite expensive and
|
||
cumbersome. At the time of this writing, a one-machine version of
|
||
AT&T's System V for the 386 runs at about US$1500.
|
||
|
||
|
||
1.2.1 Where Linux comes in
|
||
|
||
|
||
Linux is a freely distributable version of UNIX developed primarily
|
||
by Linus Torvalds (*Note: torvalds@kruuna.helsinki.fi.) at
|
||
the University of Helsinki in Finland. Linux was developed with
|
||
the help of many UNIX programmers and wizards across the In-
|
||
ternet, allowing anyone with enough know-how and gumption to
|
||
hack a custom UNIX kernel the ability to develop and change the
|
||
system. The Linux kernel uses no code from AT&T or any other
|
||
proprietary source, and much of the software available for Linux
|
||
is developed by the GNU project at the Free Software Foundation
|
||
in Cambridge, Massachusetts. However, programmers all over the
|
||
world have contributed to the growing pool of Linux software.
|
||
|
||
Linux supports almost all of the features of commercial ver-
|
||
sions of UNIX, as well as many not found on proprietary UNIX
|
||
systems. Furthermore, Linux is closely compatible with the IEEE
|
||
POSIX.1 standard, and has been developed with software porta-
|
||
bility in mind, thus supporting many important features of other
|
||
UNIX standards. Linux also utilizes all of your system's memory_
|
||
without memory limits or segmentation. The Linux system runs
|
||
exclusively in 80386's protected mode, which allows it to operate
|
||
as a true 32-bit operating system. A little-known fact about the
|
||
80386 and 80486 chips is that, internally, these processors were
|
||
designed to support multitasking systems such as UNIX. Unfortu-
|
||
nately, even MS-DOS 6.0 has yet to exploit these features.
|
||
|
||
There is a rumor abound that UNIX is a large, unwieldy system,
|
||
unapproachably hungry for resources such as disk space and mem-
|
||
ory. In Linux, the proof to dispell those myths was implemented.
|
||
Linux is small, fast, and flexible. It requires fewer resources than
|
||
IBM's OS/2, and uses less space than many MS-DOS or Microsoft
|
||
Windows systems including large applications (such as Microsoft
|
||
Word or Lotus 1-2-3). Linux has built-in support for networking,
|
||
multitasking, and other features which you'll see touted as "New
|
||
Technology" in systems such as in Windows NT. In fact, UNIX
|
||
(and now, Linux) has implemented this "New Technology" for well
|
||
over 15 years. The proprietary PC software industry is still catch-
|
||
ing up.
|
||
|
||
When using Linux, keep in mind that it is truly "a hacker's
|
||
operating system"_developed by and for UNIX hackers. This is
|
||
a strong distinction between commercial versions of UNIX, which
|
||
are designed for customers, not for hackers. Commercial versions
|
||
of UNIX are expected to work "out of the box". This is not the
|
||
case with Linux.
|
||
|
||
Because of this distinction, many newcomers get easily frustrat-
|
||
ed with Linux. The only problem is a lack of basic UNIX know-how.
|
||
Setting up and running your own UNIX system is something which
|
||
most UNIX users never get to do, even after years of experience.
|
||
Linux has provided UNIX newcomers the unique opportunity to
|
||
"do it yourself"_but nobody said it was going to be easy.
|
||
|
||
It takes a lot of time and effort to run your own UNIX system
|
||
(and a certain knack for fixing problems). Even with standard
|
||
Linux distributions, such as SLS, there are sometimes little quirks
|
||
which need to be fixed by hand in order for everything to work
|
||
correctly. If you have previous UNIX experience, it should be easy
|
||
to find these problems. However, if you're new to UNIX, it would
|
||
serve you well to read up on using and running a UNIX system
|
||
before you dive in.
|
||
|
||
Put simply, Linux isn't for everyone. Many users get in "over
|
||
their heads" when getting started with Linux. To keep your head
|
||
above water, we strongly encourage you to find a good book on
|
||
using UNIX, as well as a book on UNIX system administration. In
|
||
this manual, we include an introductory UNIX and system admin-
|
||
istration tutorial, but this is the bare minimum that is needed to
|
||
get started.
|
||
|
||
The Linux Documentation Project is working to solve this dilem-
|
||
ma. In the future, the LDP's Linux User's Guide and Linux System
|
||
Administration Guide will be available. Until then, you'll need to
|
||
rely on other sources.
|
||
|
||
See Appendix B for a list of relevant UNIX books and other
|
||
sources of information.
|
||
|
||
|
||
1.3 About Linux's Copyright
|
||
|
||
|
||
Linux is copyrighted under the GNU General Public License, some-
|
||
times called the GPL or copyleft. This license was developed by
|
||
the Free Software Foundation to allow programmers to write "free
|
||
software", where "free" refers to freedom, not just cost. The GPL
|
||
provides for the protection of such free software in a number of
|
||
ways. First of all, it allows the original author to retain the soft-
|
||
ware's copyright. Secondly, it allows others to take the software
|
||
and modify it, or base other programs on it. Thirdly, it allows
|
||
others to redistribute or resell the software, or modified versions of
|
||
the software. You can even resell the software for profit. However,
|
||
in reselling or redistributing the software, you cannot restrict any
|
||
of these rights from the party you're selling it to. Also, if you sell
|
||
the software, you have to provide at no cost the full source code so
|
||
that others can modify the software and resell it if they wish.
|
||
|
||
This might sound a bit silly at first. Why sell software for prof-
|
||
it, if someone else can give it away for free? Essentially, that's the
|
||
point. However, let's say someone bundles a large amount of free
|
||
software together on a CD-ROM and wishes to distribute it world-
|
||
wide. They'll probably need to charge for this service to cover their
|
||
cost and risk in distributing the software. Right now, several or-
|
||
ganizations are distributing Linux on CD-ROM, and making profit
|
||
from it. The original authors of the Linux software may never see
|
||
a penny of these revenues. This is allowed by the GNU GPL_
|
||
the point of free software isn't to make money; nobody's getting
|
||
ripped off. That's simply an understanding between the authors of
|
||
the software and those who are using it or selling it.
|
||
|
||
One other thing: Free software, as covered by the GNU G-
|
||
PL (which includes Linux), comes with absolutely no warranty.
|
||
However, individual vendors may provide support for the software,
|
||
which usually includes a warranty. However, unless you purchased
|
||
such support, the assumption is that the software comes with no
|
||
such warranty, and if you use a piece of free software which goes
|
||
haywire and wipes everything on your system, neither the authors
|
||
nor those that distributed the software to you are liable (*Note:
|
||
Hopefully, this won't happen.).
|
||
|
||
Free software as covered by the GPL is not shareware, nor is
|
||
it in the public domain. Neither of these terms correctly describe
|
||
what free software really is. The complete GNU GPL is printed in
|
||
Appendix E. To sum it all up, you can freely distribute Linux as
|
||
much as you like, and you can even modify it and distribute your
|
||
own version of Linux. But in doing so, you can't take away those
|
||
rights from others. Furthermore, you must attribute the original
|
||
authors of the work.
|
||
|
||
|
||
1.4 Features of Linux
|
||
|
||
|
||
Here are some of the benefits and features that Linux provides over
|
||
single-user operating systems (such as MS-DOS) and other versions
|
||
of UNIX for the PC.
|
||
|
||
|
||
o Full multitasking and 32-bit support. Linux, like all oth-
|
||
er versions of UNIX, is a real multitasking system, allowing
|
||
multiple users to run many programs on the same system at
|
||
once. The performance of a 50 MHz 486 system running Lin-
|
||
ux is comparable to many low- to medium-end workstations,
|
||
such as those from Sun Microsystems and DEC, running pro-
|
||
prietary versions of UNIX. Linux is also a full 32-bit operating
|
||
system, utilizing the special protected-mode features of the
|
||
Intel 80386 and 80486 processors.
|
||
|
||
o GNU software support. Linux supports a wide range of
|
||
free software written by the GNU Project, including utilities
|
||
such as the GNU C and C++ compiler, gawk, groff, and so
|
||
on. Many of the essential system utilities used by Linux are
|
||
GNU software.
|
||
|
||
o The X Window System. The X Window System is the
|
||
de facto industry standard graphics system for UNIX ma-
|
||
chines. A free version of The X Window System (known as
|
||
"Xfree86") is available for Linux. The X Window System is
|
||
a very powerful graphics interface, supporting many applica-
|
||
tions. For example, you can have multiple login sessions in
|
||
different windows on the screen at once. Other examples of
|
||
X Windows applications are Seyon, a powerful telecommuni-
|
||
cations program; Ghostscript, a PostScript language proces-
|
||
sor; and XTetris, an X Windows version of the popular game.
|
||
See Section 6.1 for an introduction to the X Window System.
|
||
|
||
o TCP/IP networking support. TCP/IP ("Transmission
|
||
Control Protocol/Internet Protocol") is the set of protocol-
|
||
s which links millions of university and business computers
|
||
into a worldwide network known as the Internet. With an
|
||
Ethernet connection, you can have access to the Internet or
|
||
to a local area network from your Linux system. Or, using
|
||
SLIP ("Serial Line Internet Protocol"), you can access the
|
||
Internet over the phone lines with a modem. Section 6.2 has
|
||
an introduction to configuring the Linux TCP/IP software.
|
||
|
||
o Virtual memory and shared libraries. Linux can use
|
||
a portion of your hard drive as virtual memory, expanding
|
||
your total amount of available RAM. Linux also implements
|
||
shared libraries, allowing programs which use standard sub-
|
||
routines to find the code for these subroutines in the libraries
|
||
at runtime. This saves a large amount of space on your sys-
|
||
tem, as each application doesn't store its own copy of these
|
||
common routines.
|
||
|
||
|
||
1.5 Hardware Requirements
|
||
|
||
|
||
Unlike some other versions of UNIX for the PC, Linux is very
|
||
small. You can run an entire system from a single high-density
|
||
5.25" floppy. However, to run a complete Linux system, there are
|
||
other hardware requirements, listed below.
|
||
|
||
Linux, by its very nature, is continuously expanding, and more
|
||
features are added every day. However, hardware compatibility
|
||
is limited to that hardware which the developers themselves have
|
||
access to. For instance, if none of the Linux developers has access
|
||
to the Foobaz Net-O-Driver 3000 card, then chances are it isn't
|
||
supported. On the other hand, there are many "generic" drivers_
|
||
for example, the IDE disk driver for Linux should work with all
|
||
IDE hard drives and adapters.
|
||
|
||
If your favorite peripheral isn't supported by Linux, all that's
|
||
required is to write a kernel driver for it. This may be easy or dif-
|
||
ficult, depending on the hardware and the technical specifications
|
||
that are available. For example, some hardware developers prefer
|
||
to write their own drivers for MS-DOS and Windows, and not re-
|
||
lease specifications for third parties to write their own. Therefore,
|
||
writing drivers for Linux will be difficult, if not impossible. (We call
|
||
this practice "bad business" for the hardware vendors involved.)
|
||
|
||
|
||
1.5.1 Suggested setup
|
||
|
||
|
||
Below, the suggested hardware configuration for Linux is listed. If
|
||
you're in the market for a new system, you should follow the recom-
|
||
mendations given below. In the next section, we'll talk about some
|
||
of the hardware drivers which are currently under development for
|
||
Linux, and other hardware which is known not to work.
|
||
|
||
|
||
o An Intel 80386 or 80486 based system. You don't need a
|
||
math coprocessor, although it's strongly recommended that
|
||
you have one. (If you have an 80386 chip, 80387 math copro-
|
||
cessors are available separately, and are installed in a socket
|
||
on your motherboard. If you have an 80486 processor, the
|
||
math coprocessor is on the 486 chip itself. The exception
|
||
is the 80486SX, which is a 486 chip without the coprocessor
|
||
components.) If you don't have a math coprocessor, the Lin-
|
||
ux kernel will emulate floating-point math for you. If you do
|
||
have one, however, floating point math will be handled by
|
||
the hardware, which for some applications is a real plus.
|
||
|
||
The 386SX, 486SX, and the accelerated 486DX and 486DX2
|
||
chips are all reported to work. It is suggested that you have
|
||
a genuine Intel processor, instead of a clone (such as a CTX
|
||
processor). Look for the "Intel Inside" logo on the machine.
|
||
The forthcoming Intel Pentium chip should work with Linux
|
||
without any changes.
|
||
|
||
o Your system must be either an ISA, EISA, or local bus ar-
|
||
chitecture machine. These terms specify how the CPU com-
|
||
municates with hardware, and are a characteristic of your
|
||
motherboard. Most existing systems use the ISA bus archi-
|
||
tecture. The EISA bus is a newer form of the ISA bus, which
|
||
is reportedly faster on some machines. Local bus architec-
|
||
ture is often the fastest of the three, as it allows the CPU
|
||
to communicate directly to video and drive adapters. If your
|
||
machine uses local bus, it is strongly recommended that it
|
||
comply with the VESA Local Bus standard (most local bus
|
||
systems do).
|
||
|
||
MicroChannel architecture (MCA) machines, such as the IBM
|
||
PS/2 line, are not currently supported.
|
||
|
||
o At least four megabytes of RAM. Technically, Linux is capa-
|
||
ble of running on a system with only two megabytes, however,
|
||
some distributions of Linux require four megabytes for instal-
|
||
lation. Memory is speed, so if you have more physical RAM
|
||
you'll thank yourself for it later. If you're a "power user,"
|
||
8 megabytes should be more than enough for most applications.
|
||
|
||
o An AT-standard compatible hard drive controller. This in-
|
||
cludes MFM, RLL, ESDI, and IDE controllers. Many SCSI
|
||
controllers are also supported. These terms specify the means
|
||
used to communicate with the hard drive through the con-
|
||
troller card; most controllers are either IDE or SCSI.
|
||
|
||
Drivers for XT-standard driver controllers are under devel-
|
||
opment; see the next section.
|
||
|
||
o A hard drive (compatible with your controller card, of course),
|
||
with free space available for installing Linux. The amount
|
||
of space required depends on the amount of software you're
|
||
installing and how much free space you wish to leave your-
|
||
self. If you only install a small amount of software, less than
|
||
10 megabytes is required. However, if you install a number
|
||
of optional software packages, including the X Window Sys-
|
||
tem, perhaps 80 megabytes or more, including space for users,
|
||
would be required. In addition, you will probably want to set
|
||
aside some amount of space on your drive as a swap partition,
|
||
used for virtual memory. This is covered in Chapter 3.
|
||
|
||
o A Hercules, CGA, EGA, VGA, or Super VGA video card and
|
||
monitor. In general, if your video card and monitor work
|
||
under MS-DOS or Microsoft Windows, then Linux should be
|
||
able to use them without any problem. However, if you're go-
|
||
ing to use the X Window System, there are certain hardware
|
||
configurations which are not yet supported. See Section 6.1
|
||
for more.
|
||
|
||
|
||
1.5.2 Other hardware
|
||
|
||
|
||
There are other hardware drivers currently under development for
|
||
Linux. However, to use these drivers, you usually have to patch
|
||
them into your kernel code, which assumes that you already have
|
||
a running Linux system.
|
||
|
||
The Linux FAQ has information on patching in hardware driver-
|
||
s with Linux. See Appendix B for more information.
|
||
|
||
Linux will also run on a number of laptop machines (some lap-
|
||
tops use certain software interrupts to power the memory, and Lin-
|
||
ux doesn't cooperate with these systems, yet). The best way to find
|
||
out if Linux will run on your hardware is just to try it out.
|
||
|
||
|
||
1.6 Before You Get Started
|
||
|
||
|
||
Assuming that you have hardware compatible with Linux, obtain-
|
||
ing and installing the system is not difficult. However, there are
|
||
a number of burning questions which most users want answers to
|
||
before they dive in.
|
||
|
||
|
||
1.6.1 Running other operating systems with Linux
|
||
|
||
|
||
You can install other operating systems, such as MS-DOS or OS/2,
|
||
along with Linux on the same machine. Each operating system uses
|
||
its own partitions on the hard drive, and they do not interfere with
|
||
each other. For example, if you want to install both MS-DOS and
|
||
Linux on the same drive, fine. However, MS-DOS will use one
|
||
partition on the drive, and Linux will use another. Partitioning
|
||
your drive for use with Linux is covered in Section 3.2.3.
|
||
|
||
To select which operating system to run at boot time, you can
|
||
install LILO, a program which replaces the standard MS-DOS boot
|
||
loader on your hard drive. With LILO installed, at boot time you
|
||
select the operating system to run from a simple menu. Or, you
|
||
can set a default operating system to boot, and override the default
|
||
by holding down the [shift] key as the system is booting. LILO is
|
||
covered in detail in Section 5.2.2.
|
||
|
||
Alternately, if you use OS/2, you can boot Linux from the OS/2
|
||
Boot Manager. See Section 5.2.2 for more information.
|
||
|
||
|
||
1.6.2 Accessing files from MS-DOS
|
||
|
||
|
||
Linux supports several features which will allow you to access y-
|
||
our MS-DOS files from Linux. The mtools package, included with
|
||
most distributions of Linux, allows you to use commands such as
|
||
mcopy and mdir to access your MS-DOS files. Or, you can mount
|
||
an MS-DOS partition or floppy directly under Linux, giving you
|
||
direct access to your files using the MS-DOS filesystem. (See Sec-
|
||
tion 6.1.6.)
|
||
|
||
There is also an MS-DOS Emulator available for Linux, and
|
||
work is beginning on a Microsoft Windows emulator to run under
|
||
the X Window System. The MS-DOS Emulator isn't perfect; don't
|
||
expect to play Wing Commander from Linux. However, it will
|
||
enable you to run many standard MS-DOS applications, such as
|
||
Wordperfect or Lotus 1-2-3. Watch out, Microsoft!
|
||
|
||
|
||
1.6.3 How to pronounce Linux
|
||
|
||
|
||
Pronouncing the word "Linux" is one of the great mysteries of the
|
||
Linux world. Americans pronounce the name Linus with a long i
|
||
sound, as in pie. However, because Linux was originally based on
|
||
a small, PC-based implementation of UNIX called "Minix" (pro-
|
||
nounced with a short i ), the actual pronunciation of Linux pre-
|
||
serves this characteristic_it's LIH-nucks. Think Finnish.
|
||
|
||
|
||
1.7 Finding Help
|
||
|
||
|
||
There are many people out there who enjoy helping new users get
|
||
started with Linux. If you have any problems with installing or us-
|
||
ing the system, the first thing you should do is consult this manual
|
||
(and the other Linux manuals) to see if your problem is covered
|
||
there. Another good source of information is the Linux Frequently
|
||
Asked Questions list, which covers many disparate topics not in
|
||
this manual. Appendix B for information on the Linux FAQ and
|
||
other sources of information.
|
||
|
||
If you have access to USENET news, you can post questions
|
||
to the newsgroup comp.os.linux. The moderated newsgroup
|
||
comp.os.linux.announce is also available for announcements and
|
||
important information. However, it's strongly suggested that you
|
||
read all of the available documentation before posting questions;
|
||
most problems are covered in this manual and the Linux FAQ list.
|
||
|
||
You can also direct questions about this manual, or Linux in
|
||
general, to the authors of this book. We're very open to any
|
||
questions, comments, or suggestions. Matt Welsh can be reached
|
||
on the Internet at mdw@tc.cornell.edu and Lars Wirzenius at
|
||
wirzeniu@cc.helsinki.fi.
|
||
|
||
|
||
|
||
|
||
Chapter 2
|
||
|
||
Getting Linux
|
||
|
||
|
||
|
||
This chapter covers how to obtain the Linux software. If you re-
|
||
ceived this manual with a set of Linux software, on disk or CD-
|
||
ROM, then you can go ahead and skip to Chapter 3 on installing
|
||
the system.
|
||
|
||
|
||
2.1 Distributions of Linux
|
||
|
||
|
||
There is no single, "official" release of the Linux software. In fact,
|
||
there are many releases, each independently coordinated by various
|
||
companies and individuals. While these releases differ somewhat in
|
||
their goals and specifications, each release has a number of elements
|
||
in common with the rest:
|
||
|
||
|
||
o The Linux kernel_the lowest level program of the Linux
|
||
system, the operating system itself. The kernel is constantly
|
||
running, handling the low-level details of memory manage-
|
||
ment, process scheduling, device access, and so on. In any
|
||
UNIX system, the kernel is the software which controls ac-
|
||
cess to system resources (such as memory and processor time)
|
||
from user programs (such as a text editor). This is in sharp
|
||
contrast to operating systems such as MS-DOS, which allow
|
||
only a single program to run at a time.
|
||
|
||
o A set of utilities which handle basic system tasks such as
|
||
manipulating files, creating users, reporting system activity,
|
||
and so on. These programs are essentially the same on any
|
||
UNIX system, and provide a standard interface for users. For
|
||
example, the command to copy a file on all UNIX systems is
|
||
known as cp. Therefore, using Linux will be very similar, if
|
||
not identical, to using other versions of UNIX.
|
||
|
||
o The system libraries, which contain common subroutines
|
||
used by software to handle everything from file I/O to dis-
|
||
playing graphics. Linux implements shared libraries, which
|
||
allow programs to share the code in these subroutines, reduc-
|
||
ing the size of program binaries significantly.
|
||
|
||
o A set of system configuration files, containing information
|
||
about the users on the system, available devices, network
|
||
interface configuration, and so on. Many individual applica-
|
||
tions also have their own set of configuration files.
|
||
|
||
o Online documentation, in the form of manual pages (often
|
||
abbreviated as "man pages"). Man pages document the com-
|
||
mands, library routines, kernel system calls, file formats, and
|
||
device driver interfaces available on the system. They are an
|
||
excellent source of online help and are easy to use. The man
|
||
pages available for Linux are incomplete, but most of the im-
|
||
portant system commands and library calls are documented.
|
||
|
||
o And, of course, application software. There are many appli-
|
||
cations available for Linux, such as TEX (a document pro-
|
||
cessing system), Emacs (a powerful yet baroque text editor),
|
||
the X Window System (a graphics interface), and more.
|
||
|
||
|
||
The application software is what really composes the Linux
|
||
system from the user's point of view. However, it is all of these
|
||
elements combined which form the entire system. As mentioned
|
||
before, there isn't a single official distribution for all of this soft-
|
||
ware. There are many distributions available_each of which differ
|
||
somewhat in their installation methods and supported software,
|
||
but all of which contain the essential elements listed above.
|
||
|
||
In this book, we focus on the Softlanding Linux System (SLS)
|
||
distribution of Linux. SLS has become the de facto standard for
|
||
Linux installations worldwide. Because of its completeness and
|
||
ease of use, we will only cover how to get and install the SLS
|
||
distribution here.
|
||
|
||
We don't mean to be biased towards a particular release; how-
|
||
ever, it takes a lot of time and effort to keep up with all of the Linux
|
||
distributions available. However, all of the concepts discussed in
|
||
this book apply to Linux distributions other than SLS.
|
||
|
||
|
||
2.2 The SLS Distribution
|
||
|
||
|
||
The Linux distribution that many people have installed is known as
|
||
the Softlanding Linux System ("SLS") distribution. SLS is coordi-
|
||
nated by Peter MacDonald (*Note: pmacdona@sanjuan.uvic.ca.),
|
||
and has become the most widely-used release of Linux, because of
|
||
its completeness and ease of installation.
|
||
|
||
The SLS distribution is broken into various sets of disks, each
|
||
of which is denoted by a letter followed by a disk number. For
|
||
example, the a series disks are numbered a1, a2, a3, and a4. The
|
||
disk series in the current SLS distribution are shown below.
|
||
|
||
|
||
o a1-a4: The minimal base system, required. Contains the
|
||
Linux kernel, libraries, basic binaries, and tools used to set
|
||
up and install the system.
|
||
|
||
o b1-b7: Base system extras, such as man pages, Emacs, and
|
||
so on.
|
||
|
||
o c1-c3: Compilers, such as gcc, p2c, f2c, and others.
|
||
|
||
o x1-x10: The X Window System and related software.
|
||
|
||
o t1-t3: TEX, a document formatting system.
|
||
|
||
o s1: Source code for several of the packages. Currently under
|
||
development.
|
||
|
||
o d1-d2: Documentation for various things.
|
||
|
||
|
||
As more packages are added to SLS, new series are added, or
|
||
extra disks are added to the existing series.
|
||
|
||
The only set of disks which you must install are the a set.
|
||
However, you should probably install at least the b and c disk sets
|
||
as well, which contain the full base system and compilers. For
|
||
X Windows (see Section 6.1) you should install the x series in
|
||
addition to a, b, and c.
|
||
|
||
It is easy to upgrade your software with the SLS distribution.
|
||
For example, you could install only the a and b series, and install
|
||
the c and x series at another time. Therefore, you may wish to
|
||
only install the SLS a series at first, to try out a minimal system,
|
||
and install the rest later.
|
||
|
||
The amount of disk space required for installing the SLS release
|
||
depends on how many of the series you install. Table 2.1 summa-
|
||
rizes the disk space requirements for installing each SLS package.
|
||
|
||
|
||
Package Disk series Approximate space requirements
|
||
------------ -------------------- ------------------------------------
|
||
Tiny a 15 megabytes
|
||
Base a, b, c 45 megabytes
|
||
Main a, b, c, x 70 megabytes
|
||
Full a, b, c, x, d, s, t 90 megabytes
|
||
|
||
|
||
Table 2.1: SLS Disk Space Requirements
|
||
|
||
Also keep in mind that in addition to the space requirements
|
||
listed in Table 2.1, you'll need to set aside extra space for swap
|
||
(see Section 3.2.3) and for user accounts, free space to install new
|
||
software, and so on.
|
||
|
||
|
||
2.2.1 Getting SLS from the Internet
|
||
|
||
|
||
If you have access to the Internet, you can download the SLS distri-
|
||
bution via FTP from a number of sites. If you've never used FTP
|
||
before, see Appendix C for a quick tutorial. If you don't have In-
|
||
ternet access, you can get SLS either via mail or from a number of
|
||
BBS's worldwide; see sections 2.2.2 and 2.3 for more information.
|
||
|
||
|
||
2.2.1.1 Downloading the files
|
||
|
||
|
||
The two primary FTP sites from which to obtain the SLS distri-
|
||
bution are tsx-11.mit.edu and sunsite.unc.edu. In addition, a
|
||
large number of FTP sites around the world mirror these two_see
|
||
Appendix C for a listing of Linux FTP sites.
|
||
|
||
The SLS release is kept in the directory /pub/linux/SLS on
|
||
tsx-11.mit.edu, and in /pub/Linux/SLS on sunsite.unc.edu
|
||
(note that the filenames are case-sensitive).
|
||
|
||
You should download the following files. Be sure to use binary
|
||
mode when downloading them.
|
||
|
||
|
||
o If you boot from a 3.5" floppy, download the file a1.3. If you
|
||
boot from a 5.25" floppy, download a1.5 instead. These files
|
||
are images of the SLS a1 disk which is used for booting the
|
||
system (*Note: Some FTP sites have the files a1.3.Z and
|
||
a1.5.Z instead. These are compressed images of the a1 disk;
|
||
you'll need to use the UNIX uncompress command to uncom-
|
||
press it. We've requested that FTP sites leave the files a1.3
|
||
and a1.5 uncompressed for this step to be unnecessary for
|
||
those downloading to a non-UNIX machine; both tsx-11 and
|
||
sunsite should have them both in uncompressed format.).
|
||
|
||
Hereafter, we'll be referring to the files a1.3 and a1.5 simply
|
||
as "a1"_because you'll only be downloading one or the other.
|
||
|
||
o rawrite.exe: A DOS program to "raw write" a given file,
|
||
block by block, to an MS-DOS formatted floppy. You will
|
||
use rawrite to create the a1 disk.
|
||
|
||
Note that rawrite.exe may not be in the SLS directory,
|
||
but it should be somewhere nearby on the FTP site. On
|
||
sunsite.unc.edu, rawrite is found in:
|
||
|
||
/pub/Linux/SLS/DOSUTILS/rawrite2.exe
|
||
|
||
On tsx-11.mit.edu, rawrite is found in:
|
||
|
||
/pub/Linux/INSTALL/dos_utils/rawrite.exe
|
||
|
||
o The files in the a2, a3 and a4 directories. Be sure to keep
|
||
these files in separate directories when you download them.
|
||
Later, you'll simply copy these files to MS-DOS floppies, but
|
||
you don't want to get the a2, a3 and a4 files mixed up.
|
||
|
||
o If you plan to get any of the other series, you need to down-
|
||
load the files in their corresponding directories. For example,
|
||
if you're downloading the b disk series, grab the files in the
|
||
directories b1 through b7. As with a2 through a4, keep the
|
||
files in each directory separate as you download them.
|
||
|
||
o The files SLS.FAQ and SLS.README, which are text files giving
|
||
important information about the current release of SLS.
|
||
|
||
|
||
2.2.1.2 Transferring the files to MS-DOS
|
||
|
||
|
||
Once you have these files, transfer all of them to an MS-DOS sys-
|
||
tem, in order to create the installation disks (*Note: If you have
|
||
access to a UNIX machine with a floppy drive, you can create the
|
||
installation disks from there. See Section A.4.).
|
||
|
||
If you did not FTP the files directly to an MS-DOS system,
|
||
you may need to ask your local computer guru for information on
|
||
transfering the files to MS-DOS. The methods used to do this vary
|
||
from site to site.
|
||
|
||
|
||
2.2.1.3 Making the installation disks
|
||
|
||
|
||
To create the installation disks, you'll be using rawrite.exe as well
|
||
as the MS-DOS COPY command. First, be sure that you have one
|
||
MS-DOS formatted, blank floppy for each disk in the SLS series
|
||
that you downloaded (*Note: It is possible to install SLS directly
|
||
from your hard drive, instead of from floppies. See Section A.1
|
||
for more information.). All of the floppies must be formatted high
|
||
density (either 1.2Mb 5.25" or 1.44Mb 3.5").
|
||
|
||
The floppy used for the a1 disk must be the type of floppy that
|
||
you boot from on your system. To create the a1 disk, run the
|
||
command
|
||
|
||
|
||
C:\> rawrite
|
||
|
||
|
||
from MS-DOS. You should see something like
|
||
|
||
|
||
RaWrite 1.2 - Write disk file to raw floppy diskette
|
||
|
||
Enter source file name:
|
||
|
||
|
||
Specify the filename that you wish to rawrite (such as a1.3 or
|
||
a1.5), followed by the drive that you wish to write it to (either A:
|
||
or B:).
|
||
|
||
|
||
Enter source file name: a1.5
|
||
|
||
Enter destination drive: A:
|
||
|
||
Please insert a formatted diskette into drive A: and press
|
||
-ENTER- :
|
||
|
||
|
||
Press [return] and rawrite will copy the file to the disk in the
|
||
specified drive.
|
||
|
||
|
||
Number of sectors per track for this disk is 15
|
||
Writing image to drive A:. Press ^C to abort.
|
||
Track: 00 Head: 0 Sector: 1
|
||
...
|
||
Done.
|
||
|
||
|
||
Once rawrite is done, the floppy will no longer be accessible by
|
||
MS-DOS. The floppy has been completely overwritten with the a1
|
||
image, and is now a "Linux-format" floppy.
|
||
|
||
If you have problems with rawrite, make sure that the floppy is
|
||
MS-DOS formatted, high density. If the floppy has any bad sectors
|
||
you may just need to use another disk.
|
||
|
||
|
||
The rest of the disks are created using the MS-DOS copy com-
|
||
mand. All of these disks must be of the same type (either 3.5" or
|
||
5.25") and must be high-density MS-DOS formatted as well. Copy
|
||
all of the files from the a2 directory to a floppy labeled a2. For
|
||
example,
|
||
|
||
For example,
|
||
|
||
|
||
C:\A2> copy *.* A:
|
||
|
||
|
||
will copy all of the files in the directory C:\A2 to the disk in A:.
|
||
|
||
Repeat the procedure for the rest of the disks in the SLS dis-
|
||
tribution. Remember that you must have at least a1 through a4.
|
||
After you are finished creating the disks, you can install the soft-
|
||
ware. This is covered in Chapter 3.
|
||
|
||
|
||
2.2.2 Getting SLS via U.S. Mail
|
||
|
||
|
||
The SLS distribution is also available on floppy via U.S. Air or
|
||
Land mail. A small fee is charged on a per-disk basis, but this fee
|
||
is nominal and more than worth the service. This is a reliable way
|
||
to get the SLS distribution, even if you do have network access_it
|
||
saves you a lot of time downloading and creating the disks yourself.
|
||
|
||
To order, send a check or money order to:
|
||
|
||
|
||
Softlanding Software
|
||
910 Lodge Ave.
|
||
Victoria, B.C., Canada
|
||
V8X-3A8
|
||
|
||
|
||
By the beginning of 1993, they hope to take Visa and/or Mas-
|
||
tercard orders by telephone. Their number is +1 604 360 0188.
|
||
They do take international orders, so if you're not in the States
|
||
or Canada you can still get the SLS distribution by mail from this
|
||
address.
|
||
|
||
The charge is on a per disk basis. The complete distribution
|
||
(that is, all of the a, b, c, x, and t series) is currently 29 disks, but
|
||
more disks are added to the distribution on occasion.
|
||
|
||
The copying charge is $3.25/disk US ($4.00/disk Canadian).
|
||
For 3.5" disks, add $1.00/disk. There is also a $10.00 shipping and
|
||
handling charge. Table 2.2 summarizes the various packages and
|
||
prices.
|
||
|
||
|
||
Package #Disks Series 5.25" Disks 3.5" Disks
|
||
-------- ------- --------- ------------------------ ------------------------
|
||
Tiny 4 a US $23.00 (CDN $26.00) US $27.00 (CDN $30.00)
|
||
Base 16 a,b,c US $62.25 (CDN $74.00) US $78.00 (CDN $90.00)
|
||
Main 24 a,b,c,x US $88.00 (CDN $106.00) US $112.00 (CDN $130.00)
|
||
Full 29 a,b,c,x,t US $104.25 (CDN $126.00) US $133.25 (CDN $155.00)
|
||
|
||
Table 2.2: SLS by-mail disk prices
|
||
|
||
|
||
2.3 Getting Linux from BBSs
|
||
|
||
|
||
Using a modem and standard communications software, you can
|
||
also download Linux from a number of bulliten board systems (BB-
|
||
Ss) worldwide. You'll likely find a version of the SLS distribution
|
||
on these BBS sites, with each disk image packed into a PKZIP
|
||
.zip archive file. The PKUNZIP utility, used to unpack these files
|
||
before you transfer the files to floppies, should be easy to locate
|
||
(perhaps on the BBS itself).
|
||
|
||
For the most part, you can follow the directions for creating the
|
||
SLS floppies in Section 2.2.1.3 once you have downloaded the files.
|
||
Just be sure that the files on the a2, a3, etc. disks are expanded_
|
||
in other words, the SLS a2 contains a number of .tgz files. If
|
||
you download a single a2.zip from the BBS, you may need to use
|
||
PKUNZIP to get those .tgz files before you place them on the
|
||
floppy.
|
||
|
||
In any case, there should be a README describing how to load
|
||
and install the release of Linux found on the BBS. What version
|
||
and distribution of Linux you find on these BBS's is really up in the
|
||
air_we can make no guarantees that you'll find a particular release
|
||
in a particular format, or that the files on the BBS are up-to-date.
|
||
Every BBS is different.
|
||
|
||
If you're unfamiliar with downloading files from BBS's, it's real-
|
||
ly quite simple. You need a modem and communications software,
|
||
to begin with. The communications software should come with
|
||
complete instructions on how to dialup a BBS and how to down-
|
||
load software_the mechanism differs greatly depending on your
|
||
modem and your software. If all else fails, have a computer guru
|
||
near you show you how it's done.
|
||
|
||
Printed in Appendix D is a list of BBS sites which carry Linux
|
||
software. You should be able to find a BBS within reasonable
|
||
calling distance. If not, and if you don't have Internet access of
|
||
some kind, you may want to consider ordering the SLS distribution
|
||
of Linux via mail. See Section 2.2.2 for details.
|
||
|
||
|
||
|
||
|
||
Chapter 3
|
||
|
||
Installing Linux
|
||
|
||
|
||
|
||
In this chapter, we'll go through the steps of installing Linux, from
|
||
repartitioning your drive, to setting up the Linux filesystems, to
|
||
actually installing the software.
|
||
|
||
As you're partitioning your drive and installing Linux, it's al-
|
||
ways a good idea to take notes of every command you type and
|
||
what goes on during the process, just so you have something to
|
||
refer to when you run into those inevitable problems. Trust me;
|
||
it's worth the time it takes just to jot down notes while installing,
|
||
especially if you're a newcomer to Linux. If you have problems lat-
|
||
er and have to ask for help, having a list of exactly what commands
|
||
you typed and what the results were will be invaluable.
|
||
|
||
|
||
3.1 SLS installation overview
|
||
|
||
|
||
This is an overview of installing the SLS release of Linux. As
|
||
mentioned before, the basic ideas are applicable to distributions
|
||
other than SLS as well.
|
||
|
||
To install the SLS release, you're doing to do the following:
|
||
|
||
o Backup any software (for MS-DOS, OS/2, etc.) on your sys-
|
||
tem. (Section 3.2.3.)
|
||
|
||
o Repartition your drive to allocate space for Linux. (Sec-
|
||
tion 3.2.3.)
|
||
|
||
o Reinstall the original software on your system. (Section 3.2.3.)
|
||
|
||
o Boot the SLS a1 disk, and create partitions for Linux. (Sec-
|
||
tion 3.3.4.)
|
||
|
||
o Create filesystems on those partitions. (Section 3.3.7.)
|
||
|
||
o Finally, install the software. (Section 3.4.)
|
||
|
||
|
||
3.2 Repartitioning your Drive
|
||
|
||
|
||
As we have mentioned, in order to allocate space for Linux on your
|
||
hard drive(s), you'll need to repartition the drive(s), resizing any
|
||
existing partitions.
|
||
|
||
Until now, most users of 386 and 486 systems haven't had to
|
||
worry about partitioning their hard drive, or even running more
|
||
than one operating system on the same drive (unless you're an
|
||
OS/2 user). Thus, some explanation of hard drives and partitions
|
||
is probably in order.
|
||
|
||
|
||
3.2.1 Hard drive geometry
|
||
|
||
|
||
A typical hard drive consists physically of one or more circular
|
||
platters which rotate about a central axis. The read/write heads
|
||
move to specified place on the disk surface to access information.
|
||
There is typically one head on each side of every platter, which all
|
||
move in unison back and forth across the platter (that is, either
|
||
closer to the center of the disk, or closer to the outer edge).
|
||
|
||
The drive platters are divided into cylinders, which is the area
|
||
of each platter which can be accessed without moving the heads.
|
||
A cylinder is a barrel-shaped cross section of a disk, consisting of a
|
||
circular strip from each side of each platter. The part of a cylinder
|
||
which is the circular strip on a single platter is called a track.
|
||
|
||
Thus, if there are 3 platters in a given drive (stacked on each
|
||
other, like a sandwich), then you have a read/write head on each
|
||
side of each platter, to make up 6 heads. (In actuality, the outer
|
||
surface of the outermost platters don't usually have heads accessing
|
||
them, so in this case you'll have only 4 heads.)
|
||
|
||
Thus if you position the heads at a single radius from the center
|
||
of the disk, the area which they can access by rotating the platters
|
||
is one cylinder. A track is the area which one head can access.
|
||
Thus, for our drive with 4 heads, there are 4 tracks per cylinder.
|
||
|
||
Each track is divided into a number of pie-shaped sliced called
|
||
sectors, which are the smallest parts of the disk which can be read
|
||
or written at one time.
|
||
|
||
Therefore, the geometry of the disk is specified as
|
||
|
||
o The number of cylinders that the disk contains;
|
||
|
||
o The number of tracks per cylinder (same as the number of
|
||
heads);
|
||
|
||
o The number of sectors per track; and,
|
||
|
||
o The size of each sector (in bytes).
|
||
|
||
|
||
Some of these numbers will vary, but a typical disk might have
|
||
about 1000 cylinders, 6 heads, 15 or 20 sectors per track, and each
|
||
sector containing 512 bytes. The size of the disk is
|
||
|
||
(1000 cylinders) * (6 tracks per cylinder) * (15 sectors per
|
||
track) * (512 bytes per sector)
|
||
|
||
or 46,080,000 bytes (about 46 megs).
|
||
|
||
|
||
3.2.2 Partitions
|
||
|
||
|
||
Hard drives are divided into one or more partitions which are
|
||
sections of the hard drive set aside for some operating system to
|
||
use. The concept of a partition allows you to have, for instance,
|
||
MS-DOS running on one partition on your hard drive, and Linux
|
||
on another.
|
||
|
||
Many MS-DOS systems have only a single partition taking up
|
||
the entire drive. To MS-DOS, this partition is known as C:. If you
|
||
have more than one partition on your drive, MS-DOS names them
|
||
D:, E:, and so on. In a way, each partition acts like a separate hard
|
||
drive.
|
||
|
||
On the the first cylinder, first head, and first sector of the disk
|
||
is a 1-sector master boot record along with a partition table.
|
||
The boot record (as the name implies) is used to boot the system.
|
||
The partition table contains information about the locations and
|
||
sizes of your partitions.
|
||
|
||
There are three kinds of partitions: primary, extended, and
|
||
logical. Of these primary partitions are by far used most often.
|
||
However, because of a limit in the size of the partition table, you
|
||
can only have 4 primary partitions on any given drive.
|
||
|
||
The way around this 4 partition limit is to use an extended
|
||
partition. An extended partition doesn't hold any data by itself;
|
||
instead, it acts as a "container" for logical partitions. Therefore,
|
||
you could create one extended partition, covering the entire drive,
|
||
and within it create several logical partitions. However, you may
|
||
have only one extended partition per drive.
|
||
|
||
|
||
3.2.3 Resizing your current partitions
|
||
|
||
|
||
If your hard drive is currently taken up by partitions for other
|
||
operating systems, you'll need to delete and resize those partitions
|
||
to allocate space for Linux. If you don't have any other operating
|
||
systems installed (you're installing Linux on a clean system), you
|
||
can skip to Section 3.3.
|
||
|
||
There isn't any safe or reliable way to resize an existing partition
|
||
without deleting it. Therefore, before repartitioning your drive,
|
||
backup your system. After you have repartitioned the drive, you
|
||
can reinstall your original software from the backups. Also keep in
|
||
mind that because you'll be shrinking your original partitions, you
|
||
may not have space to reinstall everything.
|
||
|
||
How much space should you leave free for Linux? This depends
|
||
greatly on how much software you're installing, and how much free
|
||
space you want to leave yourself. In Section 3.3.2 we'll cover this
|
||
in detail.
|
||
|
||
Under MS-DOS, the program used to modify partitions is FDISK
|
||
(*Note: Instructions for modifying partitions for operating systems
|
||
other than MS-DOS are similar to those presented here. Refer
|
||
to the documentation for those systems, if applicable.) In order
|
||
to repartition, you should create an MS-DOS bootable "system
|
||
disk" which contains all of the necessary DOS utilities, including
|
||
FDISK.EXE and FORMAT.COM (*Note: You can format an MS-DOS
|
||
system disk with the command format /s A:.). Boot from this
|
||
disk, and run FDISK.
|
||
|
||
Use of FDISK should be self-explanatory, but consult your MS-
|
||
DOS documentation for details. When you start FDISK, use the
|
||
menu option to display the partition table, and write down the
|
||
information displayed there. It is important to keep a record of your
|
||
original setup in case you want to back out of the Linux installation.
|
||
|
||
To delete an existing partition, choose the fdisk menu option to
|
||
Delete an MS-DOS Partition or Logical DOS Drive. Specify
|
||
the type of partition that you wish to delete (primary, extended, or
|
||
logical) and the number of the partition. Verify all of the warnings.
|
||
Poof!
|
||
|
||
To create a new (smaller) partition for MS-DOS, just choose the
|
||
fdisk option Create an MS-DOS Partition or Logical DOS Drive.
|
||
Specify the type of partition (primary, extended, or logical), and
|
||
the size of the partition to create (specified in megabytes). fdisk
|
||
should create the partition and you're ready to roll.
|
||
|
||
|
||
After you're done using fdisk, you should exit the program and
|
||
reformat the new partition(s). For example, if you resized the first
|
||
DOS partition on your drive (C:) you should run the command
|
||
|
||
|
||
format /s C:
|
||
|
||
|
||
You may now reinstall your original software from backup.
|
||
|
||
A warning: When repartitioning, you should only use the ver-
|
||
sion of fdisk for the operating system that you are manipulating
|
||
partitions for. That is, you should not use MS-DOS's fdisk to
|
||
make partitions for Linux, and vice versa. In some cases, doing
|
||
so won't cause any damage, but will cause MS-DOS not to boot
|
||
correctly. For manipulating MS-DOS partitions, use MS-DOS's
|
||
version of fdisk, and for Linux partitions use Linux's version of
|
||
fdisk.
|
||
|
||
|
||
3.3 Creating your Linux Partitions and Filesystems
|
||
|
||
|
||
Setting up partitions for Linux is very similar to setting them up
|
||
for other operating systems such as MS-DOS. To create your Linux
|
||
partitions, you use the Linux version of the fdisk program. After
|
||
you create the partitions, you create filesystems on them, which
|
||
allows them to be used by the Linux system. Making a filesystem
|
||
is analogous to "formatting" a partition under MS-DOS.
|
||
|
||
Because your swap partition doesn't hold files, we call preparing
|
||
it "making the swap space".
|
||
|
||
|
||
3.3.1 Drives and partitions under Linux
|
||
|
||
|
||
Drives and partitions under Linux are given different names than
|
||
their MS-DOS counterparts. Under MS-DOS, floppy drives are
|
||
referred to as A: and B:, while hard drive partitions are named
|
||
C:, D:, and so on. Under Linux, the naming convention is quite
|
||
different, but easier to comprehend.
|
||
|
||
Device drivers, found in the directory /dev, are used to com-
|
||
municate with devices on your system (such as hard drives, mice,
|
||
and so on). For example, if you have a mouse on your system,
|
||
access to it is through the driver /dev/mouse.
|
||
|
||
Floppy drives, hard drives, and individual partitions are all
|
||
given device drivers through which you access them. Table 3.1
|
||
lists the names of these various device drivers.
|
||
|
||
|
||
Device Name
|
||
--------------------------------------------------- --------------
|
||
First floppy (A:) /dev/fd0
|
||
Second floppy (B:) /dev/fd1
|
||
First hard drive (entire drive) /dev/hda
|
||
First hard drive, primary partition 1 /dev/hda1
|
||
First hard drive, primary partition 2 /dev/hda2
|
||
First hard drive, primary partition 3 /dev/hda3
|
||
First hard drive, primary partition 4 /dev/hda4
|
||
First hard drive, logical partition 1 /dev/hda5
|
||
First hard drive, logical partition 2 /dev/hda6
|
||
.
|
||
.
|
||
.
|
||
Second hard drive (entire drive) /dev/hdb
|
||
Second hard drive, primary partition 1 /dev/hdb1
|
||
.
|
||
.
|
||
.
|
||
First SCSI hard drive (entire drive) /dev/sda
|
||
First SCSI hard drive, primary partition 1 /dev/sda1
|
||
.
|
||
.
|
||
.
|
||
Second SCSI hard drive (entire drive) /dev/sdb
|
||
Second SCSI hard drive, primary partition 1 /dev/sdb1
|
||
(and so on...)
|
||
|
||
|
||
Table 3.1: Linux partition names
|
||
|
||
|
||
A few notes about this table. Note that /dev/fd0 corresponds
|
||
to the first floppy drive (A: under MS-DOS) and /dev/fd1 corre-
|
||
sponds to the second floppy (B:).
|
||
|
||
Also, SCSI hard drives are handled differently than other drives.
|
||
IDE, MFM, and RLL drives are accessed through the devices /dev/hda,
|
||
/dev/hdb, and so on. The individual partitions on the drive /dev/hda
|
||
are /dev/hda1, /dev/hda2, and so on. However, SCSI drives are
|
||
named /dev/sda, /dev/sdb, etc., with partition names such as
|
||
/dev/sda1 and /dev/sda2.
|
||
|
||
Here's an example. Let's say that you have a single IDE hard
|
||
drive, with 3 primary partitions. The first two are set aside for
|
||
MS-DOS, and the third is an extended partition which has two
|
||
logical partitions, both for use by Linux. The devices referring to
|
||
these partitions would be:
|
||
|
||
|
||
First MS-DOS partition (C:) /dev/hda1
|
||
Second MS-DOS partition (D:) /dev/hda2
|
||
Extended partition /dev/hda3
|
||
First Linux logical partition /dev/hda5
|
||
Second Linux logical partition /dev/hda6
|
||
|
||
|
||
Note that /dev/hda4 is skipped; it corresponds to the fourth
|
||
primary partition, which we don't have. Logical partitions start
|
||
with /dev/hda5 and go on up.
|
||
|
||
|
||
3.3.2 Partition sizes for Linux
|
||
|
||
|
||
For Linux, you will need to create at least two partitions. One will
|
||
be used as the root partition, which contains the Linux software
|
||
(*Note: You may choose to create separate partitions for each part
|
||
of your Linux directory tree, using multiple filesystems. If you have
|
||
UNIX system administration experience, you may be able to par-
|
||
tition you drive more creatively. See Section A.3 for information.).
|
||
The second will be used as the swap partition, which acts as
|
||
virtual memory on your system (*Note: Instead of using a swap
|
||
partition, you may use a swap file. See Section A.5 for more infor-
|
||
mation.). Swap space is very important for Linux: it allows you to
|
||
run many more programs at once than you would be able to other-
|
||
wise. This is especially important if you're low on physical RAM,
|
||
or if you're running X Windows. Even if you have 16 megabytes
|
||
or more of physical RAM, using swap space on your hard drive is
|
||
a good idea.
|
||
|
||
The size of your root partition depends greatly on how much
|
||
software you're installing. Section 2.2 should give you an idea of the
|
||
diskspace requirements for the SLS distribution of Linux. For ex-
|
||
ample, a minimal SLS installation (only the a series disks) requires
|
||
about 15 megabytes for the root partition, while a full installation
|
||
requires 90 megabytes. You should also leave yourself room for
|
||
expansion_space to install new software, space for users, and so
|
||
on.
|
||
|
||
The size of your swap partition depends on the amount of phys-
|
||
ical RAM you have, and how much swap space you want. Swap
|
||
space is used as virtual memory by Linux. Remember that Linux
|
||
is a multitasking operating system; this allows you to run many
|
||
programs at once. Because the number of simultaneously running
|
||
programs may require more memory than you have, use of swap
|
||
space is vital. Also, the more swap space you have, the less Linux
|
||
will need to swap programs back and forth between real memory
|
||
and virtual memory.
|
||
|
||
|
||
It is generally suggested that you have twice the amount of swap
|
||
space than you have physical RAM. For example, if you have 4
|
||
megabytes of physical RAM, an 8-megabyte swap partition should
|
||
suffice. However, the decision is really up to you. If you have
|
||
16 megabytes or more of physical memory, an 8- or 16-megabyte
|
||
swap partition should be more than enough. However, your swap
|
||
partition cannot be larger than 16 megabytes. You can use multiple
|
||
swap partitions (up to 8) if you wish_if you'd like to have 32
|
||
megabytes of swap, simply create two 16-megabyte swap partitions.
|
||
|
||
|
||
3.3.3 Booting SLS
|
||
|
||
|
||
You are now ready to boot the SLS release on your system to start
|
||
the installation.
|
||
|
||
To boot SLS, simply boot the a1 disk on your system. While
|
||
booting, hold down the [ctrl] or [alt] key. You should see the
|
||
prompt
|
||
|
||
|
||
LILO
|
||
|
||
|
||
Followed by a boot menu.
|
||
|
||
At this point, you have two options: to boot the floppy with
|
||
the ramdisk enabled, or to boot without the ramdisk. If you have
|
||
at least 4 megs of RAM in your machine, then you can just press
|
||
[return] or type
|
||
|
||
|
||
ramdisk
|
||
|
||
|
||
to boot with the ramdisk enabled. This will speed up operations
|
||
while you're using the a1 disk. However, if you have only 2 megs
|
||
of RAM in your machine, you'll need to type
|
||
|
||
|
||
floppy
|
||
|
||
|
||
to boot without the ramdisk.
|
||
|
||
The other options on the menu are for installing the Mitsumi
|
||
CD-ROM release of SLS (see Section A.2) or for booting Linux
|
||
from the hard drive (after you've installed it).
|
||
|
||
As the system boots, you'll be asked to
|
||
|
||
|
||
Press <return> to see SVGA-modes available or <space> to continue
|
||
|
||
|
||
Press [space] to use the standard 80x25 mode (not all SVGA
|
||
modes work on all displays). There will be a short pause wile the
|
||
system uncompresses the kernel (you should see "Uncompressing
|
||
Linux" at the top of your screen. Also, there may be a 5-10 second
|
||
pause after the lp_init... line at bootup, while the system checks
|
||
for SCSI devices. Don't panic! Finally, you should see the message
|
||
|
||
|
||
Welcome to the SLS install/bootdisk.
|
||
|
||
|
||
and be given the login prompt
|
||
|
||
|
||
softland login:
|
||
|
||
|
||
Here, login as root (no password, of course).
|
||
|
||
|
||
softland login: root
|
||
|
||
|
||
softland:/#
|
||
|
||
|
||
To look at the installation information on the disk, use the com-
|
||
mand
|
||
|
||
|
||
softland:/# install.info
|
||
|
||
|
||
Instead, if you login as install, you will be presented with
|
||
an installation menu. In the following sections, we cover how to
|
||
install the system by hand, instead of using the SLS menus. This
|
||
is because manual installation is applicable to Linux distributions
|
||
other than SLS, and also because it's a good idea to know how to
|
||
use the commands directly (without the menu). However, the con-
|
||
cepts behind using the SLS install menu and using the commands
|
||
directly are the same.
|
||
|
||
|
||
3.3.4 Running fdisk
|
||
|
||
|
||
After booting Linux, run fdisk by typing
|
||
|
||
|
||
fdisk <drive>
|
||
|
||
|
||
where <drive> is the Linux device name of the drive you plan to
|
||
add partitions to (see Table 3.1 on page 26). For instance, if you
|
||
want to run fdisk on the first SCSI disk in your system, use the
|
||
command fdisk /dev/sda. /dev/hda (the first IDE drive) is the
|
||
default if you don't specify one.
|
||
|
||
If you are creating Linux partitions on two separate drives, run
|
||
fdisk once for each drive.
|
||
|
||
|
||
# fdisk /dev/hda
|
||
|
||
Command (m for help):
|
||
|
||
|
||
Here fdisk is waiting for a command; you can type m to get a list
|
||
of options.
|
||
|
||
|
||
Command (m for help): m
|
||
Command action
|
||
a toggle a bootable flag
|
||
d delete a partition
|
||
l list known partition types
|
||
m print this menu
|
||
n add a new partition
|
||
p print the partition table
|
||
q quit without saving changes
|
||
t change a partition's system id
|
||
u change display/entry units
|
||
v verify the partition table
|
||
w write table to disk and exit
|
||
x extra functionality (experts only)
|
||
|
||
Command (m for help):
|
||
|
||
|
||
The n command is used to create a new partition. Most of the other
|
||
options you won't need to worry about. To quit fdisk without
|
||
saving any changes, use the q command. To quit fdisk and write
|
||
the changes to the partition table to disk, use the w command.
|
||
|
||
The first thing you should do is display your current partition
|
||
table and write the information down, for later reference. Use the
|
||
p command.
|
||
|
||
|
||
Command (m for help): p
|
||
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
|
||
Units = cylinders of 608 * 512 bytes
|
||
|
||
Device Boot Begin Start End Blocks Id System
|
||
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
|
||
|
||
Command (m for help):
|
||
|
||
|
||
In this example, we have a single DOS partition on /dev/hda1,
|
||
which is 61693 blocks (about 60 megs). This partition starts at
|
||
cylinder number 1, and goes to cylinder 203. We have a total of
|
||
683 cylinders in this disk; so there are 480 cylinders left to make
|
||
Linux partitions on.
|
||
|
||
To create a new partition, use the n command. In this example,
|
||
we'll create two primary partitions (/dev/hda2 and /dev/hda3,
|
||
respectively) for Linux.
|
||
|
||
|
||
Command (m for help): n
|
||
Command action
|
||
e extended
|
||
p primary partition (1-4)
|
||
|
||
|
||
Here, fdisk is asking the type of the partition to create: extended
|
||
or primary. In our example, we're creating only primary partitions,
|
||
so we choose p.
|
||
|
||
|
||
Partition number (1-4):
|
||
|
||
|
||
Fdisk will then ask for the partition to create; since partition 1 is
|
||
already used, our first Linux partition will be number 2.
|
||
|
||
|
||
Partition number (1-4): 2
|
||
First cylinder (204-683):
|
||
|
||
|
||
Now enter the starting cylinder number of the partition. Since
|
||
cylinders 204 through 683 are unused, we'll use the first available
|
||
one (number 204). There's no reason to leave empty space in be-
|
||
tween your partitions.
|
||
|
||
|
||
First cylinder (204-683): 204
|
||
Last cylinder or +size or +sizeM or +sizeK (204-683):
|
||
|
||
|
||
Fdisk is asking for the size of the partition to create. We can either
|
||
specify an ending cylinder number, or a size in bytes, kilobytes, or
|
||
megabytes. Since we want our partition to be 80 megs in size, we
|
||
specify +80M.
|
||
|
||
Last cylinder or +size or +sizeM or +sizeK (204-683): +80M
|
||
|
||
Warning: Linux cannot currently use 33090 sectors of this
|
||
partition
|
||
|
||
|
||
This warning can be ignored. Fdisk prints the warning because it's
|
||
an older program, and dates before the time that Linux partitions
|
||
were able to be larger than 64 megabytes.
|
||
|
||
Now we're ready to create our second Linux partition. For sake
|
||
of demonstration, we'll create it with a size of 10 megabytes.
|
||
|
||
|
||
Command (m for help): n
|
||
Command action
|
||
e extended
|
||
p primary partition (1-4)
|
||
p
|
||
Partition number (1-4): 3
|
||
First cylinder (474-683): 474
|
||
Last cylinder or +size or +sizeM or +sizeK (474-683): +10M
|
||
|
||
|
||
Lastly, we'll display the partition table. Again, write down all
|
||
of this information_especially the block sizes of your new parti-
|
||
tions. You'll need to know the sizes of the partitions when creating
|
||
filesystems, later.
|
||
|
||
|
||
Command (m for help): p
|
||
|
||
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
|
||
Units = cylinders of 608 * 512 bytes
|
||
|
||
Device Boot Begin Start End Blocks Id System
|
||
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
|
||
/dev/hda2 204 204 473 82080 81 Linux/MINIX
|
||
/dev/hda3 474 474 507 10336 81 Linux/MINIX
|
||
|
||
|
||
As you can see, /dev/hda2 is now a partition of size 82080 block-
|
||
s (which corresponds to about 80 megabytes), and /dev/hda3 is
|
||
10336 blocks (about 10 megs).
|
||
|
||
Finally, we use the w command to write the changes to disk and
|
||
exit fdisk.
|
||
|
||
|
||
Command (m for help): w
|
||
|
||
#
|
||
|
||
|
||
Keep in mind that none of the changes you make while running
|
||
fdisk will take effect until you give the w command, so you can toy
|
||
with different configurations and only save them when you're done.
|
||
Also, if you want to quit fdisk at any time without saving the
|
||
changes, use the q command. Also remember that you shouldn't
|
||
modify partitions for any operating systems other than Linux with
|
||
the Linux fdisk program.
|
||
|
||
|
||
3.3.5 Rebooting the system
|
||
|
||
|
||
Before you create your filesystems, you need to reboot the system
|
||
in order for the changes to the partition table to take effect.
|
||
|
||
|
||
You should boot the system from the diskette or CD-ROM for
|
||
your distribution of Linux, as before. (You can't boot from the
|
||
hard drive, yet, because you haven't installed the Linux software).
|
||
|
||
Under Linux, you should never reboot the system with [ctrl-
|
||
alt-del] (the "Vulcan Nerve Pinch") or by pressing the reset button
|
||
on your system. This is because Linux, like other versions of UNIX,
|
||
buffers disk I/O in memory. The system only writes the memory
|
||
buffers to disk every 30 seconds or so. If you were to reset the
|
||
system before it was able to "sync" and write the information to
|
||
disk, you would corrupt the data on your hard drive.
|
||
|
||
To reboot your system, use the command
|
||
|
||
|
||
shutdown -r now
|
||
|
||
|
||
This will sync and reboot the system safely. If you only want to
|
||
shutdown the system (that is, so you can turn it off), give the
|
||
command
|
||
|
||
|
||
shutdown now
|
||
|
||
|
||
(without the -r).
|
||
|
||
|
||
3.3.6 Making the swap space
|
||
|
||
|
||
After you have created your Linux partitions, you are ready to
|
||
"format" them by creating a filesystem on the root partition, and
|
||
preparing the swap space on the swap partition.
|
||
|
||
First, let's create the swap space. Reboot the system, as de-
|
||
scribed above, and login as root. The command used to prepare
|
||
swap space is mkswap, and it takes the form
|
||
|
||
|
||
mkswap -c <partition> <size>
|
||
|
||
|
||
where <partition> is the name of the swap partition you have cre-
|
||
ated, and <size> is the size of the partition, in blocks (*Note: This
|
||
is the size as reported by fdisk, using the p menu option.). For
|
||
example, if your swap partition is on /dev/hda2 and is 8208 blocks
|
||
in size, use the command
|
||
|
||
|
||
# mkswap -c /dev/hda2 8208
|
||
|
||
|
||
The -c option tells mkswap to check for bad blocks on the partition
|
||
when creating the swap space.
|
||
|
||
|
||
3.3.7 Creating the filesystems
|
||
|
||
|
||
As mentioned previously, before you may use your Linux root par-
|
||
tition to store files, you must create a filesystem on it. There are
|
||
several types of filesystems available for Linux. The most common-
|
||
ly used filesystem type is the Linux Second Extended Filesys-
|
||
tem, or ext2fs_it is used by the majority of Linux users worldwide.
|
||
Because of the ext2fs's popularity, speed, and robustness, we'll on-
|
||
ly cover the creation of an ext2fs-type filesystem here (*Note: If
|
||
you're interested in using a filesystem type other than the ext2fs,
|
||
see the Linux FAQ. Information on obtaining the FAQ is found in
|
||
Appendix B.).
|
||
|
||
To create a filesystem on the Linux root partition, use the com-
|
||
mand
|
||
|
||
|
||
mke2fs -c <partition> <size>
|
||
|
||
|
||
where <partition> is the name of the Linux root partition, and
|
||
<size> is the size of the partition in blocks. For example, to create
|
||
a 60400-block filesystem on /dev/hda3, use the command
|
||
|
||
|
||
mke2fs -c /dev/hda3 60400
|
||
|
||
|
||
If you're creating more than one filesystem for Linux (see Sec-
|
||
tion A.3), you'll need to use the appropriate mke2fs command for
|
||
those partitions as well.
|
||
|
||
|
||
3.4 Installing SLS
|
||
|
||
|
||
The doinstall command is used to install SLS. It is relatively
|
||
straightforward, and prompts you for a number of options before
|
||
installing.
|
||
|
||
|
||
3.4.1 The SLS bootdisk
|
||
|
||
|
||
Before you begin, make sure you have in hand an MS-DOS for-
|
||
matted floppy, which will be used during the installation process
|
||
to create a Linux boot disk: essentially, a copy of the Linux kernel
|
||
used to boot your system (*Note: In Section 5.2.2, we'll cover how
|
||
to install LILO to boot your system from the hard drive. Booting
|
||
Linux from floppy is no big deal; once it's finished booting con-
|
||
trol is transferred to the hard drive, and the floppy isn't accessed
|
||
again.).
|
||
|
||
|
||
3.4.2 Using doinstall
|
||
|
||
|
||
The syntax of the doinstall command is
|
||
|
||
|
||
doinstall <partition> [<directory> <partition> ...]
|
||
|
||
|
||
The first <partition> is required: it is the partition which the root
|
||
filesystem is mounted on (such as /dev/hda2). The other argu-
|
||
ments are used to tell doinstall where to mount any additional
|
||
filesystems if you're using them. See Section A.3 for details on this
|
||
procedure.
|
||
|
||
For example, if your Linux root filesystem is on /dev/hda2, use
|
||
the command
|
||
|
||
|
||
softland:/# doinstall /dev/hda2
|
||
|
||
|
||
The doinstall command will step you through the installation
|
||
process. It will ask you what media to install from (e.g., floppy,
|
||
hard drive, CD-ROM, or network). Choose the appropriate option
|
||
(which is probably "floppy", unless you're installing from CD-ROM
|
||
or the hard drive. See Sections A.1 and A.2.)
|
||
|
||
doinstall will also ask you how much of the software to install,
|
||
depending on which disk sets you're installing.
|
||
|
||
Tiny base system a disk series only (15 megs)
|
||
Main base system a, b, and c series (45 megs)
|
||
Main base system + X11 a, b, c, and x series (70 megs)
|
||
Full system a, b, c, x, d, s, and t series (90 megs)
|
||
|
||
You can selectively install packages from the disk series during
|
||
the installation process_you need not install all of the software on
|
||
each disk series. Just answer "yes" to the question "Prompt for
|
||
each package?" when you run doinstall.
|
||
|
||
During the installation, if you receive numerous error mes-
|
||
sages such as "No space left on device", then you didn't create
|
||
filesystems large enough to hold the software. You should go back
|
||
and either repartition your drive to allocate more space, or being
|
||
the installation again (this time not installing as much of the soft-
|
||
ware). In any case, if you choose to reinstall SLS for some reason,
|
||
it is important that you redo the mke2fs command (i.e., re-create
|
||
your filesystems). This will delete any existing software on your
|
||
Linux partitions before you attempt to reinstall.
|
||
|
||
If everything goes well, then congratulations! You've just in-
|
||
stalled Linux on your system. Go have a Diet Coke or something_
|
||
you deserve it.
|
||
|
||
|
||
3.4.3 Rebooting the system
|
||
|
||
|
||
To boot Linux, simply boot the Linux boot disk that was created
|
||
during the installation procedure (not the a1 disk). Also, it's a
|
||
good idea to keep your SLS installation disks around_if you acci-
|
||
dentally trash your system, for example, you can use the SLS a1
|
||
disk to recover your files (with a little luck).
|
||
|
||
|
||
3.5 Now That You Have Linux Installed
|
||
|
||
|
||
You've probably run into a few problems along the way while trying
|
||
to install Linux. The most common problem is having corrupt
|
||
files on your installation disks, caused by either a mistake while
|
||
downloading or a mistake by the folks who put together the release
|
||
you're trying to install. Hopefully, however, all has gone well and
|
||
you now have a running Linux system.
|
||
|
||
The next few chapters will help you get aquainted with the
|
||
Linux system.
|
||
|
||
|
||
|
||
|
||
Chapter 4
|
||
|
||
Linux Tutorial
|
||
|
||
|
||
|
||
4.1 Introduction
|
||
|
||
|
||
New users of UNIX and Linux may be a bit intimidated by the
|
||
size and apparent complexity of the system before them. There
|
||
are many good books on using UNIX out there, for all levels of
|
||
expertise from novice to expert. However, none of these books
|
||
covers, specifically, an introduction to using Linux. While 95% of
|
||
using Linux is exactly like using other UNIX systems, the most
|
||
straightforward way to get going on your new system is with a
|
||
tutorial tailored for Linux. Herein is such a tutorial.
|
||
|
||
This chapter does not go into a large amount of detail or cover
|
||
many advanced topics. Instead, it is intended to get the new Linux
|
||
user running, on both feet, so that he or she may then read a more
|
||
general book about UNIX and understand the basic differences
|
||
between other UNIX systems and Linux.
|
||
|
||
Very little is assumed here, except perhaps some familiarity
|
||
with personal computer systems, and MS-DOS. However, even if
|
||
you're not an MS-DOS user, you should be able to understand
|
||
everything here. At first glance, UNIX looks a lot like MS-DOS
|
||
(after all, MS-DOS was modeled on the CP/M operating system,
|
||
which in turn was modeled on UNIX). However, only the very
|
||
superficial features of UNIX resemble MS-DOS in any way. Even
|
||
if you're completely new to the PC world, this tutorial should be
|
||
of help.
|
||
|
||
And, before we begin: Don't be afraid to experiment. The sys-
|
||
tem won't bite you. You can't destroy anything by working on the
|
||
system. UNIX has some amount of security built in, to prevent
|
||
"normal" users (the role which you will now assume) from damag-
|
||
ing files which are essential to the system. Even so, the absolute
|
||
worst thing that can happen is that you'll delete all of your files_
|
||
and you'll have to go back and re-install the system. So, at this
|
||
point, you have nothing to lose.
|
||
|
||
|
||
4.2 Basic UNIX Concepts
|
||
|
||
|
||
UNIX is a multitasking, multiuser operating system. This means
|
||
that there can be many people using one computer at the same
|
||
time, running many different applications. (This differs from MS-
|
||
DOS, where only one person can use the system at any one time.)
|
||
Under UNIX, for users to identify themselves to the system, they
|
||
must log in, which entails two steps: Entering your login name
|
||
(the name which the system identifies you as), and entering your
|
||
password, which is your personal secret key to logging into your
|
||
account. Because only you know your password, no one else can
|
||
login to the system under your username.
|
||
|
||
On traditional UNIX systems, the system administrator will
|
||
assign you a username and an initial password when you are given
|
||
an account on the system. However, because you are the system
|
||
administrator, you must set up your own account before you can
|
||
login_see Section 4.2.1, below. For the following discussions, we'll
|
||
use the imaginary username "larry".
|
||
|
||
In addition, each UNIX system has a hostname assigned to
|
||
it. It is this hostname that gives your machine a name, gives it
|
||
character and charm. The hostname is used to identify individual
|
||
machines on a network, but even if your machine isn't networked,
|
||
it should have a hostname. In Section 5.9.2 we'll cover setting
|
||
your system's hostname. For our examples, below, the system's
|
||
hostname is "mousehouse".
|
||
|
||
|
||
4.2.1 Creating an account
|
||
|
||
|
||
Before you can use the system, you must set up a user account
|
||
for yourself. This is because it's usually not a good idea to use the
|
||
root account for normal use. The root account should be reserved
|
||
for running priveleged commands and for maintaining the system,
|
||
as discussed in Section 5.1.
|
||
|
||
In order to create an account for yourself, you need to login as
|
||
root and use the useradd or adduser command. See Section 5.4
|
||
for information on this procedure.
|
||
|
||
|
||
4.2.2 Logging in
|
||
|
||
|
||
At login time, you'll see the a prompt resembling the following on
|
||
your screen:
|
||
|
||
|
||
mousehouse login:
|
||
|
||
|
||
Here, enter your username, and press the [Return] key. Our
|
||
hero, larry, would type the following:
|
||
|
||
|
||
mousehouse login: larry
|
||
Password:
|
||
|
||
|
||
Now, enter your password. It won't be echoed to the screen
|
||
when you login, so type carefully. If you mistype your password,
|
||
you'll see the message
|
||
|
||
|
||
Login incorrect
|
||
|
||
|
||
and you'll have to try again.
|
||
|
||
Once you have correctly entered the username and password,
|
||
you are officially logged into the system, and are free to roam.
|
||
|
||
|
||
4.2.3 Virtual consoles
|
||
|
||
|
||
The system's console is the monitor and keyboard connected di-
|
||
rectly to the system. (Because UNIX is a multiuser operating sys-
|
||
tem, you may have other terminals connected to serial ports on
|
||
your system, but these would not be the console.) Linux, like some
|
||
other versions of UNIX, provides access to virtual consoles (or
|
||
VC's), which allow you to have more than one login session from
|
||
your console at a time.
|
||
|
||
To demonstrate this, login to your system (as demonstrated
|
||
above). Now, press [alt-F2]. You should see the login: prompt
|
||
again. You're looking at the second virtual console_you logged
|
||
into the first. To switch back to the first VC, press [alt-F1]. Voila!
|
||
You're back to your first login session.
|
||
|
||
A newly-installed Linux system probably allows you to access
|
||
the first four VC's, using [alt-F1] through [alt-F4]. However, it is
|
||
possible to enable up to 12 VC's_one for each function key on your
|
||
keyboard. As you can see, use of VC's can be very powerful_you
|
||
can be working on several different VC's at once.
|
||
|
||
While the use of VC's is somewhat limiting (after all, you can
|
||
only be looking at one VC at a time), it should give you a feel for
|
||
UNIX's multiuser capabilities. While you're working on VC #1,
|
||
you can switch over to VC #2 and start working on something else.
|
||
|
||
|
||
4.2.4 Shells and commands
|
||
|
||
|
||
For most of your explorations in the world of UNIX, you'll be talk-
|
||
ing to the system through the use of a shell. A shell is just a
|
||
program which takes user input (e.g., commands which you type)
|
||
and translates them into instructions. This can be compared to
|
||
the COMMAND.COM program under MS-DOS, which does essentially
|
||
the same thing. The shell is just one interface to UNIX. There are
|
||
many possible interfaces_such as the X Window System, which
|
||
lets you run commands by using the mouse and keyboard in con-
|
||
junction.
|
||
|
||
As soon as you login, the system starts the shell, and you can
|
||
type commands to it. Here's a quick example. Here, Larry logs in,
|
||
and is left sitting at the shell prompt.
|
||
|
||
|
||
mousehouse login: larry
|
||
Password: larry's password
|
||
Welcome to Mousehouse!
|
||
|
||
/home/larry#
|
||
|
||
|
||
"/home/larry#" is the shell's prompt, indicating that it's ready
|
||
to take commands. (More on what the prompt itself means later.)
|
||
Let's try telling the system to do something interesting:
|
||
|
||
|
||
/home/larry# make love
|
||
make: *** No way to make target `love'. Stop.
|
||
/home/larry#
|
||
|
||
|
||
Well, as it turns out make was the name of an actual program
|
||
on the system, and the shell executed this program when given the
|
||
command. (Unfortunately, the system was being unfriendly.)
|
||
|
||
This brings us to one burning question: What are commands?
|
||
What happens when you type "make love"? The first word on the
|
||
command line, "make", is the name of the command to be executed.
|
||
Everything else on the command line is taken as arguments to this
|
||
command. Examples:
|
||
|
||
|
||
/home/larry# cp foo bar
|
||
|
||
|
||
Here, the name of the command is "cp", and the arguments are
|
||
"foo" and "bar".
|
||
|
||
When you type a command, the shell does several things. First
|
||
of all, it looks at the command name, and checks to see if it is
|
||
a command which is internal to the shell. (That is, a command
|
||
which the shell knows how to execute itself. There are a number
|
||
of these commands, and we'll go into them later.) The shell also
|
||
checks to see if the command is an alias, or substitute name, for
|
||
another command. If neither of these conditions apply, the shell
|
||
looks for a program, on the disk, with the command's name. If
|
||
it finds such a program, the shell runs it, giving the program the
|
||
arguments specified on the command line.
|
||
|
||
In our example, the shell looks for the program called make,
|
||
and runs it with the argument love. Make is a program often used
|
||
to compile large programs, and it takes as arguments the name of
|
||
a "target" to compile. In the case of "make love", we instructed
|
||
make to compile the target love. Because make can't find a target
|
||
by this name, it fails with a humorous error message, and we are
|
||
returned to the shell prompt.
|
||
|
||
What happens if we type a command to a shell, and the shell
|
||
can't find a program with the command name to run? Well, we
|
||
can try it:
|
||
|
||
|
||
/home/larry# eat dirt
|
||
eat: command not found
|
||
/home/larry#
|
||
|
||
|
||
Quite simply, if the shell can't find a program with the name given
|
||
on the command line (here, "eat"), it prints an error message which
|
||
should be self-explanatory. You'll often see this error message if you
|
||
mistype a command (for example, if you had typed "mkae love"
|
||
instead of "make love").
|
||
|
||
|
||
4.2.5 Logging out
|
||
|
||
|
||
Before we delve much further, we should tell you how to log out of
|
||
the system. At the shell prompt, use the command
|
||
|
||
/home/larry# exit
|
||
|
||
|
||
to logout. There are other ways of logging out as well, but this is
|
||
the most foolproof one.
|
||
|
||
|
||
4.2.6 Changing your password
|
||
|
||
|
||
You should also be aware of how to change your password. The
|
||
command passwd will prompt you for your old password, and your
|
||
new password. It will ask you to reenter the new password for
|
||
validation. Be careful not to forget your password_if you do, you
|
||
will have to ask the system administrator to reset it for you. (If
|
||
you're the system administrator, see Section 5.4.)
|
||
|
||
|
||
4.2.7 Files and directories
|
||
|
||
|
||
Under most operating systems (UNIX included), there is the con-
|
||
cept of a file, which is just a bundle of information which is given a
|
||
name (called a filename). Examples of files would be your history
|
||
term paper, an e-mail message, or an actual program which can be
|
||
executed. Essentially, anything which is saved on disk is saved in
|
||
an individual file.
|
||
|
||
Files are identified by their filenames. For example, the file
|
||
containing your history paper might be saved with the filename
|
||
history.txt. These names usually identify the file and its contents
|
||
in some form which is meaningful to you.
|
||
|
||
With the concept of files comes the concept of directories. A
|
||
directory is just a collection of files. It can be thought of as a
|
||
"folder" which contains many different files. Directories themselves
|
||
are given names, with which you can identify them. Furthermore,
|
||
directories are maintained in a tree-like structure; that is, directo-
|
||
ries may contain other directories.
|
||
|
||
A file may be referred to by its pathname, which is made up of
|
||
the filename, preceded by the name of the directory which contains
|
||
the file. For example, let's say that Larry has a directory called
|
||
papers, which contains three files: history-final, english-lit,
|
||
and masters-thesis. (Each of these three files contains informa-
|
||
tion for three of Larry's ongoing projects.) To refer to the file
|
||
english-lit, Larry can specify the file's pathname:
|
||
|
||
|
||
papers/english-lit
|
||
|
||
|
||
As you can see, the directory and file names are separated by a
|
||
single slash (/). MS-DOS users will find this convention familiar,
|
||
although in the MS-DOS world, the backslash (") is used instead.
|
||
|
||
As mentioned, directories can be nested within each other as
|
||
well. For example, let's say that Larry has another directory, within
|
||
papers, called notes. This directory contains the files math-notes
|
||
and cheat-sheet. The pathname of the file cheat-sheet would
|
||
be
|
||
|
||
|
||
papers/notes/cheat-sheet
|
||
|
||
|
||
Therefore, the pathname really is a "path" which you take to
|
||
locate a certain file. The directory above a given subdirectory is
|
||
known as the parent directory. Here, the directory papers is
|
||
the parent of the notes directory.
|
||
|
||
|
||
4.2.8 The directory tree
|
||
|
||
|
||
Most UNIX systems have a standard layout for files, so that system
|
||
resources and programs can be easily located. This layout forms
|
||
a directory tree, which starts at the "/" directory, also known as
|
||
"the root directory". Directly underneath / are some important
|
||
subdirectories: /bin, /etc, /dev, and /usr, among others. These
|
||
directories in turn contain other directories which contain system
|
||
configuration files, programs, and so on.
|
||
|
||
In particular, each user has a home directory, which is the
|
||
directory set aside for that user to store his or her files. In the
|
||
examples above, all of Larry's files (such as cheat-sheet and
|
||
history-final) were contained in Larry's home directory. Usual-
|
||
ly, user home directories are contained under /home, and are named
|
||
for the user who owns that directory. Therefore, Larry's home di-
|
||
rectory is /home/larry.
|
||
|
||
|
||
4.2.9 The current working directory
|
||
|
||
|
||
At any given time, commands that you type to the shell are given
|
||
in terms of your current working directory. You can think of
|
||
your working directory as the directory in which you are currently
|
||
"located". When you first login, your working directory is set to
|
||
your home directory_/home/larry in our case. Whenever you
|
||
reference a file, you may refer to it in relationship to your current
|
||
working directory, instead of specifying the full pathname of the
|
||
file.
|
||
|
||
Here's an example. Larry has the directory papers, and papers
|
||
contains the file history-final. If Larry wants to look at this file,
|
||
he can use the command
|
||
|
||
|
||
/home/larry# more /home/larry/papers/history-final
|
||
|
||
|
||
The more command simply displays a file, one screen at a time.
|
||
However, because Larry's current working directory is /home/larry,
|
||
he can instead refer to the file relative to his current location. The
|
||
command would be
|
||
|
||
|
||
/home/larry# more papers/history-final
|
||
|
||
|
||
Therefore, if you begin a filename (such as papers/final) with a
|
||
character other than "/", the system assumes that you're referring
|
||
to the file in terms relative to your current working directory. This
|
||
is known as a relative pathname.
|
||
|
||
On the other hand, if you begin a filename with a "/", the
|
||
system interprets this as a full pathname_that is, a pathname
|
||
including the entire path to the file, starting from the root directory,
|
||
/. This is known as an absolute pathname.
|
||
|
||
|
||
4.2.10 Referring to home directories
|
||
|
||
|
||
Under both Tcsh and Bash on Linux, your home directory can
|
||
be referred to using the tilde character ("~"). For example, the
|
||
command
|
||
|
||
|
||
/home/larry# more ~/papers/history-final
|
||
|
||
|
||
is equivalent to
|
||
|
||
|
||
/home/larry# more /home/larry/papers/history-final
|
||
|
||
|
||
The "~" character is simply replaced with the name of your home
|
||
directory by the shell.
|
||
|
||
In addition, you can specify other user's home directories with
|
||
the tilde as well. The pathname "~karl/letters" translates to
|
||
"/home/karl/letters" by the shell (if /home/karl is karl's home
|
||
directory). The use of the tilde is simply a shortcut; there is no di-
|
||
rectory named "~", it's just syntactic sugar provided by the shell.
|
||
|
||
4.3 First Steps into UNIX
|
||
|
||
|
||
4.3.1 Moving around
|
||
|
||
|
||
Now that we can login, and know how to refer to files using path-
|
||
names, how can we change our current working directory, to make
|
||
life easier?
|
||
|
||
The command for moving around in the directory structure is
|
||
cd, short for "change directory". You'll notice that many often-
|
||
used Unix commands are two or three letters. The usage of the cd
|
||
command is:
|
||
|
||
|
||
cd <directory>
|
||
|
||
|
||
where <directory> is the name of the directory which you wish to
|
||
change to.
|
||
|
||
As we said, when you login, you begin in your home directory.
|
||
If Larry wanted to move down into the papers subdirectory, he'd
|
||
use the command
|
||
|
||
|
||
/home/larry# cd papers
|
||
/home/larry/papers#
|
||
|
||
|
||
As you can see, Larry's prompt changes to reflect his current work-
|
||
ing directory (so he knows where he is). Now that he's in the
|
||
papers directory, he can look at his history final with the com-
|
||
mand
|
||
|
||
|
||
/home/larry/papers# more history-final
|
||
|
||
|
||
Now, Larry is stuck in the papers subdirectory. To move back
|
||
up to the parent directory, use the command
|
||
|
||
|
||
/home/larry/papers# cd ..
|
||
/home/larry#
|
||
|
||
|
||
(Note the space between the "cd" and the "..".) Every directory
|
||
has a subdirectory named ".." which refers to the parent directory.
|
||
Similarly, every directory has a subdirectory named "." which
|
||
refers to itself. Therefore, the command
|
||
|
||
|
||
/home/larry/papers# cd .
|
||
|
||
|
||
gets us nowhere.
|
||
|
||
You can also use absolute pathnames in the cd command. To
|
||
cd into Karl's home directory, we can use the command
|
||
|
||
|
||
/home/larry/papers# cd /home/karl
|
||
/home/karl#
|
||
|
||
|
||
Also, using cd with no argument will return you to your own
|
||
home directory.
|
||
|
||
|
||
/home/karl# cd
|
||
/home/larry#
|
||
|
||
|
||
4.3.2 Looking at the contents of directories
|
||
|
||
|
||
Now that you know how to move around directories you probably
|
||
think, "So what?" The basic skill of moving around directories is
|
||
fairly useless, so let's introduce a new command, ls. ls prints a
|
||
listing of files and directories, by default from your current direc-
|
||
tory. For example:
|
||
|
||
|
||
/home/larry# ls
|
||
Mail
|
||
letters
|
||
papers
|
||
/home/larry#
|
||
|
||
|
||
Here we can see that Larry has three entries in his current
|
||
directory: Mail, letters, and papers. This doesn't tell us much_
|
||
are these directories or files? We can use the -F option on the ls
|
||
command to tell us more.
|
||
|
||
|
||
/home/larry# ls -F
|
||
Mail/
|
||
letters/
|
||
papers/
|
||
/home/larry#
|
||
|
||
|
||
From the / appended to each filename, we know that these three
|
||
entries are in fact subdirectories.
|
||
|
||
Using ls -F may also append "*" to the end of a filename.
|
||
This indicates that the file is an executable, or a program which
|
||
can be run. If nothing is appended to the filename using ls -F,
|
||
the file is a "plain old file", that is, it's neither a directory, or an
|
||
executable.
|
||
|
||
In general, each UNIX command may take a number of options
|
||
in addition to other arguments. These options usually begin with
|
||
a "-", as demonstrated above with ls -F. The -F option tells ls
|
||
to give more information about the type of the files involved_in
|
||
this case, printing a / after each directory name.
|
||
|
||
If you give ls a directory name, it will print the contents of
|
||
that directory.
|
||
|
||
|
||
/home/larry# ls -F papers
|
||
english-lit
|
||
history-final
|
||
masters-thesis
|
||
notes/
|
||
/home/larry#
|
||
|
||
|
||
Or, for a more interesting listing, let's see what's in the system's
|
||
/etc directory.
|
||
|
||
/home/larry# ls /etc
|
||
Images ftpusers lpc rc.new shells
|
||
adm getty magic rc0.d startcons
|
||
bcheckrc gettydefs motd rc1.d swapoff
|
||
brc group mount rc2.d swapon
|
||
brc~ inet mtab rc3.d syslog.conf
|
||
csh.cshrc init mtools rc4.d syslog.pid
|
||
csh.login init.d pac rc5.d syslogd.reload
|
||
default initrunlvl passwd rmt termcap
|
||
disktab inittab printcap rpc umount
|
||
fdprm inittab.old profile rpcinfo update
|
||
fstab issue psdatabase securetty utmp
|
||
ftpaccess lilo rc services wtmp
|
||
|
||
|
||
/home/larry#
|
||
|
||
|
||
(For those MS-DOS users out there, notice how the filenames
|
||
can be longer than 8 characters, and can contain periods in any
|
||
position. It is even possible to have more than one period in a
|
||
filename.)
|
||
|
||
Let's cd up to the top of the directory tree, using "cd ..", and
|
||
then down to another directory: /usr/bin.
|
||
|
||
|
||
/home/larry# cd ..
|
||
/home# cd ..
|
||
/# cd usr
|
||
/usr# cd bin
|
||
/usr/bin#
|
||
|
||
|
||
You can also move into directories in multiple steps, as in cd
|
||
/usr/bin.
|
||
|
||
Try moving around various directories, using ls and cd. In
|
||
some cases, you may run into a foreboding "Permission denied"
|
||
error message. This is simply the concept of UNIX security kick-
|
||
ing in: in order to ls or to cd into a directory, you must have
|
||
permission to do so. We'll talk more about this in Section 4.9.
|
||
|
||
|
||
4.3.3 Creating new directories
|
||
|
||
|
||
It's time to learn how to create directories. This involves the use
|
||
of the mkdir command. Try the following:
|
||
|
||
|
||
/home/larry# mkdir foo
|
||
/home/larry# ls -F
|
||
Mail/
|
||
foo/
|
||
letters/
|
||
papers/
|
||
/home/larry# cd foo
|
||
/home/larry/foo# ls
|
||
/home/larry/foo#
|
||
|
||
|
||
Congrats! You've just made a new directory and moved into it.
|
||
Since there aren't any files in this new directory, let's learn how to
|
||
copy files from one place to another.
|
||
|
||
|
||
4.3.4 Copying files
|
||
|
||
|
||
Copying files is done with the command cp:
|
||
|
||
|
||
/home/larry/foo# cp /etc/termcap .
|
||
/home/larry/foo# cp /etc/shells .
|
||
/home/larry/foo# ls -F
|
||
shells termcap
|
||
/home/larry/foo# cp shells bells
|
||
/home/larry/foo# ls -F
|
||
bells shells termcap
|
||
/home/larry/foo#
|
||
|
||
|
||
The cp command copies the files listed on the command line to
|
||
the file or directory given as the last argument. Notice how we use
|
||
the directory "." to refer to the current directory.
|
||
|
||
|
||
4.3.5 Moving files
|
||
|
||
|
||
A new command named mv moves files, instead of copying them.
|
||
The syntax is very straightforward.
|
||
|
||
|
||
/home/larry/foo# mv termcap sells
|
||
/home/larry/foo# ls -F
|
||
bells sells shells
|
||
/home/larry/foo#
|
||
|
||
|
||
Notice how termcap no longer exists, but in its place is the file
|
||
sells. This can be used to rename files, as we have just done, but
|
||
also to move a file to a completely new directory.
|
||
|
||
Note: mv and cp will overwrite the destination file (if it already
|
||
exists) without asking you. Be careful when you move a file into
|
||
another directory: there may already be a file with the same name
|
||
in that directory, which you'll overwrite!
|
||
|
||
|
||
4.3.6 Deleting files and directories
|
||
|
||
|
||
You now have an ugly rhyme developing with the use of the ls
|
||
command. To delete a file, use the rm command. ("rm" stands for
|
||
"remove").
|
||
|
||
|
||
/home/larry/foo# rm bells sells
|
||
/home/larry/foo# ls -F
|
||
shells
|
||
/home/larry/foo#
|
||
|
||
|
||
We're left with nothing but shells, but we won't complain. Note
|
||
that rm by default won't prompt you before deleting a file_so be
|
||
careful.
|
||
|
||
A related command to rm is rmdir. This command deletes
|
||
a directory, but only if the directory is empty. If the directory
|
||
contains any files or subdirectories, rmdir will complain.
|
||
|
||
|
||
4.3.7 Looking at files
|
||
|
||
|
||
The commands more and cat are used for viewing the contents
|
||
of files. more displays a file, one screenful at a time, while cat
|
||
displays the whole file at once.
|
||
|
||
To look at the file shells, we can use the command
|
||
|
||
|
||
/home/larry/foo# more shells
|
||
|
||
|
||
In case you're interested what shells contains, it's a list of
|
||
valid shell programs on your system. On most systems, this in-
|
||
cludes /bin/sh, /bin/bash, and /bin/csh. We'll talk about these
|
||
different types of shells later.
|
||
|
||
While using more, press [Space] to display the next page of
|
||
text, and [b] to display the previous page. There are other com-
|
||
mands available in more as well, these are just the basics. Pressing
|
||
[q] will quit more.
|
||
|
||
Quit more and try cat /etc/termcap. The text will probably
|
||
fly by much too quickly for you to read it. The name "cat" actually
|
||
stands for "concatenate", which is the real use of the program. The
|
||
cat command can be used to concatenate the contents of several
|
||
files and save the result to another file. This will be discussed later.
|
||
|
||
|
||
4.3.8 Getting online help
|
||
|
||
|
||
Almost every UNIX system, Linux included, provides a facility
|
||
known as "manual pages", or "man pages" for short. These man
|
||
pages contain online documentation for all of the various system
|
||
commands, resources, configuration files, and so on.
|
||
|
||
The command used to access man pages is man. For example,
|
||
if you're interested in finding out about the other options of the ls
|
||
command, you can type
|
||
|
||
|
||
/home/larry# man ls
|
||
|
||
|
||
and the man page for ls will be displayed.
|
||
|
||
Unfortunately, most of the man pages out there are written
|
||
for those who already have some idea of what the command or
|
||
resource does. For this reason, man pages usually only contain
|
||
the hardcore technical details of the command, without a lot of
|
||
tutorial. However, man pages can be an invaluable resource for
|
||
jogging your memory if you forget the syntax of a command. Man
|
||
pages will also tell you a lot about the commands which we won't
|
||
tell you in this book.
|
||
|
||
I suggest that you try man for the commands we've already gone
|
||
over, and whenever I introduce a new command. You'll notice
|
||
some of these commands won't have man pages. This could be
|
||
for several reasons. For one, the man pages haven't been written
|
||
yet (the Linux Documentation Project is responsible for man pages
|
||
under Linux as well. We are gradually accumulating most of the
|
||
man pages available for the system). Secondly, the the command
|
||
might be an internal shell command, or an alias (as discussed in
|
||
Section 4.2.4), in which case it would not have a man page of its
|
||
own. One example is cd, which is a shell internal command. The
|
||
shell actually processes the cd_there is no separate program which
|
||
contains this command.
|
||
|
||
|
||
4.4 Summary of Basic Commands
|
||
|
||
|
||
This section introduces some of the most useful basic commands
|
||
on a UNIX system, including those covered in the last section.
|
||
|
||
Note that options usually begin with a "-", and in most cases
|
||
multiple one-letter options may be combined using a single "-". For
|
||
example, instead of using the command ls -l -F, it is adequate
|
||
to use ls -lF.
|
||
|
||
Instead of listing all of the options available for each of these
|
||
commands, we'll only talk about those which are useful or impor-
|
||
tant at this time. In fact, most of these commands have a large
|
||
number of options (most of which you'll never use). You can use
|
||
man to see the manual pages for each command, which list all of
|
||
the available options.
|
||
|
||
Also note that many of these commands take a list of files or
|
||
directories as arguments, denoted by "<file1> ...<fileN>". For
|
||
example, the cp command takes as arguments a list of files to copy,
|
||
followed by the destination file or directory. When copying more
|
||
than one file, the destination must be a directory.
|
||
|
||
|
||
cd Change the current working directory.
|
||
Syntax: cd <directory>
|
||
<directory> is the directory to change to. ("."
|
||
refers to the current directory, ".." the parent
|
||
directory.)
|
||
Example: cd ../foo sets the current directory to
|
||
../foo.
|
||
|
||
|
||
ls Displays information about the named files and
|
||
directories.
|
||
Syntax: ls <file1> <file2> ...<fileN>
|
||
Where <file1> through <fileN> are the filenames
|
||
or directories to list. Options: There are more
|
||
options than you want to think about. The most
|
||
commonly used are -F (used to display some infor-
|
||
mation about the type of the file), and -l (gives
|
||
a "long" listing including file size, owner, permis-
|
||
sions, and so on. This will be covered in detail
|
||
later.)
|
||
Example: ls -lF /home/larry will display the
|
||
contents of the directory /home/larry.
|
||
|
||
|
||
cp Copies file(s) to another file or directory.
|
||
Syntax: cp <file1> <file2> ...<fileN> <destination>
|
||
Where <file1> through <fileN> are the files to copy,
|
||
and <destination> is the destination file or direc-
|
||
tory.
|
||
Example: cp ../frog joe copies the file ../frog
|
||
to the file or directory joe.
|
||
|
||
|
||
mv Moves file(s) to another file or directory. This
|
||
command does the equivalent of a copy followed
|
||
by the deletion of the original. This can be used to
|
||
rename files, as in the MS-DOS command RENAME.
|
||
Syntax: mv <file1> <file2> ...<fileN> <destination>
|
||
Where <file1> through <fileN> are the files to move,
|
||
and <destination> is the destination file or direc-
|
||
tory.
|
||
Example: mv ../frog joe moves the file ../frog
|
||
to the file or directory joe.
|
||
|
||
|
||
rm Deletes files. Note that when files are deleted
|
||
under UNIX, they are unrecoverable (unlike MS-
|
||
DOS, where you can usually "undelete" the file).
|
||
Syntax: rm <file1> <file2> ...<fileN>
|
||
Where <file1> through <fileN> are the filenames to
|
||
delete.
|
||
Options: -i will prompt for confirmation before
|
||
deleting the file.
|
||
Example: rm -i /home/larry/joe /home/larry/frog
|
||
deletes the files joe and frog in /home/larry.
|
||
|
||
|
||
mkdir Creates new directories.
|
||
Syntax: mkdir <dir1> <dir2> ...<dirN>
|
||
Where <file1> through <fileN> are the directories
|
||
to create.
|
||
Example: mkdir /home/larry/test creates the
|
||
directory test under /home/larry.
|
||
|
||
|
||
rmdir This command deletes empty directories. When
|
||
using rmdir, your current working directory must
|
||
not be within the directory to be deleted.
|
||
Syntax: rmdir <dir1> <dir2> ...<dirN>
|
||
Where <file1> through <fileN> are the directories
|
||
to delete.
|
||
Example: rmdir /home/larry/papers deletes the
|
||
directory /home/larry/papers, if it is empty.
|
||
|
||
|
||
man Displays the manual page for the given command
|
||
or resource (that is, any system utility which isn't
|
||
a command, such as a library function.) Syntax:
|
||
man <command>
|
||
Where <command> is the name of the command
|
||
or resource to get help on.
|
||
Example: man ls gives help on the ls command.
|
||
|
||
|
||
more Displays the contents of the named files, one screen-
|
||
ful at a time.
|
||
Syntax: more <file1> <file2> ... <fileN>
|
||
Where <file1> through <fileN> are the files to dis-
|
||
play.
|
||
Example: more papers/history-final displays
|
||
the file papers/history-final.
|
||
|
||
|
||
cat Officially used to concatenate files, cat is also used
|
||
to display the entire contents of a file at once.
|
||
Syntax: cat <file1> <file2> ...<fileN>
|
||
Where <file1> through <fileN> are the files to dis-
|
||
play.
|
||
Example: cat letters/from-mdw displays the file
|
||
letters/from-mdw.
|
||
|
||
|
||
echo Simply echoes the given arguments.
|
||
Syntax: echo <arg1> <arg2> ...<argN>
|
||
Where <arg1> through <argN> are the arguments
|
||
to echo.
|
||
Example: echo "Hello world" displays the string
|
||
"Hello world".
|
||
|
||
|
||
grep Display all of the lines in the named file(s) match-
|
||
ing the given pattern.
|
||
Syntax: grep <pattern> <file1> <file2> ...<fileN>
|
||
Where <pattern> is a regular expression pattern,
|
||
and <file1> through <fileN> are the files to search.
|
||
Example: grep loomer /etc/hosts will display
|
||
all lines in the file /etc/hosts which contain the
|
||
pattern "loomer".
|
||
|
||
|
||
4.5 Exploring the File System
|
||
|
||
|
||
The file system is the collection of files and the hierarchy of di-
|
||
rectories on your system. I promised before to escort you around
|
||
the filesystem and the time has come.
|
||
|
||
First, change to the root directory (cd /), and do an ls -F.
|
||
You'll probably see these directories (*Note: You may see others,
|
||
and you might not see all of them. Don't worry. Every release
|
||
of Linux differs in some respects.): bin, dev, etc, home, install,
|
||
lib, mnt, proc, root, tmp, user, usr, and var.
|
||
|
||
Let's take a look at each of these directories.
|
||
|
||
|
||
bin /bin is short for "binaries", or executables. This
|
||
is where many essential system programs reside.
|
||
Use the command "ls -F /bin" to list the files
|
||
here. If you look down the list you may see a few
|
||
commands that you recognize, such as cp, ls, and
|
||
mv. These are the actual programs for these com-
|
||
mands. When you use the cp command, you're
|
||
running the program /bin/cp.
|
||
|
||
Using ls -F, you'll see that most (if not all) of
|
||
the files in /bin have an asterisk ("*") appended
|
||
to their filenames. This indicates that the files are
|
||
executables, as described in Section 4.3.2.
|
||
|
||
|
||
/dev Next on our stop is /dev. Take a look, again with
|
||
ls -F.
|
||
|
||
The "files" in /dev are known as device drivers_
|
||
they are used to access system devices and re-
|
||
sources, such as disk drives, modems, memory, and
|
||
so on. For example, just as you can read data from
|
||
a file, you can read input from the mouse by accessing
|
||
/dev/mouse.
|
||
|
||
The filenames beginning with fd are floppy disk
|
||
devices. fd0 is the first floppy disk drive, fd1 the
|
||
second. Now, the astute among you will notice
|
||
that there are more floppy disk devices then just
|
||
the two I've listed above: they represent specific
|
||
types of floppy disks. For example, fd1H1440 will
|
||
access high-density, 3.5" diskettes in drive 1.
|
||
|
||
Here is a list of some of the most commonly used
|
||
device files. Note that even though you may not
|
||
have some of the devices listed below, the chances
|
||
are that you'll have entries in /dev for them any-
|
||
way.
|
||
|
||
|
||
o /dev/console refers to the system's console_
|
||
that is, the monitor connected directly to y-
|
||
our system.
|
||
|
||
o The various /dev/ttyS and /dev/cua devices
|
||
are used for accessing serial ports. For exam-
|
||
ple, /dev/ttyS0 refers to "COM1" under MS-
|
||
DOS. The /dev/cua devices are "callout" de-
|
||
vices, which are used in conjunction with a
|
||
modem.
|
||
|
||
o The device names beginning with hd access
|
||
hard drives. /dev/hda refers to the whole
|
||
first hard disk, while hda1 refers to the first
|
||
partition on /dev/hda.
|
||
|
||
o The device names beginning with sd are SC-
|
||
SI devices, such as SCSI hard drives, tape
|
||
drives, and so on. If you have a SCSI hard
|
||
drive, instead of accessing it through /dev/hda,
|
||
you would access /dev/sda.
|
||
|
||
o The device names beginning with lp access
|
||
parallel ports. /dev/lp0 refers to "LPT1" in
|
||
the MS-DOS world.
|
||
|
||
o /dev/null is used as a "black hole"_any da-
|
||
ta sent to this device is gone forever. Why
|
||
is this useful? Well, if you wanted to sup-
|
||
press the output of a command appearing on
|
||
your screen, you could send that output to
|
||
/dev/null. We'll talk more about this later.
|
||
|
||
o The device names beginning with /dev/tty
|
||
refer to the "virtual consoles" on your system
|
||
(accessed via by pressing [alt-F1], [alt-F2],
|
||
and so on). /dev/tty1 refers to the first VC,
|
||
/dev/tty2 refers to the second, and so on.
|
||
|
||
o The device names beginning with /dev/pty
|
||
are "pseudo-terminals". They are used to
|
||
provide a "terminal" to remote login sessions.
|
||
For example, if your machine is on a network,
|
||
incoming telnet logins would use one of the
|
||
/dev/pty devices.
|
||
|
||
|
||
/etc /etc contains just about everything which can be
|
||
labeled "et cetera"_many system configuration
|
||
files, programs, and utilities. Most of the pro-
|
||
grams found in /etc are for use by the system
|
||
administrator only. We'll cover these in depth in
|
||
Chapter 5.
|
||
|
||
|
||
/home /home contains user's home directories. For ex-
|
||
ample, /home/larry is the home directory for the
|
||
user "larry". On a newly-installed system, there
|
||
may not be any users in this directory.
|
||
|
||
|
||
/lib /lib contains shared library images. These
|
||
files contain code which many programs share in
|
||
common. Instead of each program containing its
|
||
own copy of these shared routines, they are all
|
||
stored in one common place, in /lib. This makes
|
||
executable files smaller, and saves space on your
|
||
system.
|
||
|
||
|
||
/proc /proc is a "virtual filesystem", the files in which
|
||
are stored in memory, not on the drive. They refer
|
||
to the various processes running on the system,
|
||
and allow you to get information about what pro-
|
||
grams and processes are running at any given time.
|
||
We'll go into more detail in Section 4.10.1.
|
||
|
||
|
||
/tmp Many programs have a need to generate some in-
|
||
formation and store it in a temporary file. The
|
||
canonical location for these files is in /tmp.
|
||
|
||
|
||
/usr /usr is a very important directory. It contains
|
||
a number of subdirectories which in turn contain
|
||
some of the most important and useful programs
|
||
and configuration files used on the system.
|
||
|
||
The various directories described above are essen-
|
||
tial for the system to operate, but most of the
|
||
things found in /usr are optional for the system.
|
||
However, it is those optional things which make
|
||
the system useful and interesting. Without /usr,
|
||
you'd more or less have a boring system, only with
|
||
programs like cp and ls. /usr contains most of
|
||
the larger software packages and the configuration
|
||
files which accompany them.
|
||
|
||
|
||
/usr/X386 /usr/X386 contains The X Window System, if y-
|
||
ou installed it. The X Window System is a large,
|
||
powerful graphical environment which provides a
|
||
large number of graphical utilities and program-
|
||
s, displayed in "windows" on your screen. If y-
|
||
ou're at all familiar with the Microsoft Windows
|
||
or Macintosh environments, X Windows will look
|
||
very familiar. The /usr/X386 directory contains
|
||
all of the X Windows executables, configuration
|
||
files, and support files. This will be covered in
|
||
more detail in Section 6.1.
|
||
|
||
|
||
/usr/adm /usr/adm contains various files of interest to the
|
||
system administrator, specifically system logs, which
|
||
record any errors or problems with the system.
|
||
Other files record logins to the system, as well
|
||
as failed login attempts. This will be covered in
|
||
Chapter 5.
|
||
|
||
|
||
/usr/bin /usr/bin is the real warehouse for software on any
|
||
UNIX system. It contains most of the executables
|
||
for programs not found in other places, such as
|
||
/bin.
|
||
|
||
|
||
/usr/etc Just as /etc contained miscellaneous system pro-
|
||
grams and configuration files, /usr/etc contains
|
||
even more of these utilities and files. In general,
|
||
the files found in /usr/etc are not essential to the
|
||
system, unlike those found in /etc, which are.
|
||
|
||
|
||
/usr/include /usr/include contains include files for the C
|
||
compiler. These files (most of which end in .h, for
|
||
"header") declare data structure names, subrou-
|
||
tines, and constants used when writing programs
|
||
in C. Those files found in /usr/include/sys are
|
||
generally used when programming on the UNIX
|
||
system level. If you are familiar with the C pro-
|
||
gramming language, here you'll find header files
|
||
such as stdio.h, which declares functions such as
|
||
printf().
|
||
|
||
|
||
/usr/g++-include
|
||
/usr/g++-include contains include files for the
|
||
C++ compiler (much like /usr/include).
|
||
|
||
|
||
/usr/lib /usr/lib contains the "stub" and "static" library
|
||
equivalents to the files found in /lib. When com-
|
||
piling a program, the program is "linked" with the
|
||
libraries found in /usr/lib, which then directs the
|
||
program to look in /lib when it needs the actu-
|
||
al code in the library. In addition, various other
|
||
programs store configuration files in /usr/lib.
|
||
|
||
|
||
/usr/local /usr/local is a lot like /usr_it contains vari-
|
||
ous programs and files not essential to the system,
|
||
but which make the system fun and exciting. In
|
||
general, those programs found in /usr/local are
|
||
specialized for your system specifically_that is,
|
||
/usr/local differs greatly between UNIX system-
|
||
s.
|
||
|
||
Here, you'll find large software packages such as
|
||
TEX (a document formatting system) and Emacs
|
||
(a large and powerful editor), if you installed them.
|
||
|
||
|
||
/usr/man This directory contains the actual man pages. There
|
||
are two subdirectories for every man page "sec-
|
||
tion" (use the command man man for details). For
|
||
example, /usr/man/man1 contains the source (that
|
||
is, the unformatted original) for man pages in sec-
|
||
tion 1, and /usr/man/cat1 contains the formatted
|
||
man pages for section 1.
|
||
|
||
|
||
/usr/spool /usr/spool contains files which are to be "spooled"
|
||
to another program. For example, if your machine
|
||
is connected to a network, incoming mail will be
|
||
stored in /usr/spool/mail, until you read it or
|
||
delete it. Outgoing or incoming news articles may
|
||
be found in /usr/spool/news, and so on.
|
||
|
||
|
||
/usr/src /usr/src contains the source code (the uncom-
|
||
piled program) for various programs on your sys-
|
||
tem. The most important thing here is /usr/src/linux,
|
||
which contains the source code for the Linux ker-
|
||
nel.
|
||
|
||
|
||
/usr/tmp Another directory used for temporary files, like
|
||
/tmp.
|
||
|
||
|
||
4.6 Types of shells
|
||
|
||
|
||
As I have mentioned too many times before, UNIX is a multitask-
|
||
ing, multiuser operating system. Multitasking is very useful, and
|
||
once you get used to it, you'll use it all of the time. Before long,
|
||
you'll be able to run programs in the "background", switch be-
|
||
tween multiple tasks, and "pipeline" programs together to achieve
|
||
complicated results with a single command.
|
||
|
||
Many of the features we'll be covering in this section are fea-
|
||
tures provided by the shell itself. Be careful not to confuse UNIX
|
||
(the actual operating system) with the shell_the shell is just an
|
||
interface to the underlying system. The shell provides a great deal
|
||
of functionality on top of UNIX itself.
|
||
|
||
The shell is not only an interpreter for your interactive com-
|
||
mands, which you type at the prompt. It is also a powerful pro-
|
||
gramming language, which allows you to write shell scripts, to
|
||
"batch" several shell commands together in a file. MS-DOS users
|
||
will recognize the similarity to "batch files". Use of shell scripts is
|
||
a very powerful tool, which will allow you to automate and expand
|
||
you usage of UNIX. See Section 4.11.1 for more information.
|
||
|
||
There are several types of shells in the UNIX world. The two
|
||
major types are the "Bourne shell" and the "C shell". The Bourne
|
||
shell uses a command syntax like the original shell on early UNIX
|
||
systems, such as System III. The name of the Bourne shell on most
|
||
UNIX systems is /bin/sh (where sh stands for "shell"). The C
|
||
shell (not to be confused with sea shell) uses a different syntax,
|
||
somewhat like the programming language C, and on most UNIX
|
||
systems is named /bin/csh.
|
||
|
||
Under Linux, there are several variations of these shells avail-
|
||
able. The two most commonly used are the Bourne Again Shell,
|
||
or "Bash" (/bin/bash), and Tcsh (/bin/tcsh). Bash is a form of
|
||
the Bourne shell with many of the advanced features found in the
|
||
C shell. Because Bash supports a superset of the Bourne shell syn-
|
||
tax, any shell scripts written in the standard Bourne shell should
|
||
work with Bash. For those who prefer to use the C shell syntax,
|
||
Linux supports Tcsh, which is an expanded version of the original
|
||
C shell.
|
||
|
||
The type of shell that you decide to use is mostly a religious
|
||
issue. Some folks prefer the Bourne shell syntax with the advanced
|
||
features of Bash, and some prefer the more structured C shell syn-
|
||
tax. As far as normal commands, such as cp and ls, are concerned,
|
||
the type of shell you're using doesn't matter_the syntax is the
|
||
same. Only when you start to write shell scripts or use some of
|
||
the advanced features of the shell do the differences between shell
|
||
types begin to matter.
|
||
|
||
As we're discussing some of the features of the shell, below, we'll
|
||
note those differences between Bourne and C shells. However, for
|
||
the purposes of this manual, most of those differences are minimal.
|
||
(If you're really curious at this point, read the man pages for bash
|
||
and tcsh).
|
||
|
||
|
||
4.7 Wildcards
|
||
|
||
|
||
A key feature of most Unix shells is the ability to reference more
|
||
than one filename using special characters. These so-called wild-
|
||
cards allow you to refer to, say, all filenames which contain the
|
||
character "n".
|
||
|
||
The wildcard "*" refers to any character or string of characters
|
||
in a filename. For example, when you use the character "*" in a
|
||
filename, the shell replaces it with all possible substitutions from
|
||
filenames in the directory which you're referencing.
|
||
|
||
Here's a quick example. Let's suppose that Larry has the files
|
||
frog, joe, and stuff in his current directory.
|
||
|
||
|
||
/home/larry# ls
|
||
frog joe stuff
|
||
/home/larry#
|
||
|
||
|
||
To access all files with the letter "o" in the filename, we can
|
||
use the command
|
||
|
||
|
||
/home/larry# ls *o*
|
||
frog joe
|
||
/home/larry#
|
||
|
||
|
||
As you can see, the use of the "*" wildcard was replaced with all
|
||
substitutions which matched the wildcard from filenames in the
|
||
current directory.
|
||
|
||
The use of "*" by itself simply matches all filenames, because
|
||
all characters match the wildcard.
|
||
|
||
|
||
/home/larry# ls *
|
||
frog joe stuff
|
||
/home/larry#
|
||
|
||
|
||
Here are a few more examples.
|
||
|
||
|
||
/home/larry# ls f*
|
||
frog
|
||
/home/larry# ls *ff
|
||
stuff
|
||
/home/larry# ls *f*
|
||
frog stuff
|
||
/home/larry# ls s*f
|
||
stuff
|
||
/home/larry#
|
||
|
||
|
||
The process of changing a "*" into filenames is called wild-
|
||
card expansion and is done by the shell. This is important: the
|
||
individual commands, such as ls, never see the "*" in their list of
|
||
parameters. The shell expands the wildcard to include all of the
|
||
filenames which match. So, the command
|
||
|
||
|
||
/home/larry# ls *o*
|
||
|
||
|
||
is expanded by the shell to actually be
|
||
|
||
|
||
/home/larry# ls frog joe
|
||
|
||
|
||
One important note about the "*" wildcard. Using this wild-
|
||
card will not match filenames which begin with a single period
|
||
("."). These files are treated as "hidden" files_while they are not
|
||
really hidden, they don't show up on normal ls listings, and aren't
|
||
touched by the use of the "*" wildcard.
|
||
|
||
Here's an example. We already mentioned that each directory
|
||
has two special entries in it: "." refers to the current directory,
|
||
and ".." refers to the parent directory. However, when you use
|
||
ls, these two entries don't show up.
|
||
|
||
|
||
/home/larry# ls
|
||
frog joe stuff
|
||
/home/larry#
|
||
|
||
|
||
If you use the -a switch with ls, however, you can display filenames
|
||
which begin with ".". Observe:
|
||
|
||
|
||
/home/larry# ls -a
|
||
. .. .bash_profile .bashrc frog joe stuff
|
||
/home/larry#
|
||
|
||
|
||
Now we can see the two special entries, "." and "..", as well as
|
||
two other "hidden" files_.bash_profile and .bashrc. These two
|
||
files are startup files used by bash when larry logs in. More on
|
||
them in Section 4.11.3.
|
||
|
||
Note that when we use the "*" wildcard, none of the filenames
|
||
beginning with "." are displayed.
|
||
|
||
|
||
/home/larry# ls *
|
||
frog joe stuff
|
||
/home/larry#
|
||
|
||
|
||
This is a safety feature: if the "*" wildcard matched filenames
|
||
beginning with ".", it would also match the directory names "."
|
||
and "..". This can be dangerous when using certain commands.
|
||
|
||
Another wildcard is "?". The "?" wildcard will only expand
|
||
a single character. Thus, "ls ?" will display all one character
|
||
filenames, and "ls termca?" would display "termcap" but not
|
||
"termcap.backup". Here's another example:
|
||
|
||
|
||
/home/larry# ls j?e
|
||
joe
|
||
/home/larry# ls f ??g
|
||
frog
|
||
/home/larry# ls ????f
|
||
stuff
|
||
/home/larry#
|
||
|
||
|
||
As you can see, wildcards allow you to specify many files at one
|
||
time. In the simple command summary, in Section 4.4, we said
|
||
that the cp and mv commands actually can copy or move multiple
|
||
files at one time. For example,
|
||
|
||
|
||
/home/larry# cp /etc/s* /home/larry
|
||
|
||
|
||
will copy all filenames in /etc beginning with "s" to the directory
|
||
/home/larry. Therefore, the format of the cp command is really
|
||
|
||
|
||
cp <file1> <file2> <file3> ...<fileN> <destination>
|
||
|
||
|
||
where <file1> through <fileN> is a list of filenames to copy, and
|
||
<destination> is the destination file or directory to copy them to.
|
||
mv has an identical syntax.
|
||
|
||
Note that if you are copying or moving more than one file, the
|
||
<destination> must be a directory. You can only copy or move a
|
||
single file to another file.
|
||
|
||
|
||
4.8 UNIX Plumbing
|
||
|
||
|
||
4.8.1 Standard input and output
|
||
|
||
|
||
Many UNIX commands get input from what is known as stan-
|
||
dard input and send their output to standard output (often
|
||
abbreviated as "stdin" and "stdout"). Your shell sets things up so
|
||
that standard input is your keyboard, and standard output is the
|
||
screen.
|
||
|
||
Here's an example using the command cat. Normally, cat
|
||
reads data from all of the filenames given on the command line and
|
||
sends this data directly to stdout. Therefore, using the command
|
||
|
||
|
||
/home/larry/papers# cat history-final masters-thesis
|
||
|
||
|
||
will display the contents of the file history-final followed by
|
||
masters-thesis.
|
||
|
||
However, if no filenames are given to cat as parameters, it
|
||
instead reads data from stdin, and sends it back to stdout. Here's
|
||
an example.
|
||
|
||
|
||
/home/larry/papers# cat
|
||
Hello there.
|
||
Hello there.
|
||
Bye.
|
||
Bye.
|
||
[ctrl-D]
|
||
/home/larry/papers#
|
||
|
||
|
||
As you can see, each line that the user types (displayed in italics)
|
||
is immediately echoed back by the cat command. When reading
|
||
from standard input, commands know that the input is "finished"
|
||
when they receive an EOT (end-of-text) signal. In general, this is
|
||
generated by pressing [ctrl-D].
|
||
|
||
Here's another example. The command sort reads in lines of
|
||
text (again, from stdin, unless files are given on the command line),
|
||
and sends the sorted output to stdout. Try the following.
|
||
|
||
|
||
/home/larry/papers# sort
|
||
bananas
|
||
carrots
|
||
apples
|
||
[ctrl-D]
|
||
apples
|
||
bananas
|
||
carrots
|
||
/home/larry/papers#
|
||
|
||
|
||
Now we can alphabetize our shopping list... isn't UNIX useful?
|
||
|
||
|
||
4.8.2 Redirecting input and output
|
||
|
||
|
||
Now, let's say that we wanted to send the output of sort to a file,
|
||
to save our shopping list elsewhere. The shell allows us to redirect
|
||
standard output to a filename, using the ">" symbol. Here's how
|
||
it works.
|
||
|
||
|
||
/home/larry/papers# sort > shopping-list
|
||
bananas
|
||
carrots
|
||
apples
|
||
[ctrl-D]
|
||
/home/larry/papers#
|
||
|
||
|
||
As you can see, the result of the sort command isn't displayed,
|
||
instead it's saved to the file shopping-list. Let's look at this file.
|
||
|
||
|
||
/home/larry/papers# cat shopping-list
|
||
apples
|
||
bananas
|
||
carrots
|
||
/home/larry/papers#
|
||
|
||
|
||
Now we can sort our shopping list, and save it, too! But let's
|
||
suppose that we were storing our unsorted, original shopping list
|
||
in the file items. One way of sorting the information and saving it
|
||
to a file would be to give sort the name of the file to read, in lieu
|
||
of standard input, and redirect standard output as we did above.
|
||
As so:
|
||
|
||
|
||
/home/larry/papers# sort items > shopping-list
|
||
/home/larry/papers# cat shopping-list
|
||
apples
|
||
bananas
|
||
carrots
|
||
/home/larry/papers#
|
||
|
||
|
||
However, there's another way of doing this. Not only can we redi-
|
||
rect standard output, but we can redirect standard input as well,
|
||
using the "<" symbol.
|
||
|
||
|
||
/home/larry/papers# sort < items
|
||
apples
|
||
bananas
|
||
carrots
|
||
/home/larry/papers#
|
||
|
||
|
||
Technically, sort < items is equivalent to sort items, but the
|
||
former allows us to demonstrate the point: sort < items behaves
|
||
as if the data in the file items was typed to standard input. The
|
||
shell handles the redirection. sort wasn't given the name of the
|
||
file (items) to read; as far as sort is concerned, it was still read-
|
||
ing from standard input as if you had typed the data from your
|
||
keyboard.
|
||
|
||
This introduces the concept of a filter. A filter is a program
|
||
which reads data from standard input, processes it in some way, and
|
||
sends the processed data to standard output. Using redirection,
|
||
standard input and/or standard output can be referenced from
|
||
files. sort is a simple filter: it sorts the incoming data and sends
|
||
the result to standard output. cat is even simpler: it doesn't do
|
||
anything with the incoming data, it simply outputs whatever was
|
||
given to it.
|
||
|
||
|
||
4.8.3 Using pipes
|
||
|
||
|
||
We've already demonstrated how to use sort as a filter. However,
|
||
these examples assumed that you had data in a file somewhere, or
|
||
were willing to type the data to standard input yourself. What
|
||
if the data you wanted to sort came from the output of another
|
||
command, such as ls? For example, using the -r option with
|
||
sort sorts the data in reverse-alphabetical order. If you wanted to
|
||
list the files in your current directory in reverse order, one way to
|
||
do it would be:
|
||
|
||
|
||
/home/larry/papers# ls
|
||
english-list
|
||
history-final
|
||
masters-thesis
|
||
notes
|
||
/home/larry/papers# ls > file-list
|
||
/home/larry/papers# sort -r file-list
|
||
notes
|
||
masters-thesis
|
||
history-final
|
||
english-list
|
||
/home/larry/papers#
|
||
|
||
|
||
Here, we saved the output of ls in a file, and then ran sort -r on
|
||
that file. But this is unwieldy and causes us to use a temporary
|
||
file to save the data from ls.
|
||
|
||
The solution is to use pipelining. Pipelining is another feature
|
||
of the shell which allows you to connect a string of commands in
|
||
a "pipe", where the stdout of the first command is sent directly
|
||
to the stdin of the second command, and so on. Here, we wish to
|
||
send the stdout of ls to the stdin of sort. The "|" symbol is used
|
||
to create a pipe:
|
||
|
||
|
||
/home/larry/papers# ls | sort -r
|
||
notes
|
||
masters-thesis
|
||
history-final
|
||
english-list
|
||
/home/larry/papers#
|
||
|
||
|
||
This command is much shorter, and obviously easier to type.
|
||
|
||
Another useful example---using the command
|
||
|
||
|
||
/home/larry/papers# ls /usr/bin
|
||
|
||
|
||
is going to display a long list a files, most of which will fly past the
|
||
screen too quickly for you to read them. Instead, let's use more to
|
||
display the list of files in /usr/bin.
|
||
|
||
|
||
/home/larry/papers# ls /usr/bin | more
|
||
|
||
|
||
Now you can page down the list of files at your own leisure.
|
||
|
||
But the fun doesn't stop here! We can pipe more than two
|
||
commands together. The command head is a filter which displays
|
||
the first lines from an input stream (here, input from a pipe). If
|
||
we wanted to display the last filename in alphabetical order in the
|
||
current directory, we can use:
|
||
|
||
|
||
/home/larry/papers# ls | sort -r | head -1
|
||
notes
|
||
/home/larry/papers#
|
||
|
||
|
||
where head -1 simply displays the first line of input that it receives
|
||
(in this case, the stream of reverse-sorted data from ls).
|
||
|
||
|
||
4.8.4 Non-destructive redirection
|
||
|
||
|
||
Using ">" to redirect output to a file is destructive: in other words,
|
||
the command
|
||
|
||
|
||
/home/larry/papers# ls > file-list
|
||
|
||
|
||
overwrites the contents of the file file-list. If, instead, you redi-
|
||
rect with the symbol ">>", the output will be appended to the
|
||
named file, instead of overwriting it.
|
||
|
||
|
||
/home/larry/papers# ls >> file-list
|
||
|
||
|
||
will append the output of the ls command to file-list.
|
||
|
||
Just keep in mind that redirection and using pipes are features
|
||
provided by the shell_the shell provides this handy syntax using
|
||
">" and ">>" and "_". It has nothing to do with the commands
|
||
used themselves, but the shell.
|
||
|
||
|
||
4.9 File Permissions
|
||
|
||
|
||
4.9.1 Concepts of file permissions
|
||
|
||
|
||
Because there are multiple users on a UNIX system, in order to
|
||
protect individual user's files from tampering by other users, UNIX
|
||
provides a mechanism known as file permissions. This mechanis-
|
||
m allows files and directories to be "owned" by a particular user.
|
||
As an example, because Larry created the files in his home direc-
|
||
tory, Larry owns those files, and has access to them.
|
||
|
||
UNIX also allows files to be shared between users and groups of
|
||
users. If Larry so desired, he could cut off access to his files, such
|
||
that no other user could access them. However, on most systems
|
||
the default is to allow other users to read your files, but not modify
|
||
or delete them in any way.
|
||
|
||
As explained above, every file is owned by a particular user.
|
||
However, files are also owned by a particular group, which is a
|
||
system-defined group of users. Every user is placed into at least
|
||
one group when that user is created. However, the system admin-
|
||
istrator may also grant the user access to more than one group.
|
||
|
||
Groups are usually defined by the type of users which access the
|
||
machine. For example, on a university UNIX system, users may be
|
||
placed into the groups student, staff, faculty or guest. There
|
||
are also a few system-defined groups (such as bin and admin) which
|
||
are used by the system itself to control access to resources_very
|
||
rarely do actual users belong to these system groups.
|
||
|
||
Permissions fall into three main divisions: read, write, and ex-
|
||
ecute. These permissions may be granted to three classes of users:
|
||
the owner of the file, the group to which the file belongs, and to all
|
||
users, regardless of group.
|
||
|
||
Read permission allows a user to read the contents of the file, or
|
||
in the case of directories, to list the contents of the directory (using
|
||
ls). Write permission allows the user to write to and modify the
|
||
file. For directories, write permission allows the user to create new
|
||
files or delete files within that directory. Finally, execute permission
|
||
allows the user to run the file as a program or shell script (if the file
|
||
happens to be a program or shell script, that is). For directories,
|
||
having execute permission allows the user to cd into the directory
|
||
in question.
|
||
|
||
|
||
4.9.2 Interpreting file permissions
|
||
|
||
|
||
Let's look at an example to demonstrate file permissions. Using
|
||
the ls command with the -l option will display a "long" listing of
|
||
the file, including file permissions.
|
||
|
||
|
||
/home/larry/foo# /home/larry/foo# ls -l stuff
|
||
|
||
-rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff
|
||
|
||
|
||
/home/larry/foo#
|
||
|
||
|
||
The first field printed in the listing represents the file permis-
|
||
sions. The third field is the owner of the file (larry), and the fourth
|
||
field is the group to which the file belongs (users). Obviously, the
|
||
last field is the name of the file (stuff), and we'll cover the other
|
||
fields later.
|
||
|
||
This file is owned by larry, and belongs to the group users.
|
||
Let's look at the file permissions. The string -rw-r--r-- lists, in
|
||
order, the permissions granted to the file's owner, the file's group,
|
||
and everybody else.
|
||
|
||
The first character of the permissions string ("-") represents the
|
||
type of file. A "-" just means that this is a regular file (as opposed
|
||
to a directory or device driver). The next three letters ("rw-")
|
||
represent the permissions granted to the file's owner, larry. The
|
||
"r" stands for "read" and the "w" stands for "write". Thus, larry
|
||
has read and write permission to the file stuff.
|
||
|
||
As we mentioned, besides read and write permission, there is
|
||
also "execute" permission_represented by an "x". However, there
|
||
is a "-" here in place of the "x", so Larry doesn't have execute
|
||
permission on this file. This is fine, the file stuff isn't a program
|
||
of any kind. Of course, because Larry owns the file, he may grant
|
||
himself execute permission for the file if he so desires. This will be
|
||
covered shortly.
|
||
|
||
The next three characters, r--, represent the group's permis-
|
||
sions on the file. The group which owns this file is users. Because
|
||
only an "r" appears here, any user which belongs to the group
|
||
users may read this file.
|
||
|
||
The last three characters, also r--, represent the permissions
|
||
granted to every other user on the system (other than the owner
|
||
of the file and those in the group users). Again, because only an
|
||
"r" is present, other users may read the file, but not write to it or
|
||
execute it.
|
||
|
||
Here are some other examples of group permissions.
|
||
|
||
|
||
-rwxr-xr-x The owner of the file may read, write, and execute
|
||
the file. Users in the file's group, and all other
|
||
users, may read and execute the file.
|
||
|
||
|
||
-rw------- The owner of the file may read and write the file.
|
||
No other user can access the file.
|
||
|
||
|
||
-rwxrwxrwx All users may read, write, and execute the file.
|
||
|
||
|
||
4.9.3 Dependencies
|
||
|
||
|
||
It is important to note that the permissions granted to a file also
|
||
depend on the permissions of the directory in which the file is
|
||
located. For example, even if a file is set to -rwxrwxrwx, other users
|
||
cannot access the file unless they have read and execute access to
|
||
the directory in which the file is located. For example, if Larry
|
||
wanted to restrict access to all of his files, he could simply set the
|
||
permissions on his home directory /home/larry to -rwx------.
|
||
In this way, no other user has access to his directory, and all files
|
||
and directories within it. Larry doesn't need to worry about the
|
||
individual permissions on each of his files.
|
||
|
||
In other words, to access a file at all, you must have read and
|
||
execute access to all directories along the file's pathname.
|
||
|
||
Usually, users on a UNIX system are very open with their files.
|
||
The usual set of permissions given to files is -rw-r--r--, which
|
||
will allow other users to read the file, but not change it in any way.
|
||
The usual set of permissions given to directories is -rwxr-xr-x,
|
||
which will allow other users to look through your directories, but
|
||
not create or delete files within them.
|
||
|
||
However, many users wish to keep other users out of their files.
|
||
Setting the permissions of a file to -rw------- will not allow any
|
||
other user to access the file. Likewise, setting the permissions of a
|
||
directory to -rwx------ will keep other users out of the directory
|
||
in question.
|
||
|
||
|
||
4.9.4 Changing permissions
|
||
|
||
|
||
The command chmod is used to set the permissions on a file. Only
|
||
the owner of a file may change the permissions on that file. The
|
||
syntax of chmod is:
|
||
|
||
|
||
chmod {a,u,g,o}{+,-}{r,w,x} <filenames>
|
||
|
||
|
||
Briefly, you supply one or more of all, user, group, or other.
|
||
Then you specify whether you are adding rights (+) or taking them
|
||
away (-). Finally, you specify one or more of read, write, and
|
||
execute. Some examples of legal commands are:
|
||
|
||
|
||
chmod a+r stuff
|
||
Gives all users read access to the file.
|
||
|
||
|
||
chmod +r stuff
|
||
Same as above_if none of a, u, g, or o is specified,
|
||
a is assumed.
|
||
|
||
|
||
chmod og-x stuff
|
||
Remove execute permission from users other than
|
||
the owner.
|
||
|
||
|
||
chmod u+rwx stuff
|
||
Allow the owner of the file to read, write, and
|
||
execute the file.
|
||
|
||
|
||
chmod o-rwx stuff
|
||
Remove read, write, and execute permission from
|
||
users other than the owner and users in the file's
|
||
group.
|
||
|
||
|
||
4.10 Job Control
|
||
|
||
|
||
4.10.1 Jobs and processes
|
||
|
||
|
||
Job control is a feature provided by many shells (Bash and Tcsh
|
||
included) which allows you to control multiple running commands,
|
||
or jobs, at once. Before we can delve much further, we need to
|
||
talk about processes.
|
||
|
||
Every time you run a program, you start what is known as a
|
||
process_which is just a fancy name for a running program. The
|
||
command ps displays a list of currently running processes. Here's
|
||
an example:
|
||
|
||
|
||
/home/larry# ps
|
||
|
||
|
||
PID TT STAT TIME COMMAND
|
||
24 3 S 0:03 (bash)
|
||
161 3 R 0:00 ps
|
||
|
||
|
||
/home/larry#
|
||
|
||
|
||
The PID listed in the first column is the process ID, a unique num-
|
||
ber given to every running process. The last column, COMMAND, is
|
||
the name of the running command. Here, we're only looking at
|
||
the processes which Larry is currently running (*Note: There are
|
||
many other processes running on the system as well_"ps -aux"
|
||
lists them all.). These are bash (Larry's shell), and the ps com-
|
||
mand itself. As you can see, bash is running concurrently with
|
||
the ps command. bash executed ps when Larry typed the com-
|
||
mand. After ps is finished running (after the table of processes is
|
||
displayed), control is returned to the bash process, which displays
|
||
the prompt, ready for another command.
|
||
|
||
A running process is known as a job to the shell. The terms
|
||
process and job are interchangeable. However, a process is usually
|
||
referred to as a "job" when used in conjunction with job control_
|
||
a feature of the shell which allows you to switch between several
|
||
independent jobs.
|
||
|
||
In most cases users are only running a single job at a time_that
|
||
being whatever command they last typed to the shell. However,
|
||
using job control, you can run several jobs at once, switching be-
|
||
tween them as needed. How might this be useful? Let's say that
|
||
you're editing a text file and need to suddenly interrupt your edit-
|
||
ing and do something else. With job control, you can temporarily
|
||
suspend the editor, and back at the shell prompt start to work on
|
||
something else. When you're done, you can start the editor back
|
||
up, and be back where you started, as if you never left the editor.
|
||
This is just one example. There are many practical uses for job
|
||
control.
|
||
|
||
|
||
4.10.2 Foreground and background
|
||
|
||
|
||
Jobs can either be in the foreground or in the background.
|
||
There can only be one job in the foreground at any one time. The
|
||
foreground job is the job which you interact with_it receives in-
|
||
put from the keyboard and sends output to your screen. (Unless,
|
||
of course, you have redirected input or output, as described in
|
||
Section 4.8). On the other hand, jobs in the background do not
|
||
receive input from the terminal_in general, they run along quietly
|
||
without need for interaction.
|
||
|
||
Some jobs take a long time to finish, and don't do anything
|
||
interesting while they are running. Compiling programs is one
|
||
such job, as is compressing a large file. There's no reason why
|
||
you should sit around being bored while these jobs complete their
|
||
tasks; you can just run them in the background. While the jobs
|
||
are running in the background, you are free to run other programs.
|
||
|
||
Jobs may also be suspended. A suspended job is a job that
|
||
is not currently running, but is temporarily stopped. After you
|
||
suspend a job, you can tell the job to continue, in the foreground
|
||
or the background as needed. Resuming a suspended job will not
|
||
change the state of the job in any way_the job will continue to
|
||
run where it left off.
|
||
|
||
Note that suspending a job is not equal to interrupting a job.
|
||
When you interrupt a running process (by hitting your interrupt
|
||
key, which is usually [ctrl-C]) (*Note: The interrupt key can be set
|
||
using the stty command. The default on most systems is [ctrl-C],
|
||
but we can't guarantee the same for your system.), it kills
|
||
the process, for good. Once the job is killed, there's no hope of
|
||
resuming it; you'll have to re-run the command. Also note that
|
||
some programs trap the interrupt, so that hitting [ctrl-C] won't
|
||
immediately kill the job. This is to allow the program to perform
|
||
any necessary cleanup operations before exiting. In fact, some
|
||
programs simply don't allow you to kill them with an interrupt
|
||
at all.
|
||
|
||
|
||
4.10.3 Backgrounding and killing jobs
|
||
|
||
|
||
Let's begin with a simple example. The command yes is a seem-
|
||
ingly useless command which sends an endless stream of y's to
|
||
standard output. (This is actually useful. If you piped the output
|
||
of yes to another command which asked a series of yes and no
|
||
questions, the stream of y's would confirm all of the questions.)
|
||
|
||
Try it out.
|
||
|
||
|
||
/home/larry# yes
|
||
y
|
||
y
|
||
y
|
||
y
|
||
y
|
||
|
||
|
||
The y's will continue ad infinitum. You can kill the process by
|
||
hitting your interrupt key, which is usually [ctrl-C]. So that we
|
||
don't have to put up with the annoying stream of y's, let's redirect
|
||
the standard output of yes to /dev/null. As you may remember,
|
||
/dev/null acts as a "black hole" for data. Any data sent to it will
|
||
disappear. This is a very effective method of quieting an otherwise
|
||
verbose program.
|
||
|
||
|
||
/home/larry# yes > /dev/null
|
||
|
||
|
||
Ah, much better. Nothing is printed, but the shell prompt doesn't
|
||
come back. This is because yes is still running, and is sending those
|
||
inane y's to /dev/null. Again, to kill the job, hit the interrupt
|
||
key.
|
||
|
||
Let's suppose that we wanted the yes command to continue to
|
||
run, but wanted to get our shell prompt back to work on other
|
||
things. We can put yes into the background, which will allow it to
|
||
run, but without need for interaction.
|
||
|
||
One way to put a process in the background is to append an
|
||
"&" character to the end of the command.
|
||
|
||
|
||
/home/larry# yes > /dev/null &
|
||
[1] 164
|
||
/home/larry#
|
||
|
||
|
||
As you can see, we have our shell prompt back. But what is this
|
||
"[1] 164"? And is the yes command really running?
|
||
|
||
The "[1]" represents the job number for the yes process.
|
||
The shell assigns a job number to every running job. Because yes
|
||
is the one and only job that we're currently running, it is assigned
|
||
job number 1. The "164" is the process ID, or PID, number given
|
||
by the system to the job. Either number may be used to refer to
|
||
the job, as we'll see later.
|
||
|
||
You now have the yes process running in the background, con-
|
||
tinuously sending a stream of y's to /dev/null. To check on the
|
||
status of this process, use the shell internal command jobs.
|
||
|
||
|
||
/home/larry# jobs
|
||
[1]+ Running yes >/dev/null &
|
||
/home/larry#
|
||
|
||
|
||
Sure enough, there it is. You could also use the ps command as
|
||
demonstrated above to check on the status of the job.
|
||
|
||
To terminate the job, use the command kill. This command
|
||
takes either a job number or a process ID number as an argument.
|
||
This was job number 1, so using the command
|
||
|
||
|
||
/home/larry# kill %1
|
||
|
||
|
||
will kill the job. When identifying the job with the job number,
|
||
you must prefix the number with a percent ("%") character.
|
||
|
||
Now that we've killed the job, we can use jobs again to check
|
||
on it:
|
||
|
||
|
||
/home/larry# jobs
|
||
|
||
[1]+ Terminated yes >/dev/null
|
||
|
||
/home/larry#
|
||
|
||
|
||
The job is in fact dead, and if we use the jobs command again
|
||
nothing should be printed.
|
||
|
||
You can also kill the job using the process ID (PID) number,
|
||
which is printed along with the job ID when you start the job. In
|
||
our example, the process ID is 164, so the command
|
||
|
||
|
||
/home/larry# kill 164
|
||
|
||
|
||
is equivalent to
|
||
|
||
|
||
/home/larry# kill %1
|
||
|
||
|
||
You don't need to use the "%" when referring to a job by its process
|
||
ID.
|
||
|
||
|
||
4.10.4 Stopping and restarting jobs
|
||
|
||
|
||
There is another way to put a job into the background. You can
|
||
start the job normally (in the foreground), stop the job, and then
|
||
restart it in the background. We'll demonstrate this below.
|
||
|
||
First, start the yes process in the foreground, as you normally
|
||
would:
|
||
|
||
|
||
/home/larry# yes > /dev/null
|
||
|
||
|
||
Again, because yes is running in the foreground, you shouldn't get
|
||
your shell prompt back.
|
||
|
||
Now, instead of interrupting the job with [ctrl-C], we'll suspend
|
||
the job. Suspending a job doesn't kill it: it only temporarily stops
|
||
the job until you restart it. To do this, you hit the suspend key,
|
||
which is usually [ctrl-Z].
|
||
|
||
|
||
/home/larry# yes > /dev/null
|
||
[ctrl-Z]
|
||
[1]+ Stopped yes >/dev/null
|
||
/home/larry#
|
||
|
||
|
||
While the job is suspended, it's simply not running. No CPU time
|
||
or memory is used for the job. However, you can restart the job,
|
||
which will cause the job to run again as if nothing ever happened.
|
||
It will continue to run where it left off.
|
||
|
||
To restart the job in the foreground, use the command fg (for
|
||
"foreground").
|
||
|
||
|
||
/home/larry# fg
|
||
yes >/dev/null
|
||
|
||
|
||
The shell prints the name of the command again so you're aware
|
||
of which job you just put into the foreground. Stop the job again,
|
||
with [ctrl-Z]. This time, use the command bg to put the job into
|
||
the background. This will cause the command to run just as if you
|
||
started the command with "&" as in the last section.
|
||
|
||
|
||
/home/larry# bg
|
||
[1]+ yes >/dev/null &
|
||
/home/larry#
|
||
|
||
|
||
And we have our prompt back. jobs should report that yes is
|
||
indeed running, and we can kill the job with kill as we did before.
|
||
|
||
How can we stop the job again? Using [ctrl-Z] won't work,
|
||
because the job is in the background. The answer is to put the job
|
||
in the foreground, with fg, and then stop it. As it turns out you
|
||
can use fg on either stopped jobs or jobs in the background.
|
||
|
||
There is a big difference between a job in the background and
|
||
a job which is stopped. A stopped job is not running_it's not
|
||
taking up CPU time or memory, and it's not doing any work. A
|
||
job in the background is running, and using memory, as well as
|
||
completing some task while you do other work. However, a job in
|
||
the background may try to display text on to your terminal, which
|
||
can be annoying if you're trying to work on something else. For
|
||
example, if you used the command
|
||
|
||
|
||
/home/larry# yes &
|
||
|
||
|
||
without redirecting stdout to /dev/null, a stream of y's would
|
||
be printed to your screen, without any way of interrupting it (you
|
||
can't use [ctrl-C] to interrupt jobs in the background). In order to
|
||
stop the endless y's, you'd have to use the kill command (without
|
||
being able to see what you're typing).
|
||
|
||
Another note. The fg and bg commands normally foreground
|
||
or background the job which was last stopped (indicated by a "+"
|
||
next to the job number when you use the command jobs). If you
|
||
are running multiple jobs at once, you can foreground or back-
|
||
ground a specific job by giving the job ID as an argument to fg or
|
||
bg, as in
|
||
|
||
|
||
/home/larry# fg %2
|
||
|
||
|
||
(to foreground job number 2), or
|
||
|
||
|
||
/home/larry# bg %3
|
||
|
||
|
||
(to background job number 3). You can't use process ID numbers
|
||
with fg or bg.
|
||
|
||
Furthermore, using the job number alone, as in
|
||
|
||
|
||
/home/larry# %2
|
||
|
||
|
||
is equivalent to
|
||
|
||
|
||
/home/larry# fg %2
|
||
|
||
|
||
Just remember that using job control is a feature of the shell.
|
||
The commands fg, bg and jobs are internal to the shell. If for
|
||
some reason you use a shell which does not support job control,
|
||
don't expect to find these commands available.
|
||
|
||
In addition, there are some aspects of job control which differ
|
||
between Bash and Tcsh. In fact, some shells don't provide job
|
||
control at all_however, most shells available for Linux support
|
||
job control.
|
||
|
||
|
||
4.11 Customizing your Environment
|
||
|
||
|
||
The shell provides many mechanisms to customize your work en-
|
||
vironment. As we've mentioned before, the shell is more than a
|
||
command interpreter_it is also a powerful programming language.
|
||
While writing shell scripts is an extensive subject, we'd like to in-
|
||
troduce you to some of the ways that you can simplify your work
|
||
on a UNIX system by using these advanced features of the shell.
|
||
|
||
As we have mentioned before, different shells use different syn-
|
||
taxes when executing shell scripts. For example, Tcsh uses a C-like
|
||
syntax, while Bourne shells use another type of syntax. In this sec-
|
||
tion, we won't be running into many of the differences between the
|
||
two, but we will assume that shell scripts are executed using the
|
||
Bourne shell syntax.
|
||
|
||
|
||
4.11.1 Shell scripts
|
||
|
||
|
||
Let's say that you use a series of commands often, and would like
|
||
to shorten the amount of required typing by grouping all of them
|
||
together into a single "command". For example, the commands
|
||
|
||
|
||
/home/larry# cat chapter1 chapter2 chapter3 > book
|
||
/home/larry# wc -l book
|
||
/home/larry# lp book
|
||
|
||
|
||
would concatenate the files chapter1, chapter2, and chapter3
|
||
and place the result in the file book. Then, a count of the number
|
||
of lines in book would be displayed, and finally book would be
|
||
printed with the lp command.
|
||
|
||
Instead of typing all of these commands, you could group them
|
||
into a shell script. We described shell scripts briefly in Sec-
|
||
tion 4.11.1. The shell script used to run all of these commands
|
||
would look like
|
||
|
||
|
||
#!/bin/sh
|
||
# A shell script to create and print the book
|
||
|
||
cat chapter1 chapter2 chapter3 > book
|
||
wc -l book
|
||
lp book
|
||
|
||
|
||
If this script was saved in the file makebook, you could simply use
|
||
the command
|
||
|
||
|
||
/home/larry# makebook
|
||
|
||
|
||
to run all of the commands in the script. Shell scripts are just plain
|
||
text files; you can create them with an editor such as emacs or vi.
|
||
|
||
Let's look at this shell script. The first line, "#!/bin/sh",
|
||
identifies the file as a shell script, and tells the shell how to execute
|
||
the script. It instructs the shell to pass the script to /bin/sh
|
||
for execution, where /bin/sh is the shell program itself. Why is
|
||
this important? On most UNIX systems, /bin/sh is a Bourne-
|
||
type shell, such as Bash. By forcing the shell script to run using
|
||
/bin/sh, we are ensuring that the script will run under a Bourne-
|
||
syntax shell (instead of, say, a C shell). This will cause your script
|
||
to run using the Bourne syntax even if you use Tcsh (or another C
|
||
shell) as your login shell.
|
||
|
||
The second line is a comment. Comments begin with the char-
|
||
acter "#" and continue to the end of the line. Comments are ignored
|
||
by the shell_they are commonly used to identify the shell script
|
||
to the programmer.
|
||
|
||
The rest of the lines in the script are just commands, as you
|
||
would type them to the shell directly. In effect, the shell reads each
|
||
line of the script and runs that line as if you had typed it at the
|
||
shell prompt.
|
||
|
||
Permissions are important for shell scripts. If you create a shell
|
||
script, you must make sure that you have execute permission on
|
||
the script in order to run it (*Note: When you create text files,
|
||
the default permissions usually don't include execute permission.).
|
||
The command
|
||
|
||
|
||
/home/larry# chmod u+x makebook
|
||
|
||
|
||
can be used to give yourself execute permission on the shell script
|
||
makebook.
|
||
|
||
|
||
4.11.2 Shell variables and the environment
|
||
|
||
|
||
The shell allows you to define variables, as most programming
|
||
languages do. A variable is just a piece of data which is given the
|
||
name.
|
||
|
||
Note that Tcsh, as well as other C-type shells, use a different
|
||
mechanism for setting variables than is described here. This dis-
|
||
cussion assumes the use of a Bourne shell, such as Bash (which
|
||
you're probably using). See the Tcsh man page for details.
|
||
|
||
When you assign a value to a variable (using the "=" operator),
|
||
you can access the variable by prepending a "$" to the variable
|
||
name, as demonstrated below.
|
||
|
||
|
||
/home/larry# foo="hello there"
|
||
|
||
|
||
The variable foo is given the value "hello there". You can now
|
||
refer to this value by the variable name, prefixed with a "$" char-
|
||
acter. The command
|
||
|
||
|
||
/home/larry# echo $foo
|
||
hello there
|
||
/home/larry#
|
||
|
||
|
||
produces the same results as
|
||
|
||
|
||
/home/larry# echo "hello there"
|
||
hello there
|
||
/home/larry#
|
||
|
||
|
||
These variables are internal to the shell. This means that only
|
||
the shell can access these variables. This can be useful in shell
|
||
scripts; if you need to keep track of a filename, for example, you
|
||
can store it in a variable, as above. Using the command set will
|
||
display a list of all defined shell variables.
|
||
|
||
However, the shell allows you to export variables to the en-
|
||
vironment. The environment is the set of variables which all
|
||
commands that you execute have access to. Once you define a
|
||
variable inside the shell, exporting it makes that variable part of
|
||
the environment as well. The export command is used to export
|
||
a variable to the environment.
|
||
|
||
Again, here we differ between Bash and Tcsh. If you're us-
|
||
ing Tcsh, another syntax is used for setting environment variables
|
||
(the setenv command is used). See the Tcsh man page for more
|
||
information.
|
||
|
||
The environment is very important to the UNIX system. It
|
||
allows you to configure certain commands just by setting variables
|
||
which the commands know about.
|
||
|
||
Here's a quick example. The environment variable PAGER is
|
||
used by the man command. It specifies the command to use to
|
||
display man pages one screenful at a time. If you set PAGER to be
|
||
the name of a command, it will use that command to display the
|
||
man pages, instead of more (which is the default).
|
||
|
||
Set PAGER to "cat". This will cause output from man to be
|
||
displayed to the screen all at once, without breaking it up into
|
||
pages.
|
||
|
||
|
||
/home/larry# PAGER="cat"
|
||
|
||
|
||
Now, export PAGER to the environment.
|
||
|
||
|
||
/home/larry# export PAGER
|
||
|
||
|
||
Try the command man ls. The man page should fly past your
|
||
screen without pausing for you.
|
||
|
||
Now, if we set PAGER to "more", the more command will be used
|
||
to display the man page.
|
||
|
||
|
||
/home/larry# PAGER="more"
|
||
|
||
|
||
Note that we don't have to use the export command after we
|
||
change the value of PAGER. We only need to export a variable once;
|
||
any changes made to it thereafter will automatically be propagated
|
||
to the environment.
|
||
|
||
The man pages for a particular command will tell you if the
|
||
command uses any environment variables; for example, the man
|
||
man page explains that PAGER is used to specify the pager com-
|
||
mand. Some commands share environment variables; for example,
|
||
many commands use the EDITOR environment variable to specify
|
||
the default editor to use when one is needed.
|
||
|
||
The environment is also used to keep track of important infor-
|
||
mation about your login session. An example is the HOME environ-
|
||
ment variable, which contains the name of your home directory.
|
||
|
||
|
||
/home/larry/papers# echo $HOME
|
||
/home/larry
|
||
|
||
|
||
Another interesting environment variable is PS1, which defines
|
||
the main shell prompt. For example,
|
||
|
||
|
||
/home/larry# PS1="Your command, please: "
|
||
Your command, please:
|
||
|
||
|
||
To set the prompt back to our usual (which contains the current
|
||
working directory followed by a "#" symbol),
|
||
|
||
|
||
Your command, please: PS1="\w# "
|
||
/home/larry#
|
||
|
||
|
||
The bash man page describes the syntax used for setting the prompt.
|
||
|
||
|
||
4.11.2.1 The PATH environment variable
|
||
|
||
|
||
When you use the ls command, how does the shell know where
|
||
to find the ls executable itself? In fact, ls is found in /bin/ls
|
||
on most systems. The shell uses the environment variable PATH to
|
||
locate executable files for commands which you type.
|
||
|
||
For example, your PATH variable may be set to:
|
||
|
||
|
||
/bin:/usr/bin:/usr/local/bin:.
|
||
|
||
|
||
This is a list of directories for the shell to search, each directory
|
||
separated by a ":". When you use the command ls, the shell first
|
||
looks for /bin/ls, then /usr/bin/ls, and so on.
|
||
|
||
Note that the PATH has nothing to do with finding regular files.
|
||
For example, if you use the command
|
||
|
||
|
||
/home/larry# cp foo bar
|
||
|
||
|
||
The shell does not use PATH to locate the files foo and bar_those
|
||
filenames are assumed to be complete. The shell only uses PATH to
|
||
locate the cp executable.
|
||
|
||
This saves you a lot of time; it means that you don't have to
|
||
remember where all of the command executables are stored. On
|
||
many systems, executables are scattered about in many places,
|
||
such as /usr/bin, /bin, or /usr/local/bin. Instead of giving the
|
||
command's full pathname (such as /usr/bin/cp), you can sim-
|
||
ply set PATH to the list of directories that you want the shell to
|
||
automatically search.
|
||
|
||
Notice that PATH contains ".", which is the current working
|
||
directory. This allows you to create a shell script or program and
|
||
run it as a command from your current directory, without having to
|
||
specify it directly (as in ./makebook). If a directory isn't on your
|
||
PATH, then the shell will not search it for commands to run_this
|
||
includes the current directory.
|
||
|
||
|
||
4.11.3 Shell initialization scripts
|
||
|
||
|
||
In addition to shell scripts that you create, there are a number of
|
||
scripts that the shell itself uses for certain purposes. The most
|
||
important of these are your initialization scripts, scripts auto-
|
||
matically executed by the shell when you login.
|
||
|
||
The initialization scripts themselves are simply shell scripts, as
|
||
described above. However, they are very useful in setting up your
|
||
environment by executing commands automatically when you lo-
|
||
gin. For example, if you always use the mail command to check
|
||
your mail when you login, you place the command in your initial-
|
||
ization script so it will be executed automatically.
|
||
|
||
Both Bash and Tcsh distinguish between a login shell and
|
||
other invocations of the shell. A login shell is a shell invoked at
|
||
login time; usually, it's the only shell which you'll use. However, if
|
||
you "shell out" of another program, such as vi, you start another
|
||
instance of the shell, which isn't your login shell. In addition,
|
||
whenever you run a shell script, you automatically start another
|
||
instance of the shell to execute the script.
|
||
|
||
The initialization files used by Bash are: /etc/profile (set up
|
||
by the system administrator, executed by all Bash users at login
|
||
time), $HOME/.bash_profile (executed by a login Bash session),
|
||
and $HOME/.bashrc (executed by all non-login instances of Bash).
|
||
|
||
Tcsh uses the following initialization scripts: /etc/login.csh
|
||
(executed by all Tcsh users at login time), $HOME/.tcshrc (execut-
|
||
ed a login time and by all new instances of Tcsh), and $HOME/.login
|
||
(executed at login time, following .tcshrc).
|
||
|
||
To fully understand the function of these files, you'll need to
|
||
learn more about the shell itself. Shell programming is a compli-
|
||
cated subject, far beyond the scope of this book. See the man
|
||
pages for bash and/or tcsh to learn more about customizing your
|
||
shell environment.
|
||
|
||
|
||
4.12 So You Want to Strike Out on Your Own?
|
||
|
||
|
||
Hopefully we have provided enough information to give you a ba-
|
||
sic idea of how to use the system. Keep in mind that most of the
|
||
interesting and important aspects of Linux aren't covered here_
|
||
these are the very basics. With this foundation, before long you'll
|
||
be up and running complicated applications and fulfilling the po-
|
||
tential of your system. If things don't seem exciting at first, don't
|
||
despair_there is much to be learned.
|
||
|
||
One indispensable tool for learning about the system is to read
|
||
the man pages. While many of the man pages may appear con-
|
||
fusing at first, if you dig beneath the surface there is a wealth of
|
||
information contained therein.
|
||
|
||
We also suggest reading a complete book on using a UNIX sys-
|
||
tem. There is much more to UNIX than meets the eye_unfortunately,
|
||
most of it is beyond the scope of this book. Some good UNIX books
|
||
to look at are listed in Appendix B.
|
||
|
||
|
||
|
||
Chapter 5
|
||
|
||
System Administration
|
||
|
||
|
||
|
||
This chapter is an overview to Linux system administration, in-
|
||
cluding a number of advanced features which aren't necessarily for
|
||
system administrators only. Just as every dog has its day, every
|
||
system has its administrator, and running the system is a very im-
|
||
portant and sometimes time-consuming job, even if you're the only
|
||
user on your system.
|
||
|
||
We have tried to cover here the most important things about
|
||
system administration you need to know when you use Linux, in
|
||
sufficient detail to get you comfortably started. In order to keep
|
||
it short and sweet, we have only covered the very basics, and have
|
||
skipped many an important detail. You should read the Linux Sys-
|
||
tem Administrator's Guide if you are serious about running Linux.
|
||
It will help you understand better how things work, and how they
|
||
hang together. At least skim through it so that you know what it
|
||
contains and know what kind of help you can expect from it.
|
||
|
||
|
||
5.1 About Root, Hats, and the Feeling of Power
|
||
|
||
|
||
As you know, UNIX differentiates between different users, so that
|
||
what they do to each other and to the system can be regulated
|
||
(one wouldn't want anybody to be able to read one's love letters,
|
||
for instance). Each user is given an account, which includes a
|
||
username, home directory, and so on. In addition to accounts giv-
|
||
en to real people, there are special system-defined accounts which
|
||
have special privileges. The most important of these is the root
|
||
account, for the username root.
|
||
|
||
|
||
5.1.1 The root account
|
||
|
||
|
||
Ordinary users are generally restricted so that they can't do harm
|
||
to anybody else on the system, just to themselves. File permissions
|
||
on the system are arranged such that normal users aren't allowed
|
||
to delete or modify files in directories shared by all users (such as
|
||
/bin and /usr/bin. Most users also protect their own files with
|
||
the appropriate file permissions so that other users can't access or
|
||
modify those files.
|
||
|
||
There are no such restrictions on root. The user root can read,
|
||
modify, or delete any file on the system, change permissions and
|
||
ownerships on any file, and run special programs, such as those
|
||
which partition the drive or create filesystems. The basic idea is
|
||
that the person or persons who run and take care of the system logs
|
||
in as root whenever it is necessary to perform tasks that cannot
|
||
be executed as a normal user. Because root can do anything, it is
|
||
easy to make mistakes that have catastrophic consequences when
|
||
logged in using this account.
|
||
|
||
For example, as a normal user, if you inadvertently attempt to
|
||
delete all of the files in /etc, the system will not permit you to do
|
||
so. However, when logged in as root, the system won't complain
|
||
at all. It is very easy to trash your system when using root. The
|
||
best way to prevent accidents is to:
|
||
|
||
|
||
o Sit on your hands before you press [return] on a command
|
||
which may cause damage. For example, if you're about to
|
||
clean out a directory, before hitting [return], re-read the
|
||
entire command and make sure that it is correct.
|
||
|
||
o Don't get accustomed to using root. The more comfortable
|
||
you are in the role of the root user, the more likely you are
|
||
to confuse your privileges with those of a normal user. For
|
||
example, you might think that you're logged in as larry,
|
||
when you're really logged in as root.
|
||
|
||
o Use a different prompt for the root account. You should
|
||
change root's .bashrc or .login file to set the shell promp-
|
||
t to something other than your regular user prompt. For
|
||
example, many people use the character "$" in prompts for
|
||
regular users, and reserve the character "#" for the root user
|
||
prompt.
|
||
|
||
o Only login as root when absolutely necessary. And, as soon
|
||
as you're finished with your work as root, log out. The less
|
||
you use the root account, the less likely you'll be to do dam-
|
||
age on your system.
|
||
|
||
|
||
Of course, there is a breed of UNIX hackers out there who use root
|
||
for virtually everything. But every one of them has, at some point,
|
||
made a silly mistake as root and trashed the system. The general
|
||
rule is, until you're familiar with the lack of restrictions on root,
|
||
and are comfortable using the system without such restrictions,
|
||
login as root sparingly.
|
||
|
||
Of course, everyone makes mistakes. Linus Torvalds himself
|
||
once accidentally deleted the entire kernel directory tree on his
|
||
system. Hours of work were lost forever. Fortunately, however,
|
||
because of his knowledge of the filesystem code, he was able to
|
||
reboot the system and reconstruct the directory tree by hand on
|
||
disk.
|
||
|
||
Put another way, if you picture using the root account as wear-
|
||
ing a special magic hat that gives you lots of power, so that you
|
||
can, by waving your hand, destroy entire cities, it is a good idea
|
||
to be a bit careful about what you do with your hands. Since it is
|
||
easy to move your hand in a destructive way by accident, it is not
|
||
a good idea to wear the magic hat when it is not needed, despite
|
||
the wonderful feeling.
|
||
|
||
|
||
5.1.2 Abusing the system
|
||
|
||
|
||
Along with the feeling of power comes the tendency to do har-
|
||
m. This is one of the grey areas of UNIX system administration,
|
||
but everyone goes through it at some point in time. Most users
|
||
of UNIX systems never have the ability to wield this power_on
|
||
university and business UNIX systems, only the highly-paid and
|
||
highly-qualified system administrators ever login is root. In fact,
|
||
at many such institutions, the root password is a highly guarded
|
||
secret: it is treated as the Holy Grail of the institution. A large
|
||
amount of hubbub is made about logging in as root; it is portrayed
|
||
as a wise and fearsome power, given only to an exclusive cabal.
|
||
|
||
This kind of attitude towards the root account is, quite sim-
|
||
ply, the kind of thing which breeds malice and contempt. Because
|
||
root is so fluffed-up, when some users have their first opportu-
|
||
nity to login as root (either on a Linux system or elsewhere),
|
||
the tendency is to use root's privileges in a harmful manner. I
|
||
have known so-called "system administrators" who read other us-
|
||
er's mail, delete user's files without warning, and generally behave
|
||
like children when given such a powerful "toy".
|
||
|
||
Because root has such privilege on the system, it takes a great
|
||
deal of maturity and self-control to use the account as it was
|
||
intended_to run the system. There is an unspoken code of honor
|
||
which exists between the system administrator and the users on
|
||
the system. How would you feel if your system administrator was
|
||
reading your e-mail or looking over your files? There is still no
|
||
strong legal precedent for electronic privacy on time-sharing com-
|
||
puter systems. On UNIX systems, the root user has the ability
|
||
to forego all security and privacy mechanisms on the system. It is
|
||
important that the system administrator develop a trusting rela-
|
||
tionship with the users on the system. I can't stress that enough.
|
||
|
||
|
||
5.1.3 Dealing with users
|
||
|
||
|
||
UNIX security is rather lax by design. Security on the system
|
||
was an afterthought_the system was originally developed in an
|
||
environment where users intruding upon other users was simply
|
||
unheard of. Because of this, even with security measures, there is
|
||
still the ability for normal users to do harm.
|
||
|
||
System administrators can take two stances when dealing with
|
||
abusive users: they can be either paranoid or trusting. The para-
|
||
noid system administrator usually causes more harm than he or she
|
||
prevents. One of my favorite sayings is, "Never attribute to malice
|
||
anything which can be attributed to stupidity." Put another way,
|
||
most users don't have the ability or knowledge to do real harm on
|
||
the system. 90% of the time, when a user is causing trouble on
|
||
the system (by, for instance, filling up the user partition with large
|
||
files, or running multiple instances of a large program), the user is
|
||
simply unaware that what he or she is doing is a problem. I have
|
||
come down on users who were causing a great deal of trouble, but
|
||
they were simply acting out of ignorance_not malice.
|
||
|
||
When you deal with users who are causing potential trouble,
|
||
don't be accusative. The old rule of "innocent until proven guilty"
|
||
still holds. It is best to simply talk to the user, and question
|
||
about the trouble, instead of causing a confrontation. The last
|
||
thing you want to do is be on the user's bad side. This will raise
|
||
a lot of suspicion about you_the system administrator_running
|
||
the system correctly. If a user believes that you distrust or dislike
|
||
them, they might accuse you of deleting files or breaching privacy
|
||
on the system. This is certainly not the kind of position that you
|
||
want to be in.
|
||
|
||
If you do find that a user has been attempting to "crack" the
|
||
system, or was intentionally doing harm to the system, don't return
|
||
the malicious behavior with malice of your own. Instead, simply
|
||
provide a warning_but be flexible. In many cases, you may catch
|
||
a user "in the act" of doing harm to the system_give them a
|
||
warning. Tell them not to let it happen again. However, if you
|
||
do catch them causing harm again, be absolutely sure that it is
|
||
intentional. I can't even begin to describe the number of cases
|
||
where it appeared as though a user was causing trouble, when in
|
||
fact it was either an accident or a fault of my own.
|
||
|
||
|
||
5.1.4 Setting the rules
|
||
|
||
|
||
The best way to run a system is not with an iron fist. That may
|
||
be how you run the military, but UNIX was not designed for such
|
||
discipline. It makes sense to lay down a simple and flexible set of
|
||
guidelines for users_but remember, the fewer rules you have, the
|
||
less chance there is of breaking them. Even if your rules for using
|
||
the system are perfectly reasonable and clear, users will always at
|
||
times break these rules without intending to. This is especially true
|
||
in the case of new UNIX users, who are just learning the ropes
|
||
of the system. It's not patently obvious, for example, that you
|
||
shouldn't download a gigabyte of files and mail them to everyone
|
||
on the system. Users need help understanding the rules, and why
|
||
they are there.
|
||
|
||
If you do specify usage guidelines for your system, make sure
|
||
that the reason behind a particular guideline is made clear. If you
|
||
don't, then users will find all sorts of creative ways to get around
|
||
the rule, and not know that they are in fact breaking it.
|
||
|
||
|
||
5.1.5 What it all means
|
||
|
||
|
||
We can't tell you how to run your system to the last detail. Most
|
||
of the philosophy depends on how you're using the system. If you
|
||
have many users, things are much different than if you only have
|
||
a few users, or if you're the only user on the system. However, it's
|
||
always a good idea_in any situation_to understand what being
|
||
the system administrator really means.
|
||
|
||
Being the system administrator doesn't make you a UNIX wiz-
|
||
ard. There are many system admins out there who know very
|
||
little about UNIX. Likewise, there are many "normal" users out
|
||
there who know more about UNIX than any system administrator
|
||
could. Also, being the system administrator does not allow you to
|
||
use malice against your users. Just because the system gives you
|
||
the privilege to mess with user files does not mean that you have
|
||
any right to do so.
|
||
|
||
Lastly, being the system administrator is really not a big deal.
|
||
It doesn't matter if your system is a little 386 or a Cray supercom-
|
||
puter. Running the system is the same, regardless. Knowing the
|
||
root password isn't going to get you money, fame, or girls. It will
|
||
allow you to maintain the system, and keep it running. That's it.
|
||
|
||
|
||
5.2 Booting the System
|
||
|
||
|
||
There are several ways to boot the system, either from floppy or
|
||
from the hard drive.
|
||
|
||
|
||
5.2.1 Using a boot floppy
|
||
|
||
|
||
Many people boot Linux using a "boot floppy" which contains a
|
||
copy of the Linux kernel. This kernel has the Linux root partition
|
||
coded into it, so it will know where to look on the hard drive for
|
||
the root filesystem. (The rdev command can be used to set the
|
||
root partition in the kernel image; see below.) This is the type of
|
||
floppy created by SLS during installation, for example.
|
||
|
||
To create your own boot floppy, first locate the kernel image
|
||
on your hard disk. It should be in the file /Image or /etc/Image.
|
||
Some installations use the file /vmlinux for the kernel.
|
||
|
||
You may instead have a compressed kernel. A compressed k-
|
||
ernel uncompresses itself into memory at boot time, and takes up
|
||
much less space on the hard drive. If you have a compressed kernel,
|
||
it may be found in the file /zImage or /etc/zImage.
|
||
|
||
Once you know where the kernel is, set the root device in the
|
||
kernel image to the name of your Linux root partition with the
|
||
rdev command. The format of the command is
|
||
|
||
|
||
rdev <kernel-name> <root-device>
|
||
|
||
|
||
where <kernel-name> is the name of the kernel image, and <root-
|
||
device> is the name of the Linux root partition. For example, to
|
||
set the root device in the kernel /etc/Image to /dev/hda2, use the
|
||
command
|
||
|
||
|
||
# rdev /etc/Image /dev/hda2
|
||
|
||
|
||
rdev can set other options in the kernel as well, such as the
|
||
default SVGA mode to use at boot time. Just use "rdev" with no
|
||
arguments to get a help message.
|
||
|
||
After setting the root device, you can simply copy the kernel
|
||
image to the floppy. Whenever copying data a floppy, it's a good
|
||
idea to MS-DOS format the floppy first. This lays down the sector
|
||
and track information on the floppy, so it can be detected as either
|
||
high or low density.
|
||
|
||
For example, to copy the kernel in the file /etc/Image to the
|
||
floppy in /etc/fd0, use the command
|
||
|
||
|
||
# cp /etc/Image /dev/fd0
|
||
|
||
|
||
This floppy should now boot Linux.
|
||
|
||
|
||
5.2.2 Using LILO
|
||
|
||
|
||
Another method of booting is to use LILO, a program which resides
|
||
in the boot sector of your hard disk. This program is executed when
|
||
the system is booted from the hard disk, and can automatically
|
||
boot up Linux from a kernel image stored on the hard drive itself.
|
||
|
||
LILO can also be used as a first-stage boot loader for several
|
||
operating systems, allowing you to select at boot time which
|
||
operating system (such as Linux or MS-DOS) to boot. When you
|
||
boot using LILO, the default operating system is booted unless you
|
||
press [ctrl], [alt], or [shift] during the bootup sequence. If you
|
||
press any of these keys, you will be provided with a boot prompt,
|
||
at which you type the name of the operating system to boot (such
|
||
as "linux" or "msdos"). If you press [tab] at the boot prompt, a
|
||
listing of available operating systems will be provided.
|
||
|
||
LILO is located in the directory /etc/lilo (if you have it).
|
||
The easy way to install LILO is to edit the configuration file,
|
||
/etc/lilo/config, and then run the command
|
||
|
||
|
||
# /etc/lilo/lilo
|
||
|
||
|
||
The LILO configuration file contains a "stanza" for each oper-
|
||
ating system that you want to boot. The best way to demonstrate
|
||
this is with an example LILO config file. The below setup is for
|
||
a system which has a Linux root partition on /dev/hda1, and an
|
||
MS-DOS partition on /dev/hda2.
|
||
|
||
# Tell LILO to modify the boot record on /dev/hda (the first
|
||
# non-SCSI hard drive). If you boot from a drive other than /dev/hda,
|
||
# change the following line.
|
||
boot = /dev/hda
|
||
|
||
# Name of the boot loader. No reason to modify this unless you're doing
|
||
# some serious hacking on LILO.
|
||
install = /etc/lilo/boot.b
|
||
|
||
# Have LILO perform some optimization.
|
||
compact
|
||
|
||
# Stanza for Linux root partition on /dev/hda1.
|
||
image = /etc/Image # Location of kernel
|
||
label = linux # Name of OS (for the LILO boot menu)
|
||
root = /dev/hda1 # Location of root partition
|
||
vga = ask # Tell kernel to ask for SVGA modes at boot time
|
||
|
||
# Stanza for MSDOS partition on /dev/hda2.
|
||
other = /dev/hda2 # Location of partition
|
||
table = /dev/hda # Location of partition table for /dev/hda2
|
||
label = msdos # Name of OS (for boot menu)
|
||
|
||
|
||
|
||
The first operating system stanza in the config file will be the
|
||
default OS for LILO to boot. You can select another OS to boot
|
||
at the LILO boot prompt, as discussed above.
|
||
|
||
The program /etc/lilo/QuickInst will ask you questions about
|
||
your setup and generate a LILO config file for you.
|
||
|
||
Remember that every time you update the kernel image on disk,
|
||
you should rerun /etc/lilo/lilo in order for the changes to be
|
||
reflected on the boot sector of your drive.
|
||
|
||
Also note that if you use the "root =" line, above, there's no
|
||
reason to use rdev to set the root partition in the kernel image.
|
||
LILO sets it for you at boot time.
|
||
|
||
The Linux FAQ (see Appendix B) provides more information
|
||
on LILO, including how to use LILO to boot with OS/2's Boot
|
||
Manager.
|
||
|
||
|
||
5.3 Shutting Down
|
||
|
||
|
||
Shutting down a Linux system is a bit tricky. Remember that
|
||
you should never just turn off the power or hit the reset switch
|
||
while the system is running. The kernel keeps track of disk I/O
|
||
in memory buffers. If you reboot the system without giving the
|
||
kernel the chance to write its buffers to disk, you can corrupt your
|
||
filesystems.
|
||
|
||
Other precautions are taken at shutdown time as well. All pro-
|
||
cesses are sent a signal, which allows them to die gracefully (writ-
|
||
ing and closing all files, and so on). Filesystems are unmounted for
|
||
safety. If you wish, the system can also alert users that the system
|
||
is going down and give them a change to log off.
|
||
|
||
The easiest way to shutdown is with the shutdown command.
|
||
The format of the command is
|
||
|
||
|
||
shutdown <time> <warning-message>
|
||
|
||
|
||
The <time> argument is the time to shutdown the system (in the
|
||
format hh:mm:ss), and <warning-message> is a message displayed
|
||
on all user's terminals before shutdown. Alternately, you can spec-
|
||
ify the <time> as "now", to shutdown immediately. The -r option
|
||
may be given to shutdown to reboot the system after shutting
|
||
down.
|
||
|
||
For example, to shutdown the system at 8:00pm, use the com-
|
||
mand
|
||
|
||
|
||
# shutdown -r 20:00
|
||
|
||
|
||
The command halt may be used to force an immediate shut-
|
||
down, without any warning messages or grace period. halt is useful
|
||
if you're the only one using the system, and want to shut down the
|
||
system and turn it off.
|
||
|
||
Don't turn off the power or reboot the system until you see the
|
||
message:
|
||
|
||
|
||
The system is halted
|
||
|
||
|
||
It is very important that you shutdown the system "cleanly" using
|
||
the shutdown or halt commands. On some systems, pressing [ctrl-
|
||
alt-del] will be trapped and cause a shutdown; on other systems,
|
||
however, using the "Vulcan nerve pinch" will reboot the system
|
||
immediately and may cause disaster.
|
||
|
||
|
||
5.4 Managing Users
|
||
|
||
|
||
Whether or not you have many users on your system, it's important
|
||
to understand the aspects of user management under Linux. Even
|
||
if you're the only user, you should presumably have a separate
|
||
account for yourself (an account other than root to do most of
|
||
your work).
|
||
|
||
Each person using the system should have his or her own ac-
|
||
count. It is seldom a good idea to have several people share the
|
||
same account. Not only is security an issue, but accounts are used
|
||
to uniquely identify users to the system. You need to be able to
|
||
keep track of who is doing what.
|
||
|
||
|
||
5.4.1 User management concepts
|
||
|
||
|
||
The system keeps track of a number of pieces of information about
|
||
each user. They are summarized below.
|
||
|
||
|
||
username The username is the unique identifier given to ev-
|
||
ery user on the system. Examples of usernames
|
||
are larry, karl, and mdw. Letters and digits may
|
||
be used, as well as the characters "_" (underscore)
|
||
and "." (period). Usernames are usually limited
|
||
to 8 characters in length.
|
||
|
||
|
||
user ID The user ID, or UID, is a unique number given
|
||
to every user on the system. The system usually
|
||
keeps track of information by UID, not username.
|
||
|
||
|
||
group ID The group ID, or GID, is the ID of the user's de-
|
||
fault group. In Section 4.9 we discussed group per-
|
||
missions; each user belongs to one or more groups
|
||
defined by the system administrator. More about
|
||
this below.
|
||
|
||
|
||
password The system also stores the user's encrypted pass-
|
||
word. The passwd command is used to set and
|
||
change user passwords.
|
||
|
||
|
||
full name The user's "real name" or "full name" is stored
|
||
along with the username. For example, the user
|
||
schmoj may have the name "Joe Schmo" in real
|
||
life.
|
||
|
||
|
||
home directory
|
||
The home directory is the directory in which the
|
||
user is initially placed at login time. Every user
|
||
should have his or her own home directory, usually
|
||
found under /home.
|
||
|
||
|
||
login shell The user's login shell is the shell which is started
|
||
for the user at login time. Examples are /bin/bash
|
||
and /bin/tcsh.
|
||
|
||
|
||
The file /etc/passwd contains this information about users.
|
||
Each line in the file contains information about a single user; The
|
||
format of each line is
|
||
|
||
|
||
username:encrypted password:UID:GID:full name:home directory:login shell
|
||
|
||
|
||
An example might be:
|
||
|
||
|
||
kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash
|
||
|
||
|
||
As we can see, the first field, "kiwi", is the username.
|
||
|
||
The next field, "Xv8Q981g71oKK", is the encrypted password.
|
||
passwords are not stored on the system in any human-readable
|
||
format. The password is encrypted using itself as the secret key.
|
||
In other words, you need to know the password to decrypt it. This
|
||
form of encryption is fairly secure.
|
||
|
||
Some systems use "shadow password" in which password infor-
|
||
mation is relegated to the file /etc/shadow. Because /etc/passwd
|
||
is world-readable, /etc/shadow provides some degree of extra se-
|
||
curity because it is not. Shadow password provides some other
|
||
features such as password expiration and so on; we will not go into
|
||
these features here.
|
||
|
||
The third field, "102", is the UID. This must be unique for
|
||
each user. The fourth field, "100", is the GID. This user belongs
|
||
to the group numbered 100. Group information, like user informa-
|
||
tion, is stored in the file /etc/group. See Section 5.4.5 for more
|
||
information.
|
||
|
||
The fifth field is the user's full name, "Laura Poole". The last
|
||
two fields are the user's home directory (/home/kiwi) and login
|
||
shell (/bin/bash), respectively. It is not required that the user's
|
||
home directory be given the same name as the username. It does
|
||
help identify the directory, however.
|
||
|
||
|
||
5.4.2 Adding users
|
||
|
||
|
||
When adding a user, there are several steps to be taken. First, the
|
||
user must be given an entry in /etc/passwd, with a unique user-
|
||
name and UID. The GID, fullname, and other information must
|
||
be specified. The user's home directory must be created, and the
|
||
permissions on the directory set so that the user owns the direc-
|
||
tory. Shell initialization files must be provided in the new home
|
||
directory and other system-wide configuration must be done (for
|
||
example, setting up a spool for incoming e-mail for the new user).
|
||
|
||
While it is not difficult to add users by hand (I do), when you
|
||
are running a system with many users it is easy to forget some-
|
||
thing. The easiest way to add users is to use an interactive program
|
||
which asks you for the required information and updates all of the
|
||
system files automatically. The name of this program is useradd
|
||
or adduser, depending on what software was installed. The man
|
||
pages for these commands should be fairly self-explanatory.
|
||
|
||
|
||
5.4.3 Deleting users
|
||
|
||
|
||
Similarly, deleting users can be accomplished with the commands
|
||
userdel or deluser depending on what software was installed on
|
||
the system.
|
||
|
||
If you'd like to temporarily "disable" a user from logging into
|
||
the system (without deleting the user's account), you can simply
|
||
add an asterisk ("*") to the first character of the password field in
|
||
/etc/passwd. For example, changing kiwi's /etc/passwd entry
|
||
to
|
||
|
||
|
||
kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash
|
||
|
||
|
||
will restrict kiwi from logging in.
|
||
|
||
|
||
5.4.4 Setting user attributes
|
||
|
||
|
||
After you have created a user, you may need to change attributes
|
||
for that user, such as home directory or password. The easiest way
|
||
to do this is to change the values directly in /etc/passwd. To set
|
||
a user's password, use the passwd command. For example,
|
||
|
||
|
||
# passwd larry
|
||
|
||
|
||
will change larry's password. Only root may change other user's
|
||
password in this manner. Users can change their own passwords
|
||
with passwd as well.
|
||
|
||
On some systems, the commands chfn and chsh will be avail-
|
||
able to allow users to set their own fullname and login shell at-
|
||
tributes. If not, they will have to ask the system administrator to
|
||
change these attributes for them.
|
||
|
||
|
||
5.4.5 Groups
|
||
|
||
|
||
As we have mentioned, each user belongs to one or more groups.
|
||
The only real importance of group relationships pertains to file
|
||
permissions, as you'll recall from Section 4.9, each file has a "group
|
||
ownership" and a set of group permissions which defines how users
|
||
in that group may access the file.
|
||
|
||
There are several system-defined groups such as bin, mail, and
|
||
sys. Users should not belong to any of these groups; they are
|
||
used for system file permissions. Instead, users should belong to
|
||
an individual group such as users. If you want to be cute, you
|
||
can maintain several groups of users such as student, staff, and
|
||
faculty.
|
||
|
||
The file /etc/group contains information about groups. The
|
||
format of each line is
|
||
|
||
|
||
group name:password:GID:other members
|
||
|
||
|
||
Some example groups might be:
|
||
|
||
|
||
root::0:
|
||
users::100:mdw,larry
|
||
guest::200:
|
||
other::250:kiwi
|
||
|
||
|
||
The first group, root, is a special system group reserved for the
|
||
root account. The next group, users, is for regular users. It
|
||
has a GID of 100. The users mdw and larry are given access to
|
||
this group. Remember that in /etc/passwd each user was given a
|
||
default GID. However, users may belong to more than one group,
|
||
by adding their usernames to other group lines in /etc/group. The
|
||
groups command lists what groups you are given access to.
|
||
|
||
The third group, guest, is for guest users, and other is for
|
||
"other" users. The user kiwi is given access to this group as well.
|
||
|
||
As you can see, the "password" field of /etc/group is rarely
|
||
used. It is sometimes used to set a password on group access. This
|
||
is seldom necessary.
|
||
|
||
The commands addgroup or groupadd may be used to add
|
||
groups to your system. Usually, it's easier just to add entries in
|
||
/etc/group yourself, as no other configuration needs to be done
|
||
to add a group. To delete a group, simply delete its entry in
|
||
/etc/group.
|
||
|
||
|
||
5.5 Archiving and Compressing Files
|
||
|
||
|
||
Before we can talk about backups, we need to introduce the tools
|
||
used to archive software on UNIX systems.
|
||
|
||
|
||
5.5.1 Using tar
|
||
|
||
|
||
The tar command is most often used to archive software.
|
||
|
||
The format of the tar command is
|
||
|
||
|
||
tar <options> <file1> <file2> ...<fileN>
|
||
|
||
|
||
where <options> is the list of commands and options for tar, and
|
||
<file1> through <fileN> is the list of files to add or extract from the
|
||
archive.
|
||
|
||
For example, the command
|
||
|
||
|
||
# tar cvf backup.tar /etc
|
||
|
||
|
||
would pack all of the files in /etc into the tar archive backup.tar.
|
||
The first argument to tar_"cvf"_is the tar "command". "c"
|
||
tells tar to create a new archive file. The "v" option forces tar
|
||
into verbose mode_printing each filename as it is archived. The
|
||
"f" option tells tar that the next argument_backup.tar_is the
|
||
name of the archive to create. The rest of the arguments to tar
|
||
are the file and directory names to add to the archive.
|
||
|
||
The command
|
||
|
||
|
||
# tar xvf backup.tar
|
||
|
||
|
||
will extract the tar file backup.tar in the current directory. This
|
||
can sometimes be dangerous_when extracting files from a tar file,
|
||
old files are overwritten.
|
||
|
||
Furthermore, before extracting tar files it is important to know
|
||
where the files should be unpacked. For example, let's say you
|
||
archived the following files: /etc/hosts, /etc/group, and /etc/passwd.
|
||
If you use the command
|
||
|
||
|
||
# tar cvf backup.tar /etc/hosts /etc/group /etc/passwd
|
||
|
||
|
||
the directory name /etc/ is added to the beginning of each file-
|
||
name. In order to extract the files to the correct location, you
|
||
would need to use the following commands:
|
||
|
||
|
||
# cd /
|
||
# tar xvf backup.tar
|
||
|
||
|
||
because files are extracted with the pathname saved in the archive
|
||
file.
|
||
|
||
If, however, you archived the files with the command
|
||
|
||
|
||
# cd /etc
|
||
# tar cvf hosts group passwd
|
||
|
||
|
||
the directory name is not saved in the archive file. Therefore, you
|
||
would need to "cd /etc" before extracting the files. As you can
|
||
see, how the tar file is created makes a large difference in where
|
||
you extract it. The command
|
||
|
||
|
||
# tar tvf backup.tar
|
||
|
||
|
||
may be used to display an "index" of the tar file before unpacking
|
||
it. In this way you can see what directory the filenames in the
|
||
archive are stored relative to, and can extract the archive from the
|
||
correct location.
|
||
|
||
|
||
5.5.2 gzip and compress
|
||
|
||
|
||
Unlike archiving programs for MS-DOS, tar does not automatical-
|
||
ly compress files as it archives them. Therefore, if you are archiving
|
||
two 1-megabyte files, the resulting tar file will be two megabytes
|
||
in size. The gzip command may be used to compress a file (the
|
||
file to compress need not be a tar file). The command
|
||
|
||
|
||
# gzip -9 backup.tar
|
||
|
||
|
||
will compress backup.tar and leave you with backup.tar.gz, the
|
||
compressed version of the file. The -9 switch tells gzip to use the
|
||
highest compression factor.
|
||
|
||
The gunzip command may be used to uncompress a gzipped
|
||
file. Equivalently, you may use "gzip -d".
|
||
|
||
gzip is a relatively new tool in the UNIX community. For many
|
||
years, the compress command was used instead. However, because
|
||
of several factors (*Note: These factors include a software patent
|
||
dispute against the compress algorithm and the fact that gzip is
|
||
much more efficient than compress.), compress is being phased
|
||
out. However, you will still need to use compress every once in a
|
||
while.
|
||
|
||
compressed files end in the extension .Z. For example, backup.tar.Z
|
||
is the compressed version of backup.tar, while backup.tar.gz is
|
||
the gzipped version (*Note: To add further confusion, for some
|
||
time the extension .z (lowercase "z") was used for gzipped files.
|
||
The official gzip extension is now .gz.). The uncompress com-
|
||
mand is used to expand a compressed file; gunzip knows how to
|
||
handle compressed files as well.
|
||
|
||
|
||
5.5.3 Putting them together
|
||
|
||
|
||
Therefore, to archive a group of files and compress the result, you
|
||
can use the commands:
|
||
|
||
|
||
# tar cvf backup.tar /etc
|
||
# gzip -9 backup.tar
|
||
|
||
|
||
The result will be backup.tar.gz. To unpack this file, use the
|
||
reverse set of commands:
|
||
|
||
|
||
# gunzip backup.tar.gz
|
||
# tar xvf backup.tar
|
||
|
||
|
||
Of course always make sure that you are in the correct directory
|
||
before unpacking a tar file.
|
||
|
||
You can use some UNIX cleverness to do all of this on one
|
||
command line, as in the following:
|
||
|
||
|
||
# tar cvf - /etc | gzip -9c > backup.tar.gz
|
||
|
||
|
||
Here, we are sending the tar file to "-", which stands for tar's
|
||
standard output. This is piped to gzip, which compresses the
|
||
incoming tar file, and the result is saved in backup.tar.gz.
|
||
|
||
The -c option to gzip tells gzip to send its output to stdout,
|
||
which is redirected to backup.tar.gz.
|
||
|
||
A single command used to unpack this archive would be:
|
||
|
||
|
||
# gunzip -c backup.tar.gz | tar cvf -
|
||
|
||
|
||
Again, gunzip uncompresses the contents of backup.tar.gz and
|
||
sends the resulting tar file to stdout. This is piped to tar, which
|
||
reads "-", this time referring to tar's standard input.
|
||
|
||
|
||
Happily, the tar command also includes the -z option to auto-
|
||
matically compress/uncompress files on the fly. However, it does
|
||
this as per the compress algorithm_it does not use gzip.
|
||
|
||
For example, the command
|
||
|
||
|
||
# tar cvfz backup.tar.Z /etc
|
||
|
||
|
||
is equivalent to
|
||
|
||
|
||
# tar cvf backup.tar /etc
|
||
# compress backup.tar
|
||
|
||
|
||
Just as the command
|
||
|
||
|
||
# tar xvfz backup.tar.Z
|
||
|
||
|
||
may be used instead of
|
||
|
||
|
||
# uncompress backup.tar.Z
|
||
# tar xvf backup.tar
|
||
|
||
|
||
Refer to the man pages for tar and gzip for more information.
|
||
|
||
|
||
5.6 Using Floppies and Making Backups
|
||
|
||
|
||
Floppies are usually used as backup media. If you don't have a tape
|
||
drive connected to your system, floppy disks can be used (although
|
||
they are slower and somewhat less reliable).
|
||
|
||
You may also use floppies to hold individual filesystems_in this
|
||
way, you can mount the floppy to access the data on it.
|
||
|
||
|
||
5.6.1 Using floppies for backups
|
||
|
||
|
||
The easiest way to make a backup using floppies is with tar. The
|
||
command
|
||
|
||
|
||
# tar cvfzM /dev/fd0 /
|
||
|
||
|
||
will make a complete backup of your system using the floppy drive
|
||
/dev/fd0. The "M" option to tar allows the backup to be a mul-
|
||
tivolume backup; that is, when one floppy is full, tar will prompt
|
||
for the next. The command
|
||
|
||
|
||
# tar xvfzM /dev/fd0
|
||
|
||
|
||
can be used to restore the complete backup. This method can also
|
||
be used if you have a tape drive (/dev/rmt0) connected to your
|
||
system.
|
||
|
||
Note that using the method, you must settle for the compress
|
||
algorithm; tar doesn't use gzip with the "z" option. Several other
|
||
programs exist for making multiple-volume backups; the backflops
|
||
program on tsx-11.mit.edu may come in handy.
|
||
|
||
Making a complete backup of the system can be time- and
|
||
resource-consuming. Most system administrators use a incremental
|
||
backup policy, in which every month a complete backup is taken,
|
||
and every week only those files which have been modified in the last
|
||
week are backed up. In this case, if you trash your system in the
|
||
middle of the month, you can simply restore the last full monthly
|
||
backup, and then restore the last weekly backups as needed.
|
||
|
||
The find command can be useful in locating files which have
|
||
changed since a certain date. Several scripts for managing incre-
|
||
mental backups can be found on sunsite.unc.edu.
|
||
|
||
|
||
5.6.2 Using floppies as filesystems
|
||
|
||
|
||
You can create a filesystem on a floppy just as you would on a hard
|
||
drive partition. For example,
|
||
|
||
|
||
# mke2fs /dev/fd0 1440
|
||
|
||
|
||
creates a filesystem on the floppy in /dev/fd0. The size of the
|
||
filesystem must correspond to the size of the floppy. High-density
|
||
3.5" disks are 1.44 megabytes, or 1440 blocks, in size. High-density
|
||
5.25" disks are 1200 blocks.
|
||
|
||
In order to access the floppy, you must mount the filesystem
|
||
contained on it. The command
|
||
|
||
|
||
# mount -t ext2 /dev/fd0 /mnt
|
||
|
||
|
||
will mount the floppy in /dev/fd0 on the directory /mnt. Now,
|
||
all of the files on the floppy will appear under /mnt on your drive.
|
||
The "-t ext2" specifies an ext2fs filesystem type. If you created
|
||
another type of filesystem on the floppy, you'll need to specify its
|
||
type to the mount command.
|
||
|
||
|
||
The "mount point" (the directory where you're mounting the
|
||
filesystem) needs to exist when you use the mount command. If it
|
||
doesn't exist, simply create it with mkdir.
|
||
|
||
Note that any I/O to the floppy is buffered just as hard disk
|
||
I/O is. If you change data on the floppy, you may not see the drive
|
||
light come on until the kernel flushes its I/O buffers. It's important
|
||
that you not remove a floppy before you unmount it; this can be
|
||
done with the command
|
||
|
||
|
||
# umount /dev/fd0
|
||
|
||
|
||
Do not simply switch floppies as you would on an MS-DOS system;
|
||
whenever you change floppies, umount the first one and mount the
|
||
next.
|
||
|
||
|
||
5.7 Upgrading and Installing New Software
|
||
|
||
|
||
Another duty of the system administrator is upgrading and in-
|
||
stalling new software.
|
||
|
||
The Linux community is very dynamic. New kernel releases
|
||
come out every few weeks, and other software is updated almost
|
||
as often. Because of this, new Linux users often feel the need
|
||
to upgrade their systems constantly to keep up the the rapidly
|
||
changing pace. Not only is this unnecessary, it's a waste of time:
|
||
to keep up with all of the changes in the Linux world, you would be
|
||
spending all of your time upgrading and none of your time using
|
||
the system.
|
||
|
||
So, when should you upgrade? Some people feel that you should
|
||
upgrade when a new distribution release is made_for example,
|
||
when SLS comes out with a new version. Many Linux users com-
|
||
pletely reinstall their system with the newest SLS release every
|
||
time. This, also, is a waste of time. In general, changes to SLS
|
||
releases are small. Downloading and reinstalling 30 disks when
|
||
only 10% of the software has been actually modified is, of course,
|
||
pointless.
|
||
|
||
The best way to upgrade your system is to do it by hand: only
|
||
upgrade those software packages which you know that you should
|
||
upgrade. This scares a lot of people: they want to know what to
|
||
upgrade, and how, and what will break if they don't upgrade. In
|
||
order to be successful with Linux, it's important to overcome your
|
||
fears of "doing it yourself"_ which is what Linux is all about. In
|
||
fact, once you have your system working and all software correctly
|
||
configured, reinstalling with the newest SLS release will no doubt
|
||
wipe all of your configuration and things will be broken again, just
|
||
as they were when you first installed your system. Setting yourself
|
||
back in this manner is unnecessary_all that is needed is some
|
||
know-how about upgrading your system, and how to do it right.
|
||
|
||
You'll find that when you upgrade one component of your sys-
|
||
tem that other things should not break. For example, most of the
|
||
software on my system is left over from an ancient 0.96 MCC In-
|
||
terim installation. Yet, I run the newest version of the kernel and
|
||
libraries with this software with no problem. For the most part,
|
||
senselessly upgrading to "keep up with the trend" is not important
|
||
at all. This isn't MS-DOS or Microsoft Windows. There is no im-
|
||
portant reason to run the newest version of all of the software. If
|
||
you find that you would like or need features in a new version, then
|
||
upgrade. If not, then don't. In other words, only upgrade what
|
||
you have to, and when you have to. Don't just upgrade for the
|
||
sake of upgrading. That will waste a lot of time and effort trying
|
||
to keep up.
|
||
|
||
The most important software to upgrade on your system is the
|
||
kernel, the libraries, and the gcc compiler. These are the three
|
||
essential parts of your system, and in some cases they all depend
|
||
on each other for everything to work successfully. Most of the other
|
||
software on your system does not need to be upgraded periodically.
|
||
|
||
|
||
5.7.1 Upgrading the kernel
|
||
|
||
|
||
Upgrading the kernel is simply a matter of getting the sources and
|
||
compiling them yourself. You must compile the kernel yourself in
|
||
order to enable or disable certain features, as well as to ensure that
|
||
the kernel will be optimized to run on your machine. The process
|
||
is quite painless.
|
||
|
||
The kernel sources may be retrieved from any of the Linux FTP
|
||
sites (see Section C for a list). On sunsite.unc.edu, for instance,
|
||
the kernel sources are found in /pub/Linux/kernel. Kernel ver-
|
||
sions are numbered using a version number and a patchlevel. For
|
||
example, kernel version 0.99 patchlevel 11 is usually written as
|
||
0.99.pl11, or just 0.99.11.
|
||
|
||
The kernel sources are released as a gzipped tar file (*Note:
|
||
Often, a patch file is also released for the current kernel version
|
||
which allows you to patch your current kernel sources from the last
|
||
patchlevel to the current one (using the program patch). In most
|
||
cases, however, it's usually easier to install the entire new version of
|
||
the kernel sources). For example, the file containing the 0.99.pl11
|
||
kernel sources is linux-0.99.11.tar.gz.
|
||
|
||
Unpack this tar file from the directory /usr/src; it creates
|
||
the directory /usr/src/linux which contains the kernel sources.
|
||
You should delete or rename your existing /usr/src/linux before
|
||
unpacking the new version.
|
||
|
||
Once the sources are unpacked, you need to make sure that two
|
||
symbolic links in /usr/include are correct. To create these links,
|
||
use the commands
|
||
|
||
|
||
# ln -sf /usr/src/linux/include/linux /usr/include/linux
|
||
# ln -sf /usr/src/linux/include/asm /usr/include/asm
|
||
|
||
|
||
Once you have created these links once, there is no reason to create
|
||
them again when you install the next version of the kernel sources.
|
||
(See Section 5.9.3 for more about symbolic links.)
|
||
|
||
Note that in order to compile the kernel, you must have the
|
||
gcc and g++ C and C++ compilers installed on your system. You
|
||
may need to have the most recent versions of these compilers: see
|
||
Section 5.7.3, below, for more information.
|
||
|
||
To compile the kernel, first cd to /usr/src/linux. Run the
|
||
command make config. This command will prompt you for a
|
||
number of configuration options, such as what filesystem types you
|
||
wish to include in the new kernel.
|
||
|
||
Next, edit /usr/src/linux/Makefile. Be sure that the defini-
|
||
tion for ROOT_DEV is correct_it defines the device uses as the root
|
||
filesystem at boot time. The usual definition is
|
||
|
||
|
||
ROOT_DEV = CURRENT
|
||
|
||
|
||
Unless you are changing your root filesystem device, there is no
|
||
reason to change this.
|
||
|
||
Next, run the command make dep to fix all of the source de-
|
||
pendencies. This is a very important step.
|
||
|
||
Finally, you're ready to compile the kernel. The command make
|
||
Image will compile the kernel and leave the new kernel image in
|
||
the file /usr/src/linux/Image. Alternately, the command make
|
||
zImage will compile a compressed kernel image, which uncompress-
|
||
es itself at boot time and uses less drive space.
|
||
|
||
Once you have the kernel compiled, you need to either copy it to
|
||
a boot floppy (with a command such as "cp Image /dev/fd0") or
|
||
install it using LILO to boot from your hard drive. See Section 5.2.2
|
||
for more information.
|
||
|
||
|
||
5.7.2 Upgrading the libraries
|
||
|
||
|
||
As mentioned before, most of the software on the system is com-
|
||
piled to use shared libraries, which contain common subroutines
|
||
shared among different programs.
|
||
|
||
If you see the message
|
||
|
||
|
||
Incompatible library version
|
||
|
||
|
||
when attempting to run a program, then you need to upgrade to
|
||
the version of the libraries which the program requires. Libraries
|
||
are back-compatible; that is, a program compiled to use an older
|
||
version of the libraries should work with the new version of the
|
||
libraries installed. However, the reverse is not true.
|
||
|
||
The newest version of the libraries can be found on the Linux
|
||
FTP sites. On sunsite.unc.edu, they are located in /pub/Linux/GCC.
|
||
The "release" files there should explain what files you need to down-
|
||
load and how to install them. Briefly, you should get the files
|
||
image-version.tar.gz and inc-version.tar.gz where version is
|
||
the version of the libraries to install, such as 4.4.1. These are
|
||
gzipped tar files; the image file contains the library images to in-
|
||
stall in /lib and /usr/lib. The inc file contains include files to
|
||
install in /usr/include
|
||
|
||
The release-version.tar.gz should explain the installation
|
||
procedure in detail (the exact instructions vary for each release). In
|
||
general you need to install the library .a and .sa files in /usr/lib.
|
||
These are the libraries used at compilation time.
|
||
|
||
In addition, the shared library image files, libc.so.version are
|
||
installed in /lib. These are the shared library images loaded at
|
||
runtime by programs using the libraries. Each library has a sym-
|
||
bolic link using the major version number of the library in /lib.
|
||
|
||
For example, the libc library version 4.4.1 has a major version
|
||
number of 4. The file containing the library is libc.so.4.4.1. A
|
||
symbolic link of the name libc.so.4 is in also /lib pointing to
|
||
this file. You need to change this symbolic link when upgrading
|
||
the libraries. For example, when upgrading from libc.so.4.4 to
|
||
libc.so.4.4.1, you need to change the symbolic link to point to
|
||
the new version.
|
||
|
||
|
||
It is very important that you change the symbolic link in one
|
||
step, as given below. If you somehow delete the symbolic link
|
||
libc.so.4, then programs which depend on the link (including
|
||
basic utilities like ls and cat) will stop working. Use the following
|
||
command to update the symbolic link libc.so.4 to point to the
|
||
file libc.so.4.4.1:
|
||
|
||
|
||
# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4
|
||
|
||
|
||
You also need to change the symbolic link libm.so.version in the
|
||
same manner. If you are upgrading to a different version of the
|
||
libraries substitute to appropriate filenames above. The library
|
||
release notice should explain the details. (See Section 5.9.3 for
|
||
more information about symbolic links.)
|
||
|
||
|
||
5.7.3 Upgrading gcc
|
||
|
||
|
||
The gcc C and C++ compiler is used to compile software on your
|
||
system, most importantly the kernel. The newest version of gcc is
|
||
found on the Linux FTP sites. On sunsite.unc.edu, it is found
|
||
in the directory /pub/Linux/GCC (along with the libraries). There
|
||
should be a release file for the gcc distribution detailing what
|
||
files you need to download and how to install them.
|
||
|
||
|
||
5.7.4 Upgrading other software
|
||
|
||
|
||
Upgrading other software is usually just a matter of downloading
|
||
the appropriate files and installing them. Most software for Linux is
|
||
distributed at gzipped tar files, including either sources or binaries
|
||
or both. If binaries are not included in the release, you may need
|
||
to compile them yourself; usually, this means typing make in the
|
||
directory where the sources are held.
|
||
|
||
Reading the USENET newsgroup comp.os.linux.announce
|
||
for announcements of new software releases is the easiest way to
|
||
find out about new software. Whenever you are looking for soft-
|
||
ware on an FTP site, downloading the ls-lR index file from the
|
||
FTP site and using grep to find the files in question is the easiest
|
||
way to locate software. If you have archie available to you, it
|
||
can be of assistance as well (*Note: If you don't have archie, you
|
||
can telnet to an archie server such as archie.rutgers.edu, login
|
||
as "archie" and use the command "help"). See Appendix B for
|
||
more details.
|
||
|
||
One handy source of Linux software is the SLS distribution
|
||
disk images. Each disk contains a number of .tgz files which are
|
||
simply gzipped tar files. Instead of downloading the disks, you can
|
||
download the desired .tgz files from the SLS directories on the
|
||
FTP site and install them directly.
|
||
|
||
Again, it's usually not a good idea to upgrade by reinstalling
|
||
with the newest version of SLS, or another distribution. SLS in
|
||
particular was not designed to be upgradeable. If you reinstall in
|
||
this way, you will no doubt wreck your current installation, in-
|
||
cluding user directories and all of your customized configuration.
|
||
The best way to upgrade software is piecewise; that is, if there is
|
||
a program that you use often that has a new version, upgrade it.
|
||
Otherwise, don't bother. Rule of thumb: If it ain't broke, don't fix
|
||
it. If you current software works, there's no reason to upgrade.
|
||
|
||
|
||
5.8 Managing Filesystems
|
||
|
||
|
||
Another task of the system administrator is taking care of filesys-
|
||
tems. Most of this job entails periodically checking the filesystems
|
||
for damage or corrupted files; many systems automatically check
|
||
the filesystems at boot time.
|
||
|
||
|
||
5.8.1 Mounting filesystems
|
||
|
||
|
||
First, a few concepts about filesystems. Before a filesystem is ac-
|
||
cessible to the system, it must be mounted on some directory. For
|
||
example, if you have a filesystem on a floppy, you must mount it
|
||
under some directory, say /mnt, in order to access the files on it (see
|
||
Section 5.6.2). After mounting the filesystem on that directory, all
|
||
of the files in the filesystem appear in that directory. In the case of
|
||
the floppy, the files on the floppy will appear in the directory /mnt.
|
||
After unmounting the floppy, the directory /mnt will be empty.
|
||
|
||
The same is true of filesystems on the hard drive. The sys-
|
||
tem automatically mounts filesystems on your hard drive for you
|
||
at bootup time. The so-called "root filesystem" is mounted on the
|
||
directory /. If you have a separate filesystem for /usr, for exam-
|
||
ple (see Section A.3), it is mounted on /usr. If you only have
|
||
a root filesystem, all files (including those in /usr) exist on that
|
||
filesystem.
|
||
|
||
The command mount is used to mount a filesystem. The com-
|
||
mand
|
||
|
||
|
||
mount -av
|
||
|
||
|
||
is executed from the file /etc/rc (which is the system initialization
|
||
file executed at boot time; see Section 5.9.1). The mount -av com-
|
||
mand obtains information on filesystems and mount points from
|
||
the file /etc/fstab. An example fstab file appears below.
|
||
|
||
|
||
# device directory type options
|
||
/dev/hda2 / ext2 defaults
|
||
/dev/hda3 /usr ext2 defaults
|
||
/dev/hda4 none swap sw
|
||
/proc /proc proc none
|
||
|
||
|
||
The first field is the device_the name of the partition to mount.
|
||
The second field is the mount point. The third field is the filesys-
|
||
tem type_such as ext2 (for ext2fs) or minix (for Minix filesys-
|
||
tems). The last field contains mount options_usually, this is set
|
||
to "default".
|
||
|
||
As you can see, swap partitions are included in /etc/fstab as
|
||
well. They have a mount directory of none, and type swap. The
|
||
swapon -a command, executed from /etc/rc as well, is used to
|
||
enable swapping on all swap devices listed in /etc/fstab.
|
||
|
||
The fstab file contains one special entry_for the /proc filesys-
|
||
tem. As mentioned in Section 4.10.1, the /proc filesystem is used
|
||
to store information about system processes, available memory, and
|
||
so on. If /proc is not mounted, commands such as /ps will not
|
||
work.
|
||
|
||
The mount -av command actually mounts all filesystems other
|
||
than the root filesystem (in the table above, /dev/hda2). The root
|
||
filesystem is automatically mounted at boot time by the kernel.
|
||
|
||
Instead of using mount -av, you can mount a filesystem by
|
||
hand. The command
|
||
|
||
|
||
# mount -t ext2 /dev/hda3 /usr
|
||
|
||
|
||
is equivalent to mounting the filesystem with the entry /dev/hda3
|
||
in the fstab example file above.
|
||
|
||
In general, you should never have to mount or unmount filesys-
|
||
tems by hand. The mount -av command in /etc/rc takes care
|
||
of mounting the filesystems at boot time. Filesystems are auto-
|
||
matically unmounted by the shutdown or halt commands before
|
||
bringing the system down.
|
||
|
||
|
||
5.8.2 Checking filesystems
|
||
|
||
|
||
It is usually a good idea to check your filesystems for damage or cor-
|
||
rupt files every now and then. Some systems automatically check
|
||
their filesystems at boot time (with the appropriate commands in
|
||
/etc/rc).
|
||
|
||
The command used to check a filesystem depends on the type
|
||
of the filesystem in question. For ext2fs filesystems (the most com-
|
||
monly used type), this command is e2fsck. For example, the com-
|
||
mand
|
||
|
||
|
||
# e2fsck -av /dev/hda2
|
||
|
||
|
||
will check the ext2fs filesystem on /dev/hda2 and automatically
|
||
correct any errors.
|
||
|
||
It is usually a good idea to unmount a filesystem before checking
|
||
it. For example, the command
|
||
|
||
|
||
# umount /dev/hda2
|
||
|
||
|
||
will unmount the filesystem on /dev/hda2, after which you can
|
||
check it. The one exception is that you cannot unmount the root
|
||
filesystem. In order to check the root filesystem when it's un-
|
||
mounted, you should use a maintenance boot/root diskette (see
|
||
Section 5.10.1). You also cannot unmount a filesystem if any of
|
||
the files in it are "busy"_that is, being used by a running process.
|
||
For example, you cannot unmount a filesystem if any user's current
|
||
working directory is on that filesystem. You will receive a "Device
|
||
busy" error if you attempt to unmount a filesystem which is in use.
|
||
|
||
Other filesystem types use different forms of the e2fsck com-
|
||
mand, such as efsck and xfsck. On some systems, you can simply
|
||
use the command fsck, which will determine the filesystem type
|
||
and execute the appropriate command.
|
||
|
||
It is important that you reboot your system immediately after
|
||
checking a filesystem is any corrections were made to that filesys-
|
||
tem. For example, if e2fsck reports that it corrected any errors
|
||
with the filesystem, you should immediately shutdown -r in order
|
||
to reboot the system. This is to allow the system to re-sync its
|
||
information about the filesystem when e2fsck modifies it.
|
||
|
||
Of course, the /proc filesystem never needs to be checked in
|
||
this manner. /proc is a memory filesystem, managed directly by
|
||
the kernel.
|
||
|
||
|
||
5.9 Miscellaneous Tasks
|
||
|
||
|
||
Believe it or not, there are a number of housekeeping tasks for the
|
||
system administrator which don't fall into any major category.
|
||
|
||
|
||
5.9.1 System startup files
|
||
|
||
|
||
When the system boots, a number of scripts are executed automat-
|
||
ically by the system before any user logs in. Here is a description
|
||
of what happens.
|
||
|
||
At bootup time, the kernel spawns the process /etc/init. init
|
||
is a program which reads its configuration file, /etc/inittab, and
|
||
spawns other processes based on the contents of this file. One of
|
||
the important processes started from inittab is the /etc/getty
|
||
process started on each virtual console. The getty process grabs
|
||
the VC for use, and starts a login process on the VC. This allows
|
||
you to login on each VC; if /etc/inittab does not contain a getty
|
||
process for a certain VC, you will not be able to login on that VC.
|
||
|
||
Another process executed from /etc/inittab is /etc/rc, the
|
||
main system initialization file. This file is a simple shell script
|
||
which executes any initialization commands needed at boot time,
|
||
such as mounting the filesystems (see Section 5.8 and initializing
|
||
swap space.
|
||
|
||
Your system may execute other initialization scripts as well,
|
||
such as /etc/rc.local. /etc/rc.local usually contains initial-
|
||
ization commands specific to your own system, such as setting the
|
||
hostname (see the next section). rc.local may be started from
|
||
/etc/rc or from /etc/inittab directly.
|
||
|
||
|
||
5.9.2 Setting the hostname
|
||
|
||
|
||
In a networked environment, the hostname is used to uniquely i-
|
||
dentify a particular machine, while in a standalone environment
|
||
the hostname just gives the system personality and charm. It's
|
||
like naming a pet: you can always address to your dog as "The
|
||
dog," but it's much more interesting to assign the dog a name such
|
||
as Spot or Woofie.
|
||
|
||
Setting the system's hostname is a simple matter of using the
|
||
hostname command. If you are on a network, your hostname
|
||
should be the full hostname of your machine, such as goober.norelco.com.
|
||
If you are not on a network of any kind, you can choose an arbitrary
|
||
host and domainname, such as loomer.vpizza.com, shoop.nowhere.edu,
|
||
or floof.org.
|
||
|
||
When setting the hostname, the hostname must appear in the
|
||
file /etc/hosts, which assigns an IP address to each host. Even
|
||
if your machine is not on a network, you should include your own
|
||
hostname in /etc/hosts.
|
||
|
||
For example, if you are not on a TCP/IP network, and y-
|
||
our hostname is floof.org, simply include the following line in
|
||
/etc/hosts:
|
||
|
||
|
||
127.0.0.1 floof.org localhost
|
||
|
||
|
||
This assigns your hostname, floof.org, to the loopback address
|
||
127.0.0.1 (used if you're not on a network). The localhost alias
|
||
is also assigned to this address.
|
||
|
||
If you are on a TCP/IP network, however, your real IP ad-
|
||
dress and hostname should appear in /etc/hosts. For example,
|
||
if your hostname is goober.norelco.com, and your IP address is
|
||
128.253.154.32, add the following line to /etc/hosts:
|
||
|
||
|
||
128.253.154.32 goober.norelco.com
|
||
|
||
|
||
If your hostname does not appear in /etc/hosts, you will not
|
||
be able to set it.
|
||
|
||
To set your hostname, simply use the hostname command. For
|
||
example, the command
|
||
|
||
|
||
# hostname -S goober.norelco.com
|
||
|
||
|
||
sets the hostname to goober.norelco.com. In most cases, the
|
||
hostname command is executed from one of the system startup
|
||
files, such as /etc/rc or /etc/rc.local. Edit these two files and
|
||
change the hostname command found there to set your own host-
|
||
name; upon rebooting the system the hostname will be set to the
|
||
new value.
|
||
|
||
|
||
5.9.3 Managing file links
|
||
|
||
|
||
Links allow you to give a single file multiple names. Files are actu-
|
||
ally identified to the system by their inode number, which is just
|
||
the unique filesystem identifier for the file (*Note: The command
|
||
ls -i will display file inode numbers.). A directory is actually a
|
||
listing of inode numbers with their corresponding filenames. Each
|
||
filename in a directory is a link to a particular inode.
|
||
|
||
|
||
5.9.3.1 Hard links
|
||
|
||
|
||
The ln command is used to create multiple links for one file. For
|
||
example, let's say that you have the file foo in a directory. Using
|
||
ls -i, we can look at the inode number for this file.
|
||
|
||
|
||
# ls -i foo
|
||
22192 foo
|
||
#
|
||
|
||
|
||
Here, the file foo has an inode number of 22192 in the filesystem.
|
||
We can create another link to foo, named bar:
|
||
|
||
|
||
# ln foo bar
|
||
|
||
|
||
With ls -i, we see that the two files have the same inode.
|
||
|
||
|
||
# ls -i foo bar
|
||
22192 bar 22192 foo
|
||
#
|
||
|
||
|
||
Now, accessing either foo or bar will access the same file. If you
|
||
make changes to foo, those changes will be made to bar as well.
|
||
For all purposes, foo and bar are the same file.
|
||
|
||
These links are known as hard links because they directly create
|
||
a link to an inode.
|
||
|
||
When you delete a file with rm, you are actually only deleting
|
||
one link to a file. If you use the command
|
||
|
||
|
||
# rm foo
|
||
|
||
|
||
then only the link named foo is deleted; bar will still exist. A file
|
||
is only actually deleted on the system when it has no links to it.
|
||
Usually, files have only one link, so using the rm command deletes
|
||
the file. However, if a file has multiple links to it, using rm will only
|
||
delete a single link; in order to delete the file, you must delete all
|
||
links to the file.
|
||
|
||
The command ls -l will display the number of links to a file
|
||
(among other information).
|
||
|
||
|
||
# ls -l foo bar
|
||
-rw-r--r-- 2 root root 12 Aug 5 16:51 bar
|
||
-rw-r--r-- 2 root root 12 Aug 5 16:50 foo
|
||
#
|
||
|
||
|
||
The second column in the listing, "2", specifies the number of links
|
||
to the file.
|
||
|
||
|
||
5.9.3.2 Symbolic links
|
||
|
||
|
||
Symbolic links are another type of link, which work differently than
|
||
hard links (as described above). A symbolic link allows you to give
|
||
a file another name, but it doesn't link the file by inode.
|
||
|
||
The command ln -s will create a symbolic link to a file. For
|
||
example, if we use the command
|
||
|
||
|
||
# ln -s foo bar
|
||
|
||
|
||
we will create the symbolic link bar pointing to the file foo. If
|
||
we use ls -i, we will see that the two files have different inodes,
|
||
indeed.
|
||
|
||
|
||
# ls -i foo bar
|
||
22195 bar 22192 foo
|
||
#
|
||
|
||
|
||
However, using ls -l, we see that the file bar is a symlink pointing
|
||
to foo.
|
||
|
||
|
||
# ls -l foo bar
|
||
lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo
|
||
-rw-r--r-- 1 root root 12 Aug 5 16:50 foo
|
||
#
|
||
|
||
|
||
Functionally, hard links and symbolic links are similar, but
|
||
there are some differences. For one thing, you can create a symbol-
|
||
ic link to a file which doesn't exist; the same is not true for hard
|
||
links. Symbolic links are processed by the kernel differently than
|
||
hard links are, which is just a technical difference but sometimes
|
||
an important one. Symbolic links are helpful because they identify
|
||
what file they point to; with hard links, there is no easy way to
|
||
determine which files are linked to the same inode.
|
||
|
||
|
||
Links are used in many places on the Linux system. Symbolic
|
||
links are especially important to the shared library images in /lib.
|
||
See Section 5.7.2 for more information.
|
||
|
||
|
||
5.10 What To Do In An Emergency
|
||
|
||
|
||
On some occasions, the system administrator will be faced with
|
||
the unique problem of recovering from a complete disaster, such
|
||
as forgetting the root password or trashing filesystems. The best
|
||
advice is, don't panic. Everyone makes stupid mistakes_that's the
|
||
best way to learn about system administration: the hard way.
|
||
|
||
Linux is not an unstable version of UNIX. In fact, I have had
|
||
fewer problems with system hangs and panics than with commercial
|
||
versions of UNIX on many platforms. Linux also benefits from a
|
||
strong complement of wizards who can help you get out of a bind.
|
||
|
||
The first thing you should do when investigating any problem
|
||
is to attempt to fix it yourself. Poke around, see how things work.
|
||
Too much of the time, a system administrator will post a desperate
|
||
plea for help before looking into the problem at all. Most of the
|
||
time, you'll find that fixing problems yourself is actually very easy.
|
||
It is the path to guruhood.
|
||
|
||
There are very few cases where reinstalling the system from
|
||
scratch is necessary. Many new users accidentally delete some es-
|
||
sential system file, and immediately reach for the installation disks.
|
||
This is not a good idea. Before taking such drastic measures, inves-
|
||
tigate the problem and ask others to help fix things up. In almost
|
||
all cases, you can recover your system from a maintenance diskette.
|
||
|
||
|
||
5.10.1 Recovering using a maintenance diskette
|
||
|
||
|
||
One indispensable tool for the system administrator is the so called
|
||
"boot/root disk"_a floppy which can be booted for a complete
|
||
Linux system, independent of your hard drive. Boot/root disks
|
||
are actually very simple_you create a root filesystem on the flop-
|
||
py, place all of the necessary utilities on it, and install LILO and a
|
||
bootable kernel on the floppy. Another technique is to use one flop-
|
||
py for the kernel and another for the root filesystem. In any case,
|
||
the result is the same: you are running a Linux system completely
|
||
from floppy.
|
||
|
||
The canonical example of a boot/root disk is the SLS a1 disk
|
||
(*Note: See Section 2.2 for information on downloading the SLS
|
||
release. For this procedure, you don't need to download the entire
|
||
SLS release_only the a1 disk). This disk contains a bootable k-
|
||
ernel and a root filesystem, all on floppy. Usually, it's used only
|
||
when installing SLS, but it comes in very handy when doing system
|
||
maintenance.
|
||
|
||
The H.J Lu boot/root disk, available from /pub/Linux/GCC on
|
||
sunsite.unc.edu, is another example of such a maintenance disk.
|
||
Or, if you're ambitious, you can create your own boot/root disk.
|
||
In most cases, however, using a pre-made boot/root disk is much
|
||
easier and will probably be more complete.
|
||
|
||
Using a boot/root disk is very simple. Just boot the disk on
|
||
your system, and login as root (usually no password). In order to
|
||
access the files on your hard drive, you will need to mount your
|
||
filesystems by hand. For example, the command
|
||
|
||
|
||
# mount -t ext2 /dev/hda2 /mnt
|
||
|
||
|
||
will mount an ext2fs filesystem on /dev/hda2 under /mnt. Re-
|
||
member that / is now on the boot/root disk itself; you need to
|
||
mount your hard drive filesystems under some directory in order
|
||
to access the files. Therefore, /etc/passwd on your hard drive is
|
||
now /mnt/etc/passwd if you mount your root filesystem on /mnt.
|
||
|
||
|
||
5.10.2 Fixing the root password
|
||
|
||
|
||
If you forget your root password, no problem. Just boot the
|
||
boot/root disk, mount your root filesystem on /mnt, and blank
|
||
out the password field for root in /mnt/etc/password, as so:
|
||
|
||
|
||
root::0:0:root:/:/bin/sh
|
||
|
||
|
||
Now root has no password; when you reboot from the hard drive
|
||
you should be able to login as root and reset the password using
|
||
passwd.
|
||
|
||
Aren't you glad you learned how to use vi? On your boot/root
|
||
disk, other editors such as Emacs probably aren't available, but vi
|
||
should be.
|
||
|
||
|
||
5.10.3 Fixing trashed filesystems
|
||
|
||
|
||
If you somehow trash your filesystems, you can run e2fsck (if you
|
||
use the ext2fs filesystem type, that is) to correct any damaged data
|
||
on the filesystems from floppy. Other filesystem types use different
|
||
forms of the e2fsck command; see Section 5.8 for details.
|
||
|
||
|
||
When checking your filesystems from floppy, it's best for the
|
||
filesystems to not be mounted.
|
||
|
||
|
||
5.10.4 Recovering lost files
|
||
|
||
|
||
If you accidentally deleted important files on your system, there's
|
||
no way to "undelete" them. However, you can copy the relevant
|
||
files from the floppy to your hard drive. For example, if you deleted
|
||
/bin/login on your system (which allows you to login), simply
|
||
boot the boot/root floppy, mount the root filesystem on /mnt, and
|
||
use the command
|
||
|
||
|
||
# cp -a /bin/login /mnt/bin/login
|
||
|
||
|
||
The -a option tells cp to preserve the permissions on the file(s)
|
||
being copied.
|
||
|
||
Of course, if the files you deleted weren't essential system files
|
||
which have counterparts on the boot/root floppy, you're out of
|
||
luck. If you made backups, you can always restore from them.
|
||
|
||
|
||
5.10.5 Fixing trashed libraries
|
||
|
||
|
||
If you accidentally trashed your libraries or symbolic links in /lib,
|
||
more than likely commands which depended on those libraries will
|
||
no longer run (see Section 5.7.2). The easiest solution is to boot
|
||
your boot/root floppy, mount your root filesystem, and fix the li-
|
||
braries in /mnt/lib.
|
||
|
||
|
||
|
||
|
||
Chapter 6
|
||
|
||
Advanced Features
|
||
|
||
|
||
|
||
This chapter will introduce you to some of the more interesting
|
||
features of Linux. This assumes that you have at least basic U-
|
||
NIX experience, and understand the information contained in the
|
||
previous chapters.
|
||
|
||
The most important aspect of Linux that distinguishes it from
|
||
other implementations of UNIX is its open design and philosophy.
|
||
Linux was not developed by a small team of programmers headed
|
||
by a marketing committee with a single goal in mind. It was de-
|
||
veloped by an ever-increasing group of hackers, putting what they
|
||
wanted into a homebrew UNIX system. The types of software and
|
||
diversity of design in the Linux world is large. Some people dislike
|
||
this lack of uniformity and conformity_however, some call it one
|
||
of the strongest qualities of Linux.
|
||
|
||
|
||
6.1 The X Window System
|
||
|
||
|
||
The X Window System is a large and powerful (and somewhat
|
||
complex) graphics environment for UNIX systems. The original
|
||
X Windows code was developed at MIT; commercial vendors have
|
||
since made X the industry standard for UNIX platforms. Virtually
|
||
every workstation in the world runs some variant of X Windows.
|
||
|
||
A free port of the MIT X Windows version 11, release 5 (X11R5)
|
||
for 80386/80486 UNIX systems has been developed by a team of
|
||
programmers headed by David Wexelblat (*Note: David may be
|
||
reached on the Internet at dwex@mtgzfs3.att.com.). The release,
|
||
known as XFree86, is available for System V/386, 386BSD, and
|
||
other i386 UNIX implementations, including Linux. It includes all
|
||
of the required binaries, support files, libraries, and tools.
|
||
|
||
Configuring and using the X Window System is far beyond the
|
||
scope of this book. You are encouraged to read The X Window
|
||
System User's Guide, by Valerie Quercia and Tim O'Reilly. See
|
||
Appendix B for information on this book. In this section, we'll
|
||
give a general overview of installing and configuring X Windows for
|
||
Linux, but it is far from complete. The man pages and README
|
||
files included with the Linux X Windows distribution should be
|
||
very helpful. Also, the Linux FAQ contains information on setting
|
||
up X Windows.
|
||
|
||
|
||
6.1.1 Hardware requirements
|
||
|
||
|
||
XFree86 supports a wide range of video controllers and monitors.
|
||
As of XFree86-1.3, the following SVGA chipsets are supported
|
||
(*Note: This information is taken from the XFree86-1.3 README
|
||
file by David Dawes.)
|
||
|
||
Tseng ET3000, ET4000; Western Digital/Paradise PVGA1; West-
|
||
ern Digital WD90C00, WD90C10, WD90C11, WD90C30, WD90C31;
|
||
Genoa GVGA; Trident TVGA8800CS, TVGA8900B, TVGA8900C,
|
||
TVGA8900CL, TVGA9000; ATI 28800-4, 28800-5, 28800-a; NCR
|
||
77C22, 77C22E; Cirrus Logic GLGD5420, CLGD5422, CLGD5424,
|
||
CLGD5426; and Compaq AVGA.
|
||
|
||
All of the above are supported in both 256 color and monochrome
|
||
modes, with the exception of the ATI and Cirrus chipsets, which
|
||
are only supported in 256 color mode.
|
||
|
||
The monochrome server also supports generic VGA cards, using
|
||
64k of video memory in a single bank, and the Hercules card. On
|
||
the Compaq AVGA, only 64k of video memory is supported for the
|
||
monochrome server, and the GVGA has not been tested with more
|
||
than 64k.
|
||
|
||
Note that the Diamond SpeedStar 24 (and possibly recent Speed-
|
||
Star+) boards are not supported, even though they use the ET4000.
|
||
The reason for this is that Diamond has changed the mechanism
|
||
used to select pixel clock frequencies, and will only release program-
|
||
ming information under non-disclosure. Supporting this board
|
||
would restrict distribution of the sources for XFree86.
|
||
|
||
A mention must be made of accelerated chipsets. At this point,
|
||
XFree86 does not support any accelerated chipsets. These include
|
||
the S3 86Cxxx, the ATI Mach8 and Mach32, the IBM 8514/A,
|
||
the new Western Digital chipset (on the Diamond SpeedStar 24X),
|
||
the new Cirrus and Tseng chipsets, and TIGA (TI 340x0). Some
|
||
of these will be supported in XFree86 2.0. However, there is a
|
||
separate server, XS3, available for S3 chipset boards (such as the
|
||
Orchid Fahrenheit).
|
||
|
||
Local bus cards are supported as well. The suggested setup for
|
||
XFree86 under Linux is a 486 machine with at least 8 megabytes
|
||
of RAM, and an ET4000 VESA local bus video card. This is the
|
||
"generic" setup which is known to work and is quite fast. Of course,
|
||
you must also have a VESA local bus motherboard in order to use
|
||
the local bus video card. I have run XFree86 on a 486/50 MHz
|
||
machine with 8 megs of RAM, and it's as fast or faster than many
|
||
color workstations running proprietary versions of UNIX and X.
|
||
|
||
|
||
6.1.2 Installing XFree86
|
||
|
||
|
||
The Linux binary distribution of XFree86 can be found on a num-
|
||
ber of Linux FTP sites. On sunsite.unc.edu, it is found in the
|
||
directory /pub/Linux/X11/Xfree86-1.3. (As of the time of this
|
||
writing, the current version is 1.3; newer versions are released peri-
|
||
odically). The binary distribution consists of a number of gzipped
|
||
tar files, all of which unpack from /. Installation is very simple;
|
||
just unpack these tar files and everything should go into the right
|
||
place.
|
||
|
||
Package Name Description
|
||
------------------------- --------------------------------------------------
|
||
xf86-1.3-bin.tar.gz Essential binaries and setup files; required.
|
||
xf86-1.3-kit.tar.gz X Server link kit. Only needed to hack the
|
||
X Server.
|
||
xf86-1.3-man.tar.gz Man pages.
|
||
xf86-1.3-pex.tar.gz PEX utilities, for the PEX programming environment.
|
||
xf86-1.3-prg.tar.gz X11 include files and libraries. Needed to write
|
||
X programs.
|
||
xf86-1.3-xfn.tar.gz Extra fonts.
|
||
|
||
|
||
After installing the software, you need to link the shared li-
|
||
braries from /usr/X386/lib to /lib. One way to do this is with
|
||
the command:
|
||
|
||
|
||
# ln -s /usr/X386/lib/lib*.so.? /lib
|
||
|
||
|
||
You may wish to physically copy the files instead.
|
||
|
||
If you installed XFree86 with from a standard Linux distribu-
|
||
tion such as SLS or TAMU, then all of the files should already be
|
||
in the right place.
|
||
|
||
If you wish to use the SVGA color server, the file /usr/bin/X11/X
|
||
should be linked to /usr/bin/X11/XF86_SVGA. If you wish to use
|
||
the monochrome server instead, relink this file to XF86_MONO with
|
||
the command
|
||
|
||
|
||
# ln -sf /usr/bin/X11/XF86_MONO /usr/bin/X11/X
|
||
|
||
|
||
The XS3 server for S3-based SVGA cards is on sunsite.unc.edu
|
||
in the directory /pub/Linux/X11/X-servers/s3. XS3 has its own
|
||
instructions for setup and configuration; see the README files there
|
||
for more details.
|
||
|
||
|
||
6.1.3 Configuring XFree86
|
||
|
||
|
||
Setting up XFree86 is not difficult in most cases. Only when you
|
||
have non-standard hardware will XFree86 configuration give you
|
||
any problems. However, XFree86 configuration is beyond the scope
|
||
of this document; here, we'll give you a brief overview of how it
|
||
works.
|
||
|
||
The main XFree86 configuration file is /usr/lib/X11/Xconfig.
|
||
This file contains information on your mouse, video card param-
|
||
eters, and so on. The file Xconfig.sample is provided with the
|
||
XFree86 distribution as an example. The XFree86 man page ex-
|
||
plains the format of this file in detail.
|
||
|
||
In general, here's how it works. Your video card is capable of
|
||
driving a number of "dot clocks" which are simply clock frequencies
|
||
for your card. In turn, each dot clock has a resolution mode associ-
|
||
ated with it, such as 640x480 or 1024x768. (You are not restrained
|
||
to using "standard" resolutions, as we will see). In the Xconfig file
|
||
there exists stanzas for configuring your mouse, keyboard, and so
|
||
on. There also exists stanzas for each server: vga256 for the color
|
||
SVGA server, and vga2 for the monochrome server.
|
||
|
||
Under each server stanza are lines to set the virtual resolution,
|
||
chipset type, and so on for you video card. There is also a Modes
|
||
line which specifies which modes are available on your card. Modes
|
||
are usually named after their resolution. For example,
|
||
|
||
|
||
Modes "640x480" "800x600" "1024x768"
|
||
|
||
|
||
Each mode on this line is an index into the modeDB stanza at the end
|
||
of the Xconfig file. It is this section of the file which determines
|
||
the actual video parameters for each mode.
|
||
|
||
There is also an optional Clocks line which you can use to
|
||
set the available dot clocks for your card. By default, XFree86 will
|
||
determine the clocks at startup time; however, because clock timing
|
||
can be thrown off by other programs running on your system, it
|
||
may be easier to set the clocks in the Xconfig file.
|
||
|
||
The modeDB section of the Xconfig file is the important part.
|
||
Each video card and monitor has its own set of timing and sync fre-
|
||
quencies for different resolutions. The file /usr/lib/X11/etc/modeDB.txt
|
||
contains a database of some known monitor and video card timing
|
||
numbers. Many card and monitors use the VESA standard timings
|
||
included in the sample Xconfig file.
|
||
|
||
There are various other documents in /usr/lib/X11/etc which
|
||
you should read. The file VideoModes.txt is a tutorial on hack-
|
||
ing your own monitor frequency timings if you simply can't get
|
||
any of the numbers in modeDB.txt to work. There is also a col-
|
||
lection of sample Xconfig files on sunsite.unc.edu in the file
|
||
/pub/Linux/X11/Xconfig.tgz. Also see the XFree86 man pages
|
||
for more information.
|
||
|
||
|
||
6.1.4 Starting up X
|
||
|
||
|
||
After configuring the XConfig file, you can start the server with the
|
||
startx command. There are a few things to take into consideration
|
||
first, however.
|
||
|
||
Make sure that the directory /usr/bin/X11 is on your path.
|
||
This directory contains all of the X binaries and the server itself.
|
||
|
||
Secondly, the X server requires a free VC to enable VC switch-
|
||
ing (*Note: While running X, you can switch back to your text
|
||
VC's using the keys [ctrl-alt-F1] through [ctrl-alt-F12]. To re-
|
||
turn to X, simply switch to the VC reserved for XFree86.). In
|
||
other words, you must have one of your VC's available, with no
|
||
login process running on it. The easiest way to ensure this is to
|
||
edit /etc/inittab and delete one of the getty lines which starts
|
||
up a login process on each VC. In my inittab, for example, I run
|
||
getty on /dev/tty1 through /dev/tty7 (that is, VC's 1 through 7),
|
||
but not on /dev/tty8.
|
||
|
||
When running startx, the file $HOME/.xinitrc is read. This
|
||
file is a shell script which contains commands to run after the X
|
||
server is started. If this file doesn't exist, the file /usr/lib/X11/xinit/xini*
|
||
*trc
|
||
is used as a system-wide default instead. You can use this default
|
||
file as a sample .xinitrc file.
|
||
|
||
Using X Windows is a large topic, and we won't try to cover it
|
||
here. Read The X Window System User's Guide, or another book
|
||
on using X, for details. See Appendix B information on this book.
|
||
|
||
|
||
6.1.5 Exiting X
|
||
|
||
|
||
Usually, the last client started in .xinitrc is the one used to shut-
|
||
down X cleanly. For example, if the last command in .xinitrc
|
||
is
|
||
|
||
|
||
exec twm
|
||
|
||
|
||
then killing the twm process will result in X shutting down.
|
||
|
||
However, if you need to immediately kill the X server for some
|
||
reason, you can use the key combination [ctrl-alt-backspace].
|
||
|
||
|
||
6.1.6 Accessing MS-DOS Files
|
||
|
||
|
||
If, for some twisted and bizarre reason, you would have need to
|
||
access files from MS-DOS, it's quite easily done under Linux.
|
||
|
||
The usual way to access MS-DOS files is to mount an MS-DOS
|
||
partition or floppy under Linux, allowing you to access the files
|
||
directly through the filesystem. For example, if you have an MS-
|
||
DOS floppy in /dev/fd0, the command
|
||
|
||
|
||
# mount -t msdos /dev/fd0 /mnt
|
||
|
||
|
||
will mount it under /mnt. See Section 5.6.2 for more information
|
||
on mounting floppies.
|
||
|
||
You can also mount an MS-DOS partition of your hard drive
|
||
for access under Linux. If you have an MS-DOS partition on
|
||
/dev/hda1, the command
|
||
|
||
|
||
# mount -t msdos /dev/hda1 /mnt
|
||
|
||
|
||
will mount it. Be sure to umount the partition when you're done us-
|
||
ing it. You can have your MS-DOS partitions automatically mount-
|
||
ed at boot time if you include entries for them in /etc/fstab;
|
||
see Section 5.8 for details. For example, the following line in
|
||
/etc/fstab will mount an MS-DOS partition on /dev/hda1 on
|
||
the directory /dos.
|
||
|
||
|
||
/dev/hda1 /dos msdos defaults
|
||
|
||
|
||
The Mtools software may also be used to access MS-DOS files.
|
||
For example, the commands mcd, mdir, and mcopy all behave as
|
||
their MS-DOS counterparts. If you installed Mtools, there should
|
||
be man pages available for these commands.
|
||
|
||
Accessing MS-DOS files is one thing; running MS-DOS pro-
|
||
grams from Linux is another. There is an MS-DOS Emulator under
|
||
development for Linux; it is widely available, and even distributed
|
||
with SLS. It can be retrieved from a number of locations, including
|
||
the various Linux FTP sites (see Appendix C for details). The MS-
|
||
DOS Emulator is reportedly powerful enough to run a number of
|
||
applications, including Wordperfect, from Linux. However, Linux
|
||
and MS-DOS are vastly different operating systems. The power of
|
||
any MS-DOS emulator under UNIX is somewhat limited.
|
||
|
||
In addition, work is underway on a Microsoft Windows emulator
|
||
to run under X Windows. Watch the newsgroups and FTP sites
|
||
for more information.
|
||
|
||
|
||
6.2 Networking with TCP/IP
|
||
|
||
|
||
Linux supports a full implementation of the TCP/IP (Transport
|
||
Control Protocol/Internet Protocol) networking protocols. TCP/IP
|
||
has become the most successful mechanism for networking comput-
|
||
ers worldwide. With Linux and an Ethernet card, you can network
|
||
your machine to a local area network, or (with the proper network
|
||
connections), to the Internet_the worldwide TCP/IP network.
|
||
|
||
Hooking up a small LAN of UNIX machines is easy. It simply
|
||
requires an Ethernet controller in each machine and the appropri-
|
||
ate Ethernet cables and other hardware. Or, if your business or
|
||
university provides access to the Internet, you can easily add your
|
||
Linux machine to this network.
|
||
|
||
Linux TCP/IP also supports SLIP_Serial Line Internet Proto-
|
||
col. SLIP allows you to have dialup Internet access using a modem.
|
||
If your business or university provides SLIP access, you can dial in
|
||
to the SLIP server and put your machine on the Internet over the
|
||
phone line. Alternately, if your Linux machine also has Ethernet
|
||
access to the Internet, you can set up your Linux box as a SLIP
|
||
server.
|
||
|
||
For complete information on setting up TCP/IP under Lin-
|
||
ux, we encourage you to read the Linux NET-2-FAQ, available via
|
||
anonymous FTP from sunsite.unc.edu. The NET-2-FAQ is a
|
||
complete guide to configuring TCP/IP, including Ethernet and SLIP
|
||
connections, under Linux. The more complete Linux Network
|
||
Administration Guide, from the Linux Documentation Project,
|
||
should also be available. Also of interest is the book TCP/IP Net-
|
||
work Administration, by Craig Hunt. It contains complete infor-
|
||
mation on using and configuring TCP/IP on UNIX systems. See
|
||
Appendix B for more information.
|
||
|
||
|
||
6.2.1 Hardware Requirements
|
||
|
||
|
||
You can use Linux TCP/IP without any networking hardware at
|
||
all_configuring "loopback" mode allows you to talk to yourself.
|
||
This is necessary for some applications and games which use the
|
||
"loopback" network device.
|
||
|
||
However, if you want to use Linux with an Ethernet TCP/IP
|
||
network, you need one of the following Ethernet cards: 3com 3c503,
|
||
3c503/16; Novell NE1000, NE2000; Western Digital WD8003, WD8013;
|
||
Hewlett Packard HP27245, HP27247, HP27250. The following
|
||
clones are reported to work: WD-80x3 clones: LANNET LEC-
|
||
45; NE2000 clones: Alta Combo, Artisoft LANtastic AE-2, Asante
|
||
Etherpak 2001/2003, D-Link Ethernet II, LTC E-NET/16 P/N
|
||
8300-200-002, Network Solutions HE-203, SVEC 4 Dimension Eth-
|
||
ernet, 4-Dimension FD0490 EtherBoard 16, and D-Link DE-600.
|
||
|
||
Linux also supports SLIP, which allows you to use a modem to
|
||
access the Internet over the phone line. In this case, you'll need a
|
||
modem compatible with your SLIP server_most servers require a
|
||
14.4bps V.32bis modem, such as the US Robotics Sportster, or the
|
||
Infotel 144DF Internal.
|
||
|
||
|
||
6.3 Networking with UUCP
|
||
|
||
|
||
UUCP (UNIX-to-UNIX Copy) is an older mechanism used to trans-
|
||
fer information between UNIX systems. Using UUCP, UNIX sys-
|
||
tems dial each other up (using a modem) and transfer mail mes-
|
||
sages, news articles, files, and so on. If you don't have TCP/IP or
|
||
SLIP access, you can use UUCP to communicate with the world.
|
||
Most of the mail and news software (see Sections 6.4 and 6.5) can
|
||
be configured to use UUCP to transfer information to other ma-
|
||
chines. In fact, if there is an Internet site nearby, you can arrange
|
||
to have Internet mail sent to your Linux machine via UUCP from
|
||
that site.
|
||
|
||
The Linux Network Administrator's Guide contains complete
|
||
information on configuring and using UUCP under Linux. Also,
|
||
the Linux UUCP-MAIL-NEWS FAQ, available via anonymous FT-
|
||
P from sunsite.unc.edu, should be of help. Another source of in-
|
||
formation on UUCP is the book Managing UUCP and USENET,
|
||
by Tim O'Reilly and Grace Todino. See Appendix B for more
|
||
information.
|
||
|
||
|
||
6.4 Electronic Mail
|
||
|
||
|
||
Like most UNIX systems, Linux provides a number of software
|
||
packages for using electronic mail. E-mail on your system can ei-
|
||
ther be local (that is, you only mail other users on your system), or
|
||
networked (that is, you mail, using either TCP/IP or UUCP, users
|
||
on other machines on a network). E-mail software usually consists
|
||
of two parts: a mailer and a transport. The mailer is the user-
|
||
level software which is used to actually compose and read e-mail
|
||
messages. Popular mailers include elm and mailx. The transport
|
||
is the low-level software which actually takes are of delivering the
|
||
mail, either locally or remotely. The user never sees the trans-
|
||
port software; they only interact with the mailer. However, as the
|
||
system administrator, it is important to understand the concepts
|
||
behind the transport software and how to configure it.
|
||
|
||
The most popular transport software for Linux is Smail. This
|
||
software is easy to configure, and is able to send both local and
|
||
remote TCP/IP e-mail. The more powerful sendmail transport is
|
||
used on most UNIX systems, however, because of its complicated
|
||
setup mechanism, most Linux systems don't use it.
|
||
|
||
The Linux UUCP-MAIL-NEWS FAQ gives more information
|
||
on the available mail software for Linux and how to configure it
|
||
on your system. If you plan to send mail remotely, you'll need
|
||
to understand either TCP/IP or UUCP, depending on how your
|
||
machine is networked (see Sections 6.2 and 6.3). The UUCP and
|
||
TCP/IP documents listed in Appendix B should be of help there.
|
||
|
||
Most of the Linux mail software can be retrieved via anonymous
|
||
FTP from sunsite.unc.edu in the directory /pub/Linux/system/Mail.
|
||
|
||
|
||
6.5 News and USENET
|
||
|
||
|
||
Linux also provides a number of facilities for managing electronic
|
||
news. You may choose to set up a local news server on your system,
|
||
which will allow users to post "articles" to various "newsgroups"
|
||
on the system...a lively form of discussion. However, if you have
|
||
access to a TCP/IP or UUCP network, then you will be able to
|
||
participate in USENET_a worldwide network news service.
|
||
|
||
There are two parts to the news software_the server and the
|
||
client. The news server is the software which controls the news-
|
||
groups and handles delivering articles to other machines (if you
|
||
are on a network). The news client, or newsreader, is the software
|
||
which connects to the server to allow users to read and post news.
|
||
|
||
There are several forms of news servers available for Linux.
|
||
They all follow the same basic protocols and design. The two pri-
|
||
mary versions are "C News" and "INN". There are many types of
|
||
newsreaders, as well, such as rn and tin. The choice of newsread-
|
||
er is more or less a matter of taste; all newsreaders should work
|
||
equally well with different versions of the server software. That
|
||
is, the newsreader is independent of the server software, and vice
|
||
versa.
|
||
|
||
If you only want to run news locally (that is, not as part of
|
||
USENET), then you will need to run a server on your system, as
|
||
well as install a newsreader for the users. The news server will
|
||
store the articles in a directory such as /usr/spool/news, and
|
||
the newsreader will be compiled to look in this directory for news
|
||
articles.
|
||
|
||
However, if you wish to run news over the network, there are
|
||
several options open to you. TCP/IP network-based news uses a
|
||
protocol known as NNTP (Network News Transmission Protocol).
|
||
NNTP allows a newsreader to read news over the network, on a
|
||
remote machine. NNTP also allows news servers to send articles
|
||
to each other over the network_this is the software upon which
|
||
USENET is based. Most businesses and universities have one or
|
||
more NNTP servers set up to handle all of the USENET news for
|
||
that site. Every other machine at the site runs an NNTP-based
|
||
newsreader to read and post news over the network via the NNTP
|
||
server. This means that only the NNTP server actually stores the
|
||
news articles on disk.
|
||
|
||
Here are some possible scenarios for news configuration.
|
||
|
||
|
||
o You run news locally. That is, you have no network connec-
|
||
tion, or no desire to run news over the network. In this case,
|
||
you need to run C News or INN on your machine, and install
|
||
a newsreader to read the news locally.
|
||
|
||
o You have access to a TCP/IP network and an NNTP server.
|
||
If your organization has an NNTP news server set up, you
|
||
can read and post news from your Linux machine by simply
|
||
installing an NNTP-based newsreader. (Most newsreaders
|
||
available can be configured to run locally or use NNTP). In
|
||
this case, you do not need to install a news server or store
|
||
news articles on your system. The newsreader will take care
|
||
of reading and posting news over the network. Of course, you
|
||
will need to have TCP/IP configured and have access to the
|
||
network (see Section 6.2).
|
||
|
||
o You have access to a TCP/IP network but have no NNT-
|
||
P server. In this case, you can run an NNTP news server
|
||
on your Linux system. You can install either a local or an
|
||
NNTP-based newsreader, and the server will store news arti-
|
||
cles on your system. In addition, you can configure the server
|
||
to communicate with other NNTP news servers to transfer
|
||
news articles.
|
||
|
||
o You want to transfer news using UUCP. If you have UUCP
|
||
access (see Section 6.3), you can participate in USENET as
|
||
well. You will need to install a (local) news server and a news
|
||
reader. In addition, you will need to configure your UUCP
|
||
software to periodically transfer news articles to another n-
|
||
earby UUCP machine (known as your "news feed"). UUCP
|
||
does not use NNTP to transfer news; simply, UUCP provides
|
||
its own mechanism for transferring news articles.
|
||
|
||
|
||
The one downside of most news server and newsreader software
|
||
is that it must be compiled by hand. Most of the news software
|
||
does not use configuration files; instead, configuration options are
|
||
determined at compile time.
|
||
|
||
Most of the "standard" news software (available via anony-
|
||
mous FTP from ftp.uu.net in the directory /news) will com-
|
||
pile out-of-the box on Linux. Necessary patches can be found on
|
||
sunsite.unc.edu in /pub/Linux/system/Mail (which is, inciden-
|
||
tally, also where mail software for Linux is found). Other news
|
||
binaries for Linux may be found in this directory as well.
|
||
|
||
For more information, refer to the Linux UUCP-MAIL-NEWS
|
||
FAQ from sunsite.unc.edu in /pub/Linux/docs. Also, the LD-
|
||
P's Linux Network Administrator's Guide contains complete infor-
|
||
mation on configuring news software for Linux. The book Manag-
|
||
ing UUCP and Usenet, by Tim O'Reilly and Grace Todino, is an
|
||
excellent guide to setting up UUCP and news software. Also of in-
|
||
terest is the USENET document "How to become a USENET site,"
|
||
available from ftp.uu.net, in the directory /usenet/news.announce.newusers.
|
||
|
||
|
||
|
||
Appendix A
|
||
|
||
Tips, Tricks, and Common Problems
|
||
|
||
|
||
|
||
This appendix contains information on some commonly used tricks
|
||
and techniques, as well as solutions to common problems.
|
||
|
||
|
||
A.1 Installing SLS From the Hard Drive
|
||
|
||
|
||
Instead of installing SLS from floppy, you can simply keep all of
|
||
the distribution files on another partition on your hard drive (say,
|
||
your MS-DOS partition), and install from there.
|
||
|
||
First, you need to create the SLS a1 disk as you would for a
|
||
floppy installation. Secondly, all of the other SLS files need to go
|
||
in a directory named install at the top level of the partition. For
|
||
example, if you plan to install from an MS-DOS partition on drive
|
||
C:, the directory names will be C:"install"a2, C:"install"a3,
|
||
and so on. Each subdirectory of install will contain the files for
|
||
the corresponding diskette.
|
||
|
||
Make sure that install is a top-level directory on the partition.
|
||
In other words, the directory C:"SLS"install will not work. It
|
||
must be C:"install.
|
||
|
||
All of the other installation steps (creating partitions and filesys-
|
||
tems, and so on) are identical to those found in Chapter 3. When
|
||
using the doinstall command, simply choose the menu option to
|
||
install from the hard drive. You will be prompted for the parti-
|
||
tion name (such as /dev/hda2) and the type of partition (such as
|
||
msdos). Everything else should be self-explanatory.
|
||
|
||
|
||
A.2 Installing the SLS CD-ROM
|
||
|
||
|
||
If someone will lend me a CD-ROM drive, I can write this section.
|
||
|
||
|
||
A.3 Using Multiple Filesystems
|
||
|
||
|
||
If you have experience with UNIX system administration, it should
|
||
be easy to decide how to use multiple filesystems with Linux. For
|
||
example, you can use seperate filesystems for root and /usr space.
|
||
|
||
There is no inherent benefit to using multiple filesystems for
|
||
Linux. However, if you're conscious about keeping everything mount-
|
||
ed at once, then you may wish to do so. For example, if you ac-
|
||
cidentally trash your root filesystem, then other filesystems, such
|
||
as /usr, won't be affected. However, using multiple filesystems
|
||
means that you have to plan your space carefully_there is no way
|
||
to nondestructively resize filesystems (yet).
|
||
|
||
You may wish to use multiple swap partitions as well_because
|
||
swap partitions are limited to 16 megabytes each. You may use up
|
||
to 8 swap partitions on your system.
|
||
|
||
Using multiple filesystems is easy. First of all, you must have a
|
||
seperate partition for each filesystem. If you are creating a number
|
||
of filesystems, you may need to use logical partitions in order to
|
||
overcome the 4 primary partition limit. While using fdisk, simply
|
||
use the "n" command to create a new partition for each Linux
|
||
filesystem you want to create.
|
||
|
||
Before installing the software, simply use the appropriate mke2fs
|
||
command for each filesystem that you wish to create.
|
||
|
||
When installing the software, there may be extra steps involved
|
||
in getting the system to recognize all of your filesystems for in-
|
||
stallation. For some releases, you may need to mount all of the
|
||
filesystems in the appropriate place.
|
||
|
||
To install the SLS release, all you need to do is use extra argu-
|
||
ments on the doinstall command, as so:
|
||
|
||
|
||
doinstall <rootfs> <mount-pt1> <fs1> <mount-pt2> <fs2> ...<mount-ptN> <fsN>
|
||
|
||
|
||
For example, if you have your root filesystem on /dev/hda2, y-
|
||
our /usr filesystem on /dev/hda3, and your /tmp filesystem on
|
||
/dev/hda4, use the command
|
||
|
||
|
||
# doinstall /dev/hda2 /usr /dev/hda3 /tmp /dev/hda4
|
||
|
||
|
||
See your documentation for details on using multiple filesystems
|
||
with the release of Linux that you're installing.
|
||
|
||
|
||
A.4 Using dd Instead of rawrite.exe
|
||
|
||
|
||
If you would rather create your Linux install disks from a UNIX
|
||
system, rather than using rawrite.exe on an MS-DOS system,
|
||
you can use the following procedure. Note that this procedure
|
||
does not specify how to create MS-DOS formatted disks (such as
|
||
the SLS a2 through a4 disks). This procedure only replaces the
|
||
use of rawrite.exe (for the SLS a1 disk, for example).
|
||
|
||
The dd command may be used on a UNIX system to replace
|
||
the use of rawrite. The format of the command is as follows:
|
||
|
||
|
||
dd if=<input-file> of=<output-file> bs=16k conv=sync
|
||
|
||
|
||
The <input-file> is the name of the file to write to the floppy, such
|
||
as "a1.3".
|
||
|
||
<output-file> is the name of the floppy device to write the file
|
||
to. On many systems, this is /dev/rfdn, where n is a number
|
||
such as 0 or 1 depending on the unit number of the floppy drive.
|
||
However, this varies greatly from system to system. You need to
|
||
check with the system administrator of the system in question to
|
||
determine the device name of the floppy drive. For example, on
|
||
some systems the following will work:
|
||
|
||
|
||
# dd if=a1.3 of=/dev/rfd0 bs=16k conv=sync
|
||
|
||
|
||
Under Linux, the floppy drive device name is either /dev/fd0
|
||
(for the first floppy drive), or /dev/fd1 (for the second). You can
|
||
use the command
|
||
|
||
|
||
# dd if=a1.3 of=/dev/fd0 bs=16k conv=sync
|
||
|
||
|
||
to "rawrite" a floppy from another Linux system. Or, you simply
|
||
use the cp command as so:
|
||
|
||
|
||
# cp a1.3 /dev/fd0
|
||
|
||
|
||
cp may work on other UNIX systems as well.
|
||
|
||
|
||
A.5 Using a swap file
|
||
|
||
|
||
Instead of reserving an individual partition for swap space, you can
|
||
use a file. However, to do so you'll need install the Linux software
|
||
and get everything going before you create the swap file.
|
||
|
||
If you have a Linux system installed, you can use the following
|
||
commands to create a swap file. Below, we're going to create a
|
||
swap file of size 8208 blocks (about 8 megs).
|
||
|
||
|
||
# dd if=/dev/zero of=/swap bs=1024 count=8208
|
||
|
||
|
||
This command creates the swap file itself. Replace the "count="
|
||
with the size of the swap file in blocks.
|
||
|
||
|
||
# swapon /swap
|
||
|
||
|
||
Now we are swapping on the file /swap which we have created.
|
||
|
||
The one major drawback to using a swapfile in this manner is
|
||
that all access to the swap file is done through the filesystem. This
|
||
means that the blocks which make up the swap file may not be
|
||
contiguous. Therefore, performance may not be as great as using
|
||
a swap partition, for which blocks are always contiguous and I/O
|
||
requests are done directly to the device.
|
||
|
||
Another drawback in using a swapfile is the chance to cor-
|
||
rupt your filesystem data_when using large swap files, there is
|
||
the chance that you can corrupt your filesystem if something goes
|
||
wrong. Keeping your filesystems and swap partitions seperate will
|
||
prevent this from happening.
|
||
|
||
Using a swap file can be very useful if you have a temporary
|
||
need for more swap space. For example, if you're compiling a
|
||
large program and would like to speed things up somewhat, you
|
||
can temporarily create a swap file and use it in addition to your
|
||
regular swap space.
|
||
|
||
To get rid of a swap file, first use swapoff, as in
|
||
|
||
|
||
# swapoff /swap
|
||
|
||
|
||
And you can safely delete the file.
|
||
|
||
|
||
# rm /swap
|
||
|
||
|
||
Remember that each swap file (or partition) may be a large as
|
||
16 megabytes, but you may use up to 8 swap files or partitions on
|
||
your system.
|
||
|
||
|
||
|
||
|
||
Appendix B
|
||
|
||
|
||
Bibliography and Sources of Information
|
||
|
||
|
||
This appendix provides a listing of other valuable sources of infor-
|
||
mation about Linux, including recommended UNIX books which
|
||
would be of use to the new Linux user.
|
||
|
||
|
||
B.1 The Linux Frequently Asked Questions List
|
||
|
||
|
||
The Linux FAQ is a listing of frequently asked questions and an-
|
||
swers about Linux. It is a large document which covers almost
|
||
every problem relevant to the Linux community. However, the cur-
|
||
rent Linux FAQ is a large, bloated document which is in dire need
|
||
of reorganization. Matt Welsh and Ian Jackson are currently work-
|
||
ing on a complete rewrite of the Linux FAQ. Hopefully it will be
|
||
complete by the time you read this manual!
|
||
|
||
The Linux FAQ can be retrieved from a number of FTP sites
|
||
worldwide. The canonical location is sunsite.unc.edu, in the
|
||
file /pub/Linux/docs/FAQ. The directory /pub/Linux/docs/faqs
|
||
contains other versions of the FAQ, including texinfo and .dvi
|
||
format. You can find a number of other Linux documents in this
|
||
directory as well.
|
||
|
||
The Linux FAQ is also posted monthly to the USENET news-
|
||
groups comp.os.linux, comp.os.linux.announce, and news.answers.
|
||
If you don't have USENET or FTP access, you can retrieve the
|
||
Linux FAQ via the mail server at rtfm.mit.edu. Send mail to the
|
||
address
|
||
|
||
|
||
mail-server@rtfm.mit.edu
|
||
|
||
|
||
with the word "help" in the body.
|
||
|
||
It is also distributed as part of several Linux releases, such as
|
||
SLS and the Yggdrasil CD-ROM.
|
||
|
||
If you simply can't find a copy of the Linux FAQ any other way,
|
||
feel free to mail Matt Welsh at mdw@tc.cornell.edu; I can send
|
||
it to you directly.
|
||
|
||
|
||
B.2 The Linux Documentation Project Manuals
|
||
|
||
|
||
The Linux Documentation Project is in the process of providing a
|
||
number of manuals and books for Linux (including this one!). The
|
||
current location for publicly-available LDP manuals is /pub/linux/ALPHA/LDP
|
||
on tsx-11.mit.edu. See the file INDEX for a listing of what's avail-
|
||
able.
|
||
|
||
The LDP manuals currently under development are: The Lin-
|
||
ux System Administrator's Guide, Linux Network Administrator's
|
||
Guide, Linux Kernel Hacker's Guide, Linux User's Guide, and, of
|
||
course, Linux Installation and Getting Started. All of these are in
|
||
various states of completion.
|
||
|
||
Keep in mind the manuals in this directory are under development_
|
||
that is, there may be parts and sections still to be written, and
|
||
everything may not be completely accurate. Once the manuals are
|
||
"complete", they will be moved to another location.
|
||
|
||
|
||
B.3 Other Online Documents
|
||
|
||
|
||
There are a number of other online documents of interest to new
|
||
Linux users.
|
||
|
||
|
||
B.3.1 The Linux INFO-SHEET
|
||
|
||
|
||
The INFO-SHEET is a short document giving some of the technical
|
||
details of Linux, including hardware requirements and other infor-
|
||
mation. You can find it on sunsite.unc.edu:/pub/Linux/docs/INFO-SHEET.
|
||
It is posted to the various Linux USENET newsgroups as well.
|
||
|
||
|
||
B.3.2 The Linux META-FAQ
|
||
|
||
|
||
The Linux META-FAQ is a collection of Linux sources of informa-
|
||
tion (much like this appendix). It serves as a general introduction
|
||
to getting Linux information; most of the material therein is cov-
|
||
ered in this manual. This file can be found on
|
||
sunsite.unc.edu:/pub/Linux/docs/META-FAQ.
|
||
|
||
|
||
B.3.3 The Linux Hardware Compatibility List
|
||
|
||
|
||
The Hardware Compatibility List lists some of the hardware which
|
||
is known to work with Linux. However, much of the hardware is not
|
||
on this list; for example, all IDE drives should work with Linux, so
|
||
all makes and models are not listed there. The Hardware Compati-
|
||
bility List is in the file sunsite.unc.edu:/pub/Linux/docs/HARDWARE.
|
||
|
||
|
||
B.3.4 The Linux Software Map
|
||
|
||
|
||
The Linux Software Map is a listing of some of the available soft-
|
||
ware for Linux, where to get it, and who maintains it. However, the
|
||
LSM is far from complete; most of the people who distribute soft-
|
||
ware for Linux haven't added entries to it (also, the LDM project
|
||
is relatively new). Therefore, keep in mind that there is much more
|
||
software available for Linux than is actually listed in the LSM.
|
||
|
||
The current version of the LSM can be found on sunsite.unc.edu
|
||
in the file /pub/Linux/docs/LSM.z. This is a gzipped file; you
|
||
must use the gzip utility to uncompress it.
|
||
|
||
|
||
B.3.5 The Linux NET-2-FAQ
|
||
|
||
|
||
The Linux NET-2-FAQ is a guide to setup and configuring TCP/IP
|
||
networking software under Linux (see Section 6.2). The most recent
|
||
version can be found on sunsite.unc.edu in the file /pub/Linux/docs/NET-2-FAQ.
|
||
|
||
|
||
B.3.6 Others
|
||
|
||
|
||
On sunsite.unc.edu:/pub/Linux/docs are a number of other
|
||
documents related to Linux. Most of these aren't of concern to
|
||
the new user; all of the introductory and installation material for
|
||
Linux is covered in this manual.
|
||
|
||
|
||
B.4 Linux USENET Newsgroups
|
||
|
||
|
||
There are two USENET newsgroups are devoted to Linux. These
|
||
are comp.os.linux, for general questions and discussion about Lin-
|
||
ux, and comp.os.linux.announce, which is a moderated news-
|
||
group for Linux announcements and bug patches. Submissions to
|
||
comp.os.linux.announce must be approved by the moderator,
|
||
Matt Welsh, before they are posted. When posting to c.o.l.a,
|
||
your news software will usually automatically mail the posting to
|
||
the moderator for approval. However, if your news software is not
|
||
configured correctly, you may have to mail the posting directly to
|
||
the address linux-announce@tc.cornell.edu.
|
||
|
||
Postings in comp.os.linux.announce are archived on sunsite.unc.edu
|
||
in the directory /pub/Linux/docs/linux-announce.archive. Traf-
|
||
fic to c.o.l.a is also mirrored to the "ANNOUNCE" channel of the
|
||
linux-activists mailing list; see the next section for details.
|
||
|
||
Traffic in comp.os.linux is very high_it is one of the most
|
||
popular newsgroups on USENET. It is strongly suggested that y-
|
||
ou read the Linux FAQ and read the newsgroup before posting
|
||
any questions_more than likely, your question has already been
|
||
covered in the newsgroup. You should use a threaded newsread-
|
||
er, such as nn or trn, if you want to follow the high volume in
|
||
comp.os.linux.
|
||
|
||
|
||
B.5 Linux Mailing Lists
|
||
|
||
|
||
There are a number of mailing lists available for the Linux commu-
|
||
nity as well. The most prominent of these is the linux-activists
|
||
mailing list. This list is generally for developers and programmer-
|
||
s for Linux_there are very few discussions relating to using or
|
||
installing Linux. All such user questions about Linux should be
|
||
directed to the newsgroup comp.os.linux instead.
|
||
|
||
The linux-activists mailing list is a multi-channel mailing
|
||
list; that is, you join a particular "channel" and receive mail (usu-
|
||
ally in digest format) for that channel only. You can join multiple
|
||
channels if you wish. For more information on joining this mailing
|
||
list, send mail to
|
||
|
||
|
||
linux-announce-request@niksula.hut.fi
|
||
|
||
|
||
with the word "help" in the subject.
|
||
|
||
|
||
B.6 Bibliography
|
||
|
||
|
||
At present, the only books devoted to Linux are those distributed
|
||
by the Linux Documentation Project. However, many of the books
|
||
available for other versions of UNIX are relevant to Linux as well.
|
||
|
||
Title: Learning the UNIX Operating System
|
||
Author: Grace Todino & John Strang
|
||
Publisher: O'Reilly and Associates, 1987
|
||
ISBN: 0-937175-16-1, $9.00
|
||
|
||
A good introductory book on learning the UNIX
|
||
operating system. Most of the information should be
|
||
applicable to Linux as well. I suggest reading this book
|
||
if you're new to UNIX and really want to get started
|
||
with using your new system.
|
||
|
||
|
||
Title: Learning the vi Editor
|
||
Author: Linda Lamb
|
||
Publisher: O'Reilly and Associates, 1990
|
||
ISBN: 0-937175-67-6, $21.95
|
||
|
||
This is a complete book about the vi editor, a pow-
|
||
erful text editor found on every UNIX system in the
|
||
world. It's often important to know and be able to use
|
||
vi, because you won't always have access to a "real"
|
||
editor such as Emacs.
|
||
|
||
|
||
Title: Essential System Administration
|
||
Author: AEleen Frisch
|
||
Publisher: O'Reilly and Associates, 1991
|
||
ISBN: 0-937175-80-3, $29.95
|
||
|
||
From the O'Reilly and Associates Catalog, "Like
|
||
any other multi-user system, UNIX requires some care
|
||
and feeding. Essential System Administration tells y-
|
||
ou how. This book strips away the myth and confu-
|
||
sion surrounding this important topic and provides a
|
||
compact, manageable introduction to the tasks faced
|
||
by anyone responsible for a UNIX system." I couldn't
|
||
have said it better myself.
|
||
|
||
|
||
Title: TCP/IP Network Administration
|
||
Author: Craig Hunt
|
||
Publisher: O'Reilly and Associates, 1990
|
||
ISBN: 0-937175-82-X, $24.95
|
||
|
||
A complete guide to setting up and running a TCP/IP
|
||
network. While this book is not Linux-specific, rough-
|
||
ly 90% of it is applicable to Linux. Coupled with the
|
||
Linux NET-2-FAQ and Linux Network Administrator's
|
||
Guide, this is a great book discussing the concepts and
|
||
technical details of managing TCP/IP.
|
||
|
||
|
||
Title: Managing UUCP and Usenet
|
||
Author: Tim O'Reilly and Grace Todino
|
||
Publisher: O'Reilly and Associates, 1991
|
||
ISBN: 0-937175-93-5, $24.95
|
||
|
||
This book covers how to install and configure U-
|
||
UCP networking software, including configuration for
|
||
USENET news. If you're at all interested in using U-
|
||
UCP or accessing USENET news on your system, this
|
||
book is a must-read. See Sections 6.3 and 6.5 for more
|
||
information on UUCP and USENET for Linux.
|
||
|
||
|
||
Title: Practical UNIX Security
|
||
Author: Simson Garfinkel & Gene Spafford
|
||
Publisher: O'Reilly and Associates, 1991
|
||
ISBN: 0-937175-72-2, $29.95
|
||
|
||
This is an excellent book on UNIX system security.
|
||
It taught me quite a few things that I didn't know, even
|
||
with several years of UNIX system administration ex-
|
||
perience. As most UNIX books, this book is geared for
|
||
large systems, but almost all of the content is relevant
|
||
to Linux.
|
||
|
||
|
||
Title: X Window System User's Guide
|
||
Author: Valerie Quercia & Tim O'Reilly
|
||
Publisher: O'Reilly and Associates, 1993
|
||
ISBN: 1-56592-014-7, $34.95
|
||
|
||
A complete tutorial and reference guide to using the
|
||
X Window System. If you installed X windows on your
|
||
Linux system, and want to know how to get the most
|
||
out of it, you should read this book. Unlike some win-
|
||
dowing systems, a lot of the power provided by X is
|
||
not obvious as first sight. After using X Windows for
|
||
several years I learned some things by reading through
|
||
this book.
|
||
|
||
|
||
Title: Using C on the UNIX System
|
||
Author: Dave Curry
|
||
Publisher: O'Reilly and Associates, 1989
|
||
ISBN: 0-937175-23-4, $24.95
|
||
|
||
This book will introduce you to all of the aspects
|
||
of programming on the UNIX system call level. It cov-
|
||
ers everything from files to terminal I/O to TCP/IP
|
||
sockets. If you want to develop software for Linux, this
|
||
book is a must read.
|
||
|
||
|
||
|
||
|
||
Appendix C
|
||
|
||
FTP Tutorial and Site List
|
||
|
||
|
||
|
||
FTP ("File Transfer Protocol") is the set of programs that are used
|
||
for transferring files between systems on the Internet. Most UNIX,
|
||
VMS, and MS-DOS systems on the Internet have a program called
|
||
ftp which you use to transfer these files, and if you have Internet
|
||
access, the best way to download the Linux software is by using ftp.
|
||
This appendix covers basic ftp usage_of course, there are many
|
||
more functions and uses of ftp than are given here. Chapter 2 tells
|
||
you how to use FTP to download the Linux software.
|
||
|
||
At the end of this appendix there is a listing of FTP sites where
|
||
Linux software can be found.
|
||
|
||
If you're using an MS-DOS, UNIX, or VMS system to download
|
||
files from the Internet, then ftp is a command-driven program.
|
||
However, there are other implementations of ftp out there, such
|
||
as the Macintosh version (called Fetch) which has a nice menu-
|
||
driven interface, which is quite self-explanatory. Even if you're not
|
||
using the command-driven version of ftp, the information given
|
||
here should help.
|
||
|
||
|
||
ftp can be used to both upload (send) or download (receive)
|
||
files from other Internet sites. In most situations, you're going to be
|
||
downloading software. On the Internet there are a large number of
|
||
publicly-available FTP archive sites, machines which allow any-
|
||
one to ftp to them and download free software. One such archive
|
||
site is sunsite.unc.edu, which has a lot of Sun Microsystems soft-
|
||
ware, and acts as one of the main Linux sites. In addition, FTP
|
||
archive sites mirror software to each other_that is, software up-
|
||
loaded to one site will be automatically copied over to a number of
|
||
other sites. So don't be surprised if you see the exact same files on
|
||
many different archive sites.
|
||
|
||
|
||
C.1 Starting ftp
|
||
|
||
|
||
Before you start ftp you need a site to connect to. Note that in the
|
||
example "screens" printed below I'm only showing the most impor-
|
||
tant information, and what you see may differ. Also, commands in
|
||
italics represent commands that you type; everything else is screen
|
||
output.
|
||
|
||
To start ftp and connect to a site, give simply use the command
|
||
|
||
|
||
ftp <hostname>
|
||
|
||
|
||
where <hostname> is the name of the site you are connecting to.
|
||
For example, to connect to the mythical site shoop.vpizza.com
|
||
we can use the command
|
||
|
||
|
||
ftp shoop.vpizza.com
|
||
|
||
|
||
C.2 Logging In
|
||
|
||
|
||
When ftp starts up we should see something like
|
||
|
||
|
||
Connected to shoop.vpizza.com.
|
||
220 Shoop.vpizza.com FTPD ready at 15 Dec 1992 08:20:42
|
||
EDT
|
||
Name (shoop.vpizza.com:mdw):
|
||
|
||
|
||
Here, ftp is asking us to give the username that we want to login
|
||
as on shoop.vpizza.com. The default here is mdw, which is my
|
||
username on the system I'm using FTP from. Since I don't have
|
||
an account on shoop.vpizza.com I can't login as myself. Instead,
|
||
to access publicly-available software on an FTP site you login as
|
||
anonymous, and give your Internet e-mail address (if you have one)
|
||
as the password. So, we would type
|
||
|
||
|
||
Name (shoop.vpizza.com:mdw): anonymous
|
||
331-Guest login ok, send e-mail address as password.
|
||
Password: mdw@tc.cornell.edu
|
||
|
||
230- Welcome to shoop.vpizza.com.
|
||
230- Virtual Pizza Delivery[tm]: Download pizza in 30 cycles or less
|
||
230- or you get it FREE!
|
||
ftp>
|
||
|
||
|
||
Of course, in you should give your e-mail address, instead of mine,
|
||
and it won't echo to the screen as you're typing it (since it's tech-
|
||
nically a "password"). ftp should allow us to login and we'll be
|
||
ready to download software.
|
||
|
||
|
||
C.3 Poking Around
|
||
|
||
|
||
Okay, we're in. ftp> is our prompt, and the ftp program is waiting
|
||
for commands. There are a few basic commands you need to know
|
||
about. First, the commands
|
||
|
||
|
||
ls <file>
|
||
|
||
|
||
and
|
||
|
||
|
||
dir <file>
|
||
|
||
|
||
both give file listings (where <file> is an optional argument specify-
|
||
ing a particular filename to list). The difference is that ls usually
|
||
gives a short listing and dir gives a longer listing (that is, with
|
||
more information on the sizes of the files, dates of modification,
|
||
and so on).
|
||
|
||
The command
|
||
|
||
|
||
cd <directory>
|
||
|
||
|
||
will move to the given directory (just like the cd command on UNIX
|
||
or MS-DOS systems). You can use the command
|
||
|
||
|
||
cd ..
|
||
|
||
|
||
to change to the parent directory (*Note: The directory above the
|
||
current one.). Note the space between the "cd" and the "..".
|
||
|
||
The command
|
||
|
||
|
||
help <command>
|
||
|
||
|
||
will give help on the given ftp <command> (such as ls or cd). If no
|
||
command is specified, ftp will list all of the available commands.
|
||
|
||
If we type dir at this point we'll see an initial directory listing
|
||
of where we are.
|
||
|
||
|
||
ftp> dir
|
||
200 PORT command successful.
|
||
150 Opening ASCII mode data connection for /bin/ls.
|
||
total 1337
|
||
|
||
dr-xr-xr-x 2 root wheel 512 Aug 13 13:55 bin
|
||
drwxr-xr-x 2 root wheel 512 Aug 13 13:58 dev
|
||
drwxr-xr-x 2 root wheel 512 Jan 25 17:35 etc
|
||
drwxr-xr-x 19 root wheel 1024 Jan 27 21:39 pub
|
||
drwxrwx-wx 4 root ftp-admi 1024 Feb 6 22:10 uploads
|
||
drwxr-xr-x 3 root wheel 512 Mar 11 1992 usr
|
||
|
||
226 Transfer complete.
|
||
921 bytes received in 0.24 seconds (3.7 Kbytes/s)
|
||
ftp>
|
||
|
||
|
||
Each of these entries is a directory, not an individual file which
|
||
we can download (specified by the d in the first column of the
|
||
listing). On most FTP archive sites, the publicly available software
|
||
is under the directory /pub, so let's go there.
|
||
|
||
|
||
ftp> dir
|
||
200 PORT command successful.
|
||
150 ASCII data connection for /bin/ls (128.84.181.1,4525)
|
||
(0 bytes).
|
||
total 846
|
||
|
||
-rw-r--r-- 1 root staff 1433 Jul 12 1988 README
|
||
-r--r--r-- 1 65534 65534 56456 Dec 17 1990 ataxx.tar.Z
|
||
-rw-r--r-- 1 root other 2013041 Jul 3 1991 gesyps.tar.Z
|
||
-rw-r--r-- 1 432 staff 41831 Jan 30 1989 gnexe.arc
|
||
-rw-rw-rw- 1 615 staff 50315 Apr 16 1992 linpack.tar.Z
|
||
-r--r--r-- 1 root wheel 12168 Dec 25 1990 localtime.o
|
||
-rw-r--r-- 1 root staff 7035 Aug 27 1986 manualslist
|
||
drwxr-xr-x 2 2195 staff 512 Mar 10 00:48 mdw
|
||
-rw-r--r-- 1 root staff 5593 Jul 19 1988 t.out.h
|
||
|
||
226 ASCII Transfer complete.
|
||
2443 bytes received in 0.35 seconds (6.8 Kbytes/s)
|
||
ftp>
|
||
|
||
|
||
Here we can see a number of (interesting?) files, one of which
|
||
is called README, which we should download (most FTP sites have
|
||
a README file in the /pub directory).
|
||
|
||
|
||
C.4 Downloading files
|
||
|
||
|
||
Before downloading files, there are a few things that you need to
|
||
take care of.
|
||
|
||
|
||
o Turn on hash mark printing. Hash marks are printed to
|
||
the screen as files are being transferred; they let you know
|
||
how far along the transfer is, and that your connection hasn't
|
||
hung up (so you don't sit for 20 minutes, thinking that you're
|
||
still downloading a file). In general, a hash mark appears as
|
||
a pound sign (#), and one is printed for every 1024 or 8192
|
||
bytes transferred, depending on your system.
|
||
|
||
To turn on hash mark printing, give the command hash.
|
||
|
||
ftp> hash
|
||
Hash mark printing on (8192 bytes/hash mark).
|
||
ftp>
|
||
|
||
o Determine the type of file which you are download-
|
||
ing. As far as FTP is concerned, files come in two flavors:
|
||
binary and text. Most of the files which you'll be downloading
|
||
are binary files: that is, programs, compressed files, archive
|
||
files, and so on. However, many files (such as READMEs and
|
||
so on) are text files.
|
||
|
||
Why does the file type matter? Only because on some sys-
|
||
tems (such as MS-DOS systems), certain characters in a text
|
||
file, such as carriage returns, need to be converted so that the
|
||
file will be readable. While transferring in binary mode, no
|
||
conversion is done_the file is simply transferred byte after
|
||
byte.
|
||
|
||
The commands bin and ascii set the transfer mode to bina-
|
||
ry and text, respectively. When in doubt, always use binary
|
||
mode to transfer files. If you try to transfer a binary file
|
||
in text mode, you'll corrupt the file and it will be unusable.
|
||
(This is one of the most common mistakes made when using
|
||
FTP.) However, you can use text mode for plain text files
|
||
(whose filenames often end in .txt).
|
||
|
||
For our example, we're downloading the file README, which is
|
||
most likely a text file, so we use the command
|
||
|
||
ftp> ascii
|
||
200 Type set to A.
|
||
ftp>
|
||
|
||
o Set your local directory. Your local directory is the di-
|
||
rectory on your system where you want the downloaded files
|
||
to end up. Whereas the cd command changes the remote
|
||
directory (on the remote machine which you're FTPing to),
|
||
the lcd command changes the local directory.
|
||
|
||
For example, to set the local directory to /home/db/mdw/tmp,
|
||
use the command
|
||
|
||
ftp> lcd /home/db/mdw/tmp
|
||
Local directory now /home/db/mdw/tmp
|
||
ftp>
|
||
|
||
|
||
Now you're ready to actually download the file. The command
|
||
|
||
|
||
get <remote-name> <local-name>
|
||
|
||
|
||
is used for this, where <remote-name> is the name of the file on
|
||
the remote machine, and <local-name> is the name that you wish
|
||
to give the file on your local machine. The <local-name> argu-
|
||
ment is optional; by default, the local filename is the same as the
|
||
remote one. However, if for example you're downloading the file
|
||
foo.txt, and you already have a foo.txt in your local directory,
|
||
you'll want to give a different <local-filename> so that the first one
|
||
isn't overwritten.
|
||
|
||
For our example, to download the file README, we simply use
|
||
|
||
|
||
ftp> get README
|
||
200 PORT command successful.
|
||
150 ASCII data connection for README (128.84.181.1,4527)
|
||
(1433 bytes).
|
||
#
|
||
226 ASCII Transfer complete.
|
||
local: README remote: README
|
||
1493 bytes received in 0.03 seconds (49 Kbytes/s)
|
||
ftp>
|
||
|
||
|
||
C.5 Quitting FTP
|
||
|
||
|
||
To end your FTP session, simply use the command
|
||
|
||
|
||
quit
|
||
|
||
|
||
The command
|
||
|
||
|
||
close
|
||
|
||
|
||
can be used to close the connection with the current remote FTP
|
||
site; the open command can then be used to start a session with
|
||
another site (without quitting the FTP program altogether).
|
||
|
||
|
||
ftp> close
|
||
221 Goodbye.
|
||
ftp> quit
|
||
|
||
|
||
C.6 Linux FTP Site List
|
||
|
||
|
||
Table C.1 is a listing of the most well-known FTP archive sites
|
||
which carry the Linux software. Keep in mind that many other
|
||
sites mirror these, and more than likely you'll run into Linux on a
|
||
number of sites not on this list.
|
||
|
||
tsx-11.mit.edu, sunsite.unc.edu, and nic.funet.fi are the
|
||
"home sites" for the Linux software, where most of the new soft-
|
||
ware is uploaded. Most of the other sites on the list mirror some
|
||
combination of these three. To reduce network traffic, choose a site
|
||
which is geographically closest to you.
|
||
|
||
Site name IP Address Directory
|
||
----------------------------------- -------------------- --------------------
|
||
tsx-11.mit.edu 18.172.1.2 /pub/linux
|
||
sunsite.unc.edu 152.2.22.81 /pub/Linux
|
||
nic.funet.fi 128.214.6.100 /pub/OS/Linux
|
||
ftp.mcc.ac.uk 130.88.200.7 /pub/linux
|
||
fgb1.fgb.mw.tu-muenchen.de 129.187.200.1 /pub/linux
|
||
ftp.informatik.tu-muenchen.de 131.159.0.110 /pub/Linux
|
||
ftp.dfv.rwth-aachen.de 137.226.4.105 /pub/linux
|
||
ftp.informatik.rwth-aachen.de 137.226.112.172 /pub/Linux
|
||
ftp.ibp.fr 132.227.60.2 /pub/linux
|
||
kirk.bu.oz.au 131.244.1.1 /pub/OS/Linux
|
||
ftp.uu.net 137.39.1.9 /systems/unix/linux
|
||
wuarchive.wustl.edu 128.252.135.4 /systems/linux
|
||
ftp.win.tue.nl 131.155.70.100 /pub/linux
|
||
ftp.stack.urc.tue.nl 131.155.2.71 /pub/linux
|
||
ftp.ibr.cs.tu-bs.de 134.169.34.15 /pub/os/linux
|
||
ftp.denet.dk 129.142.6.74 /pub/OS/linux
|
||
|
||
|
||
Table C.1: Linux FTP Sites
|
||
|
||
|
||
|
||
|
||
Appendix D
|
||
|
||
Linux BBS List
|
||
|
||
Oops. The BBS list doesn't look very good in ASCII mode, and it took me
|
||
forever to format it. You can download the original Linux BBS list from
|
||
sunsite.unc.edu:/pub/Linux/docs or get it from Zane Healy
|
||
<healyzh@holonet.net>. The BBS list is included in the .dvi and PostScript
|
||
version of this book.
|
||
|
||
|
||
|
||
|
||
Appendix E
|
||
|
||
The GNU General Public License
|
||
|
||
|
||
Printed below is the GNU General Public License (the GPL or
|
||
copyleft), under which Linux is licensed. It is reproduced here to
|
||
clear up some of the confusion about Linux's copyright status---Linux is not
|
||
shareware, and it is not in the public domain. The bulk of the Linux kernel
|
||
is copyright (c)1993 by Linus Torvalds, and other software and parts of the
|
||
kernel are copyrighted by their authors. Thus, Linux is copyrighted, however,
|
||
you may redistribute it under the terms of the GPL printed below.
|
||
|
||
|
||
GNU GENERAL PUBLIC LICENSE
|
||
Version 2, June 1991
|
||
|
||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||
675 Mass Ave, Cambridge, MA 02139, USA
|
||
Everyone is permitted to copy and distribute verbatim copies
|
||
of this license document, but changing it is not allowed.
|
||
|
||
Preamble
|
||
|
||
The licenses for most software are designed to take away your
|
||
freedom to share and change it. By contrast, the GNU General Public
|
||
License is intended to guarantee your freedom to share and change free
|
||
software--to make sure the software is free for all its users. This
|
||
General Public License applies to most of the Free Software
|
||
Foundation's software and to any other program whose authors commit to
|
||
using it. (Some other Free Software Foundation software is covered by
|
||
the GNU Library General Public License instead.) You can apply it to
|
||
your programs, too.
|
||
|
||
When we speak of free software, we are referring to freedom, not
|
||
price. Our General Public Licenses are designed to make sure that you
|
||
have the freedom to distribute copies of free software (and charge for
|
||
this service if you wish), that you receive source code or can get it
|
||
if you want it, that you can change the software or use pieces of it
|
||
in new free programs; and that you know you can do these things.
|
||
|
||
To protect your rights, we need to make restrictions that forbid
|
||
anyone to deny you these rights or to ask you to surrender the rights.
|
||
These restrictions translate to certain responsibilities for you if you
|
||
distribute copies of the software, or if you modify it.
|
||
|
||
For example, if you distribute copies of such a program, whether
|
||
gratis or for a fee, you must give the recipients all the rights that
|
||
you have. You must make sure that they, too, receive or can get the
|
||
source code. And you must show them these terms so they know their
|
||
rights.
|
||
|
||
We protect your rights with two steps: (1) copyright the software, and
|
||
(2) offer you this license which gives you legal permission to copy,
|
||
distribute and/or modify the software.
|
||
|
||
Also, for each author's protection and ours, we want to make certain
|
||
that everyone understands that there is no warranty for this free
|
||
software. If the software is modified by someone else and passed on, we
|
||
want its recipients to know that what they have is not the original, so
|
||
that any problems introduced by others will not reflect on the original
|
||
authors' reputations.
|
||
|
||
Finally, any free program is threatened constantly by software
|
||
patents. We wish to avoid the danger that redistributors of a free
|
||
program will individually obtain patent licenses, in effect making the
|
||
program proprietary. To prevent this, we have made it clear that any
|
||
patent must be licensed for everyone's free use or not licensed at all.
|
||
|
||
The precise terms and conditions for copying, distribution and
|
||
modification follow.
|
||
|
||
GNU GENERAL PUBLIC LICENSE
|
||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||
|
||
0. This License applies to any program or other work which contains
|
||
a notice placed by the copyright holder saying it may be distributed
|
||
under the terms of this General Public License. The "Program", below,
|
||
refers to any such program or work, and a "work based on the Program"
|
||
means either the Program or any derivative work under copyright law:
|
||
that is to say, a work containing the Program or a portion of it,
|
||
either verbatim or with modifications and/or translated into another
|
||
language. (Hereinafter, translation is included without limitation in
|
||
the term "modification".) Each licensee is addressed as "you".
|
||
|
||
Activities other than copying, distribution and modification are not
|
||
covered by this License; they are outside its scope. The act of
|
||
running the Program is not restricted, and the output from the Program
|
||
is covered only if its contents constitute a work based on the
|
||
Program (independent of having been made by running the Program).
|
||
Whether that is true depends on what the Program does.
|
||
|
||
1. You may copy and distribute verbatim copies of the Program's
|
||
source code as you receive it, in any medium, provided that you
|
||
conspicuously and appropriately publish on each copy an appropriate
|
||
copyright notice and disclaimer of warranty; keep intact all the
|
||
notices that refer to this License and to the absence of any warranty;
|
||
and give any other recipients of the Program a copy of this License
|
||
along with the Program.
|
||
|
||
You may charge a fee for the physical act of transferring a copy, and
|
||
you may at your option offer warranty protection in exchange for a fee.
|
||
|
||
2. You may modify your copy or copies of the Program or any portion
|
||
of it, thus forming a work based on the Program, and copy and
|
||
distribute such modifications or work under the terms of Section 1
|
||
above, provided that you also meet all of these conditions:
|
||
|
||
a) You must cause the modified files to carry prominent notices
|
||
stating that you changed the files and the date of any change.
|
||
|
||
b) You must cause any work that you distribute or publish, that in
|
||
whole or in part contains or is derived from the Program or any
|
||
part thereof, to be licensed as a whole at no charge to all third
|
||
parties under the terms of this License.
|
||
|
||
c) If the modified program normally reads commands interactively
|
||
when run, you must cause it, when started running for such
|
||
interactive use in the most ordinary way, to print or display an
|
||
announcement including an appropriate copyright notice and a
|
||
notice that there is no warranty (or else, saying that you provide
|
||
a warranty) and that users may redistribute the program under
|
||
these conditions, and telling the user how to view a copy of this
|
||
License. (Exception: if the Program itself is interactive but
|
||
does not normally print such an announcement, your work based on
|
||
the Program is not required to print an announcement.)
|
||
|
||
These requirements apply to the modified work as a whole. If
|
||
identifiable sections of that work are not derived from the Program,
|
||
and can be reasonably considered independent and separate works in
|
||
themselves, then this License, and its terms, do not apply to those
|
||
sections when you distribute them as separate works. But when you
|
||
distribute the same sections as part of a whole which is a work based
|
||
on the Program, the distribution of the whole must be on the terms of
|
||
this License, whose permissions for other licensees extend to the
|
||
entire whole, and thus to each and every part regardless of who wrote it.
|
||
|
||
Thus, it is not the intent of this section to claim rights or contest
|
||
your rights to work written entirely by you; rather, the intent is to
|
||
exercise the right to control the distribution of derivative or
|
||
collective works based on the Program.
|
||
|
||
In addition, mere aggregation of another work not based on the Program
|
||
with the Program (or with a work based on the Program) on a volume of
|
||
a storage or distribution medium does not bring the other work under
|
||
the scope of this License.
|
||
|
||
3. You may copy and distribute the Program (or a work based on it,
|
||
under Section 2) in object code or executable form under the terms of
|
||
Sections 1 and 2 above provided that you also do one of the following:
|
||
|
||
a) Accompany it with the complete corresponding machine-readable
|
||
source code, which must be distributed under the terms of Sections
|
||
1 and 2 above on a medium customarily used for software interchange; or,
|
||
|
||
b) Accompany it with a written offer, valid for at least three
|
||
years, to give any third party, for a charge no more than your
|
||
cost of physically performing source distribution, a complete
|
||
machine-readable copy of the corresponding source code, to be
|
||
distributed under the terms of Sections 1 and 2 above on a medium
|
||
customarily used for software interchange; or,
|
||
|
||
c) Accompany it with the information you received as to the offer
|
||
to distribute corresponding source code. (This alternative is
|
||
allowed only for noncommercial distribution and only if you
|
||
received the program in object code or executable form with such
|
||
an offer, in accord with Subsection b above.)
|
||
|
||
The source code for a work means the preferred form of the work for
|
||
making modifications to it. For an executable work, complete source
|
||
code means all the source code for all modules it contains, plus any
|
||
associated interface definition files, plus the scripts used to
|
||
control compilation and installation of the executable. However, as a
|
||
special exception, the source code distributed need not include
|
||
anything that is normally distributed (in either source or binary
|
||
form) with the major components (compiler, kernel, and so on) of the
|
||
operating system on which the executable runs, unless that component
|
||
itself accompanies the executable.
|
||
|
||
If distribution of executable or object code is made by offering
|
||
access to copy from a designated place, then offering equivalent
|
||
access to copy the source code from the same place counts as
|
||
distribution of the source code, even though third parties are not
|
||
compelled to copy the source along with the object code.
|
||
|
||
4. You may not copy, modify, sublicense, or distribute the Program
|
||
except as expressly provided under this License. Any attempt
|
||
otherwise to copy, modify, sublicense or distribute the Program is
|
||
void, and will automatically terminate your rights under this License.
|
||
However, parties who have received copies, or rights, from you under
|
||
this License will not have their licenses terminated so long as such
|
||
parties remain in full compliance.
|
||
|
||
5. You are not required to accept this License, since you have not
|
||
signed it. However, nothing else grants you permission to modify or
|
||
distribute the Program or its derivative works. These actions are
|
||
prohibited by law if you do not accept this License. Therefore, by
|
||
modifying or distributing the Program (or any work based on the
|
||
Program), you indicate your acceptance of this License to do so, and
|
||
all its terms and conditions for copying, distributing or modifying
|
||
the Program or works based on it.
|
||
|
||
6. Each time you redistribute the Program (or any work based on the
|
||
Program), the recipient automatically receives a license from the
|
||
original licensor to copy, distribute or modify the Program subject to
|
||
these terms and conditions. You may not impose any further
|
||
restrictions on the recipients' exercise of the rights granted herein.
|
||
You are not responsible for enforcing compliance by third parties to
|
||
this License.
|
||
|
||
7. If, as a consequence of a court judgment or allegation of patent
|
||
infringement or for any other reason (not limited to patent issues),
|
||
conditions are imposed on you (whether by court order, agreement or
|
||
otherwise) that contradict the conditions of this License, they do not
|
||
excuse you from the conditions of this License. If you cannot
|
||
distribute so as to satisfy simultaneously your obligations under this
|
||
License and any other pertinent obligations, then as a consequence you
|
||
may not distribute the Program at all. For example, if a patent
|
||
license would not permit royalty-free redistribution of the Program by
|
||
all those who receive copies directly or indirectly through you, then
|
||
the only way you could satisfy both it and this License would be to
|
||
refrain entirely from distribution of the Program.
|
||
|
||
If any portion of this section is held invalid or unenforceable under
|
||
any particular circumstance, the balance of the section is intended to
|
||
apply and the section as a whole is intended to apply in other
|
||
circumstances.
|
||
|
||
It is not the purpose of this section to induce you to infringe any
|
||
patents or other property right claims or to contest validity of any
|
||
such claims; this section has the sole purpose of protecting the
|
||
integrity of the free software distribution system, which is
|
||
implemented by public license practices. Many people have made
|
||
generous contributions to the wide range of software distributed
|
||
through that system in reliance on consistent application of that
|
||
system; it is up to the author/donor to decide if he or she is willing
|
||
to distribute software through any other system and a licensee cannot
|
||
impose that choice.
|
||
|
||
This section is intended to make thoroughly clear what is believed to
|
||
be a consequence of the rest of this License.
|
||
|
||
8. If the distribution and/or use of the Program is restricted in
|
||
certain countries either by patents or by copyrighted interfaces, the
|
||
original copyright holder who places the Program under this License
|
||
may add an explicit geographical distribution limitation excluding
|
||
those countries, so that distribution is permitted only in or among
|
||
countries not thus excluded. In such case, this License incorporates
|
||
the limitation as if written in the body of this License.
|
||
|
||
9. The Free Software Foundation may publish revised and/or new versions
|
||
of the General Public License from time to time. Such new versions will
|
||
be similar in spirit to the present version, but may differ in detail to
|
||
address new problems or concerns.
|
||
|
||
Each version is given a distinguishing version number. If the Program
|
||
specifies a version number of this License which applies to it and "any
|
||
later version", you have the option of following the terms and conditions
|
||
either of that version or of any later version published by the Free
|
||
Software Foundation. If the Program does not specify a version number of
|
||
this License, you may choose any version ever published by the Free Software
|
||
Foundation.
|
||
|
||
10. If you wish to incorporate parts of the Program into other free
|
||
programs whose distribution conditions are different, write to the author
|
||
to ask for permission. For software which is copyrighted by the Free
|
||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||
make exceptions for this. Our decision will be guided by the two goals
|
||
of preserving the free status of all derivatives of our free software and
|
||
of promoting the sharing and reuse of software generally.
|
||
|
||
NO WARRANTY
|
||
|
||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||
REPAIR OR CORRECTION.
|
||
|
||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||
POSSIBILITY OF SUCH DAMAGES.
|
||
|
||
END OF TERMS AND CONDITIONS
|
||
|
||
Appendix: How to Apply These Terms to Your New Programs
|
||
|
||
If you develop a new program, and you want it to be of the greatest
|
||
possible use to the public, the best way to achieve this is to make it
|
||
free software which everyone can redistribute and change under these terms.
|
||
|
||
To do so, attach the following notices to the program. It is safest
|
||
to attach them to the start of each source file to most effectively
|
||
convey the exclusion of warranty; and each file should have at least
|
||
the "copyright" line and a pointer to where the full notice is found.
|
||
|
||
<one line to give the program's name and a brief idea of what it does.>
|
||
Copyright (C) 19yy <name of author>
|
||
|
||
This program is free software; you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation; either version 2 of the License, or
|
||
(at your option) any later version.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with this program; if not, write to the Free Software
|
||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
|
||
Also add information on how to contact you by electronic and paper mail.
|
||
|
||
If the program is interactive, make it output a short notice like this
|
||
when it starts in an interactive mode:
|
||
|
||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||
This is free software, and you are welcome to redistribute it
|
||
under certain conditions; type `show c' for details.
|
||
|
||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||
parts of the General Public License. Of course, the commands you use may
|
||
be called something other than `show w' and `show c'; they could even be
|
||
mouse-clicks or menu items--whatever suits your program.
|
||
|
||
You should also get your employer (if you work as a programmer) or your
|
||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||
necessary. Here is a sample; alter the names:
|
||
|
||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||
|
||
<signature of Ty Coon>, 1 April 1989
|
||
Ty Coon, President of Vice
|
||
|
||
This General Public License does not permit incorporating your program into
|
||
proprietary programs. If your program is a subroutine library, you may
|
||
consider it more useful to permit linking proprietary applications with the
|
||
library. If this is what you want to do, use the GNU Library General
|
||
Public License instead of this License.
|