This volume contains the full text of three books, Advanced Topics in UNIX, 2E, The 101 Most Important UNIX and Linux Commands, and Using C in Software Design, 2E.
Advanced Topics in UNIX, 2E
The first edition of this book was originally published in 1993 by John Wiley under the same name, Advanced Topics in UNIX. It was named an Alternate Main Selection of the Newbridge Book Club in the same year. That book stayed in print for thirteen years, an eternity in the computing literature. Due to changes in the publishing industry, this edition of the book is only available electronically.
I was motivated to revise the book because of the increased popularity of several variants of UNIX and on what I learned from reviews of the previous published version of this book. Linux has become increasingly popular, due in no little part to it being so popular in the open source community and also because it is serving as the basis of the operating system for the Google Android phone. The Mach operating system, originally developed at Carnegie Mellon University, is the basis for the operating systems used to control Apple Macintosh computers.
My experience with multiple vUNIX-like operating systems showed that end users, application programmers, system programmers, and system administrators often had difficulties in making programs and utilities work well across different UNIX variants, due to differences in file system organization, different locations of critical configuration files, and important, yet subtle, differences in how system calls operate. There are also issues with different utilities, many of which are either not available on all UNIX versions, or else require a substantial effort to even get them to install properly. One of the most interesting problems required detailed analysis of several Linux variants in order to get a single public domain application to work – the different Linux variants from Fedora (formerly Red Hat), SUSE, and Ubuntu were examined before the application would install and work properly.
Many second editions dump material from older technologies. I have chosen a different approach, guided by my own research and experience in the efficient development of large, high-quality, software systems in both UNIX and non-UNIX environments over much of the last twenty-five years. Much of my research in this area is based on the application of systematic approaches to software reuse as part of the software development process.
USING C IN SOFTWARE DESIGN, 2E
As with the 1993, this book provides a creative approach to learning C by emphasizing software engineering in C.
1. All material has been class-tested.
2. The book avoids most implementation-specific language features.
3. A software project is introduced early in the book and appears throughout as new features of C are covered.
4. A separate chapter on larger programming using “make” for separate compilation is included.
5. A few programs are deliberately seeded with errors to help create programs that work correctly.
6. Special emphasis is placed on the design and implementation of user-defined libraries.
A brief introduction to C++ is included.
THE 101 MOST IMPORTANT UNIX AND LINIX COMMANDS
The next book delivers what the title states: It describes the 101 most important UNIX and Linux commands and system calls. The book bridges the gap between on-line tutorials and manual pages on one hand, and books of 1,000 pages or more that explore the nuances of many shell commands in exhaustive detail. While most of these sources provide excellent information, they do not really solve the plight of the novice user, nor do they fully answer the questions that more experienced, and even expert, users often have. Much of the complexity of UNIX and Linux, and much of the difficulty faced by users is caused by the extremely large and rich set of shell commands.
We focus on the most important commands and system calls.