Reading List HOWTO
Reading List HOWTO
Revision History
Revision 1.20 2001−06−14 Revised by: esr
Removed "Practical Unix Security"; it's five years old and the material is now covered better by other books.
Revision 1.19 2001−06−14 Revised by: esr
Added Ross Anderson's "Security Engineering". Corected ISBNs.
This document lists the books I think are most valuable to a person trying to learn Unix (especially Linux)
top to bottom.
The Linux Reading List HOWTO
Table of Contents
1. Introduction.....................................................................................................................................................1
1.1. Purpose of this document..................................................................................................................1
1.2. New versions of this document.........................................................................................................1
1.3. Feedback and Corrections.................................................................................................................1
1.4. Related Resources.............................................................................................................................1
1.5. Conventions Used In This Document...............................................................................................1
Linux basics.........................................................................................................................................................5
System Security...................................................................................................................................................6
C and C++..........................................................................................................................................................10
Books on Networking........................................................................................................................................12
Ancestors of Linux............................................................................................................................................13
Relatives of Linux.............................................................................................................................................15
A. Administrivia................................................................................................................................................17
A.2. History........................................................................................................................................................19
i
1. Introduction
1.1. Purpose of this document
This document lists what I consider to be the essential book−length references for learning Unix (especially
Linux) and how to program under it.
You can also view the latest version of this on the World Wide Web via the URL
http://sunsite.unc.edu/LDP/HOWTO/Reading−List−HOWTO.html.
Some years ago I wrote a less Linux−focused Unix bibliography that may still be of some interest and retains
a certain amusement value. You can find the Loginataka here.
SAGE, the System Administrator's Guild, maintains an excellent list of relevant books.
"See" URLs attached to publishing information point directly into the publisher's web catalog and typically
take you to a page containing a cover shot, blurbs, and ordering information. Books that don't have these lack
them because the publisher is using frames and the catalog pages can't be bookmarked.
Topic listings go roughly from the outside in (culture to user−land programming to kernel programming to
hardware). Within sections I have tried to list the most useful books first insofar as I am familiar with them.
1. Introduction 1
The Linux Reading List HOWTO
It's just an embarrassing coincidence that this lists one of my books first, honest! (Suggestions for a better
organization cheerfully accepted.)
1. Introduction 2
Basic Linux and Unix bibliography
The New Hacker's Dictionary, Third Edition, Edited by Eric S. Raymond, 1996, ISBN 0−262−68092−0, MIT
Press, 547pp..
Um, er. A guide to Internet culture. Lots of people like it. HTML at the Jargon File Resource Page.
Order here.
A Quarter Century of Unix, Edited by Peter H. Salus, 1994, ISBN 0−201−54777−5, Addison−Wesley, 255pp..
Linux is part of the Unix tradition. This book is an oral history of Unix −− how it originated, how it evolved,
how it spread −− by the people who were there.
The Mythical Man Month, Anniversary Edition, Frederic P. Brooks, 1995, ISBN 0−201−83595−9,
Addison−Wesley.
Alan Cox: "This I'd recommend not for its technical value but for its application of common sense and reality
to computing projects." JH: "Ah, yes. What if Linus had been given 200 programmers and had been told to
produce Linux in 3 months!"
Order here.
Bell System Technical Journal, AT&T, 1978, July−August 1978, Vol. 57, No. 6, part 2, 416pp..
Many early papers on Unix, including Ritchie & Thompson, "The UNIX Time Sharing System"; Thompson,
"UNIX Implementation"; Ritchie, "A Retrospective"; Bourne, "The UNIX Shell"...
Linux Installation and Getting Started, Edited by Matt Welsh, 1997, Linux Documentation Project.
How to bring up Linux. Explains a lot of Linux basics. Covers basic system administration.
Linux System Administrator's Guide, Edited by Lars Wirzenius, 1997, Linux Documentation Project.
Linux in a Nutshell, Second Edition, Jessica P. Hekman, 1999, ISBN 1−56592−585−8, O'Reilly & Associates.
According to O'Reilly, "The Desktop Reference for Linux". For Linux users this obsoletes their "Unix In a
Nutshell" which was SVr4/Solaris−oriented.
Order here.
Running Linux, Third Edition, Matt Welsh, 1999, ISBN 1−56592−469−X, O'Reilly & Associates.
Everything you need in order to understand, install, and use the Linux operating system. Excellent beginner's
book.
Order here.
Just what the title says −− practical tutorials in basic Unix, shells, editors, mail programs, networking, Web
tools, and utilities. Covers some system administration fundamentals. (This appears to be a repackaging of
1997's ``A Practical Guide to Linux'' from the same author, without Caldera OpenLinux Lite included.)
Essential System Administration, Second Edition, Aeleen Frisch, 1995, ISBN 1−56592−127−5, O'Reilly &
Associates.
More in−depth coverage of normal system−administration tasks. Not Linux−specific but contains Linux
material.
Order here.
Linux basics 5
System Security
Security Engineering: A Guide to Building Dependable Distributed Systems, Ross Anderson, 2001,
0−471−38922−6, Wiley.
The best book I've ever seen on technological security measures and general computer security. The section
on "How to Steal a Painting" and physical alarm systems is worth the price of admission by itself.
Real World Linux Security: Intrusion Prevention, Detection, and Recovery, Bob Toxen, 2000, ISBN
0−13−028187−5, Prentice−Hall.
This is excellent work, the standard by which future Linux security books will be judged. I wrote a foreword
for it. Combines step−by−step practical instructions on hardining a Linux system with good theory on attack
paths, rings of protection, and security analysis. Describes many counters for specific exploits.
System Security 6
Books on Shell, Script, and Web Programming
Programming Perl, Third Edition, Larry Wall, Tom Christiansen, and Jon Orwant, 2000, ISBN
0−596−00027−8, O'Reilly & Associates, 1104pp..
Shell (as a programming language for more than trivial scripting) is dead. Perl rules in its place (though it is
now being strongly challenged by Python). This is the third edition of the definitive Perl book.
Order here.
Programming Python, First Edition, Mark Lutz, 1997, ISBN 0−56592−197−6, O'Reilly & Associates, 880pp..
The next step beyond Perl. Python is beautifully designed, has better integration with C, and scales up more
gracefully to large projects.
Order here.
HTML & XHTML: The Definitive Guide, Fourth Edition, Chuck Musciano and Bill Kennedy, 2000, ISBN
0−596−00026−X, O'Reilly & Associates, 680pp..
The best HTML tutorial/reference I have ever seen, and the only HTML book you need unless you also want
to do CGI. I don't know of any other book on HTML that comes within miles of this one for
comprehensiveness, depth, and quality of organization.
Order here.
The Unix Programming Environment, Brian Kernighan and Rob Pike, 1984, ISBN 0−13−937681−X,
Prentice−Hall.
A true classic −− possibly the best single−book exposition of the Unix philosophy. Useful for learning shell
programming.
The LaTeX Companion, Michael Goossens, Frank Mittelbach, and Alexander Samarin, 1994, ISBN
0−201−54199−8, Addison−Wesley, 530pp..
`If you are one of those users who would like to know how LaTeX can be extended to create the nicest
documents possible without becoming a (La)TeX guru, then this book is for you' −−− from the Preface.
Bruce Thompson adds: "A very nice book providing a lot of information about the new extensions to LaTeX,
provides a large number of examples showing precisely how your document's layout can be manipulated"
Order here.
LaTeX: A Document Preparation System, Leslie Lamport, 1994, ISBN 0−201−52983−1, Addison−Wesley,
256pp..
Bruce Thompson: "The ultimate reference on LaTeX 2.09 by its author. A new edition covering LaTeX2e
(the version included in the current TeX/LaTeX distribution) is in preparation. LaTeX 2.09 is fully supported
by LaTeX2e. A must for anyone wanting to use LaTeX. Provides a gentle introduction to document
preparation and the various tools that LaTeX provides for producing professional quality documents. Lots of
examples."
Order here.
The TeXbook, Volume A of Computers and Typesetting, Donald Knuth, 1986, ISBN 0−201−13448−9,
Addison−Wesley, 496pp..
Bruce Thompson: "The definitive user's guide and complete reference manual for TeX. Probably not needed
for casual LaTeX use, but a fascinating book nonetheless." I'll strengthen that by adding that this book is not
for the faint of heart.
Order here.
The METAFONT Book, Volume C of Computers and Typesetting, Donald Knuth, 1986, ISBN
0−201−13444−6, Addison−Wesley, 386pp..
Bruce Thompson: "The definitive user's guide and reference manual for METAFONT, the companion
program to TeX for designing fonts. An excellent work if you're planning to design your own fonts for use in
TeX and LaTeX. METAFONT is included with the normal TeX/LaTeX distribution." This book is
definitely not for the faint of heart.
Order here.
The Practice of Programming, Brian Kernighan and Rob Pike, 1999, ISBN 0−201−61586−X,
Addison−Wesley.
An excellent treatise on writing high−quality programs, surely destined to become a classic of the field.
Order here.
Programming Pearls, (Second Edition), Jon Bentley, 2000, ISBN 0−201−65788−0, Addison−Wesley.
These are selected essays from Bentley's column in the Communications of the ACM. He discusses a wide
variety of issues in program improvement, often focusing on program efficiency.
Order here.
Writing Efficient Programs, Jon Bentley, 1982, ISBN 0−13−970251−2 or 0−13−970244−X, Prentice−Hall.
This book presents Bentley's methodology and set of rules for improving program efficiency, and includes a
large number of examples.
The C Programming Language, (Second Edition), Brian Kernighan and Rob Pike, 1988, ISBN
0−13−110362−8, Addison−Wesley, 272pp..
The improved second edition, covering ANSI C, of the original classic C book coauthored by C's designer,
"K&R". Still the best!
Who's Afraid of C++?, Steve Heller, 1996, ISBN 0−12−339097−4, Academic Press, 508pp..
The best introductory book on C++ I have seen. Now available on the Web.
C and C++ 10
C System Call Interface
POSIX Programmer's Guide: Writing Portable Unix Programs, Donald Lewine, 1992, ISBN
0−937175−73−0, O'Reilly & Associates, 607pp..
Linux hews very close to the letter of the POSIX standard (non−conformance is considered a bug and swiftly
fixed). This excellent reference for POSIX is thus also an excellent reference for the Linux kernel API.
Order here.
Advanced Programming in The Unix Environment, Richard Stevens, 1992, ISBN 0−201−56317−7,
Addison−Wesley.
A book on general Unix programming that is every bit as good as Stevens's classic on network programming.
Linux Application Development, Michael K. Johnson and Erik W. Troan, 1998, ISBN 0−201−308215,
Addison−Wesley.
The best single reference to the Linux API. Covers the features that aren't generic Unix or Posix.
Unix Network Programming, volume 1 −− Networking APIs: Sockets and XTI, Richard Stevens, 1998, ISBN
0−13−490012−X, Prentice−Hall.
Everything you might want to know about the subject. Generally regarded as definitive on the basics.
Unix Network Programming, volume 2 −− Interprocess Communication, Richard Stevens, 1998, ISBN
0−13−081081−9, Prentice−Hall.
Ditto...
Linux Network Administrator's Guide, Olaf Kirch, 1995, ISBN 1−56592−087−2, O'Reilly & Associates.
An excellent first book on how to maintain and administer a networked Linux system.
TCP/IP Network Administration, Craig Hunt, 1992, ISBN 0−937175−82−X, O'Reilly & Associates, 472pp..
Less Linux−specific than the Kirch book. Features deeper coverage of the TCP/IP core, including routing and
BGP.
Order here.
DNS and BIND, Second Edition, Paul Albiz and Cricket Liu, 1998, ISBN 1−56592−512−2, 502pp., O'Reilly
& Associates.
In−depth coverage of DNS, useful for people running complicated multiple−subnet installations. Covers
BIND library programming.
Order here.
Sendmail, Second Edition, Bryan Costales and Eric Allman, 1997, ISBN 1−56592−222−0, 1050pp., O'Reilly
& Associates.
An exhaustive (and exhausting) guide to Linux's and Unix's default mail−transfer agent.
Order here.
Books on Networking 12
Ancestors of Linux
The Design of the Unix Operating System, Maurice J. Bach, 1996, ISBN 0−13−201799−7, 470pp.,
Prentice−Hall.
Order here.
Operating Systems, Design and Implementation, Andrew S. Tanenbaum, 1987, ISBN 0−13−638677−6,
940pp., Prentice−Hall.
Alan Cox likes this book. Tanenbaum designed Minix, which is the system Linus bootstrapped Linux up
from.
Order here.
Ancestors of Linux 13
The Linux kernel
The Linux Kernel book, Rémy Card, Èric Dumas, and Frank Mével, 1998, ISBN 0−471−98141−9, John
Wiley & Sons.
(Translated from the French language edition of "Programmation Linux 2.0"; same authors; 1997; Éditions
Eyrolles; Paris, France.)
A very interesting and informative examination of the operation of the kernel that fills in the gap between the
POSIX interface and "The Design of the Unix Operating System" and the Linux source code. A good
understanding of the design and operation of a Unix OS is a pre−requisite, but this book is an excellent help
to going beyond that general understanding into actual work.
The primary author is one of the core developers for the ext2 filesystem, and the Linux Kernel book shows a
firm grasp of the matter and clear explanations and structure. It's surprisingly readable for something working
at such a low level. The book does seem to have suffered a little in the translation to English −− there are a
few typos and grammatical mistakes, but it's quite readable. (The code example files are charmingly still
named in French.)
The book is current to Linux 2.0.35 and foreshadows 2.1 and 2.2. Network protocol implementations are not
covered.
Linux Kernal Hacker's Guide, Edited by Michael K. Johnson, Linux Documentation Project.
According to the author, this has been superseded by Alessandro Rubini's book (see below) but it remains a
useful supplement.
Linux Device Drivers, Alessandro Rubini, 1998, ISBN 1−56592−292−1, O'Reilly & Associates, 442pp..
Everything you need to know about writing device drivers under Linux; kernel APIs, interrupt handling, the
module interface. Includes many examples.
Order here.
LINUX Kernel Internals, (Second Edition), Michael Beck, Harold Bohme, Mirko Dziadka, and Ulrich
Kunitz, 1998, ISBN 0−201−33143−8, Addison−Wesley, 480pp..
A guide to Linux kernel programming; covers 2.0. Covers the architecture of the Linux core and network
layer as well as driver construction.
Order here.
The Design and Implementation of the 4.4BSD Unix Operating System, Marshall Kirk McKusick, Keith
Bostic, Michael J. Karels, and John S. Quarterman, 1996, ISBN 0−201−54979−4, Addison−Wesley.
The successor to a classic book on the implementation of the 4.3 BSD kernel, which influenced Linux's
design (especially near sockets and networking). This book covers the 4.4BSD base of BSD/OS, FreeBSD,
and NetBSD.
Order here.
Relatives of Linux 15
Books on Intel and PC hacking
Part I. Applications Programming, data types, memory model, instruction set. Part II. Systems Programming,
architecture, memory management, protection, multitasking, I/O, exceptions and interrupts, initialization,
coprocessing and multiprocessing. Part III. Compatibility (with earlier x86 machines). Part IV. Instruction Set
80386 System Software Writer's Guide, Intel Corporation, 1987, ISBN 1−55512−023−7.
This explains the 386 features for operating system writers. It includes a chapter on Unix implementation. A
lot of the 80386 architecture seems to have been designed with Multics in mind; the features are not used by
DOS or by Unix.
Programming the 80386, John H. Crawford and Patrick P. Gelsinger, 1987, ISBN 0−89588−381−3, 774pp..
This is the book the Jolitzes used when they ported BSD to the 386 architecture.
Pin connections, timing, waveforms, block diagrams, voltages, all that kind of stuff.
The Indispensable PC Hardware Book, Hans−Peter Messmer, 1993, ISBN 0−201−62424−9, 1000pp.,
Addison−Wesley.
JH: "Covers the more recent stuff like EIDE and PCI."
A. Administrivia 17
A.1. Terms of Use
This document is copyright 1999 by Eric S. Raymond. You may use, disseminate, and reproduce it freely,
provided you:
These restrictions are intended to protect potential readers from stale or mangled versions. If you think you
have a good case for an exception, ask me.
A.2. History 19