Beginning Unix
By Paul Love, Joe Merlino, Craig Zimmerman and
3/5
()
About this ebook
- Covering all aspects of the Unix operating system and assuming no prior knowledge of Unix, this book begins with the fundamentals and works from the ground up to some of the more advanced programming techniques
- The authors provide a wealth of real-world experience with the Unix operating system, delivering actual examples while showing some of the common misconceptions and errors that new users make
- Special emphasis is placed on the Apple Mac OS X environment as well as Linux, Solaris, and migrating from Windows to Unix
- A unique conversion section of the book details specific advice and instructions for transitioning Mac OS X, Windows, and Linux users
Paul Love
Paul grew up in the countryside and experienced life on a small farm in Ireland. He loves the outdoors and the countryside. He works as a fulltime teacher and has been teaching for ten years. He has based some of his books on his teaching experiences. His other writing is based on his experiences living abroad and bedtime stories his mother told him as a child. In his freetime he likes writing and travelling, as well as spending time travelling.
Read more from Paul Love
Abu the Desert Fox Rating: 0 out of 5 stars0 ratingsFinding Answers in Questions: A written discourse Rating: 0 out of 5 stars0 ratingsDays to Come: And Other Poems Rating: 0 out of 5 stars0 ratingsTeaching English in Science Rating: 2 out of 5 stars2/5The Sad Monkey Rating: 3 out of 5 stars3/5
Related to Beginning Unix
Related ebooks
Linux Bible 2010 Edition: Boot Up to Ubuntu, Fedora, KNOPPIX, Debian, openSUSE, and 13 Other Distributions Rating: 0 out of 5 stars0 ratingsLinux System Programming Techniques: Become a proficient Linux system programmer using expert recipes and techniques Rating: 0 out of 5 stars0 ratingsScientific Computing with Scala Rating: 0 out of 5 stars0 ratingsProgramming the Network with Perl Rating: 0 out of 5 stars0 ratingsMastering Play Framework for Scala Rating: 0 out of 5 stars0 ratingsInstant Handlebars.js Rating: 0 out of 5 stars0 ratingsLinux Bible 2009 Edition: Boot up Ubuntu, Fedora, KNOPPIX, Debian, openSUSE, and more Rating: 0 out of 5 stars0 ratingsUltimate Microservices with RabbitMQ Rating: 0 out of 5 stars0 ratingsSpring 2.5 Aspect Oriented Programming Rating: 0 out of 5 stars0 ratingsGetting Started with Hazelcast - Second Edition Rating: 0 out of 5 stars0 ratingsPHP Ajax Cookbook Rating: 2 out of 5 stars2/5UNIX Programming: UNIX Processes, Memory Management, Process Communication, Networking, and Shell Scripting Rating: 0 out of 5 stars0 ratingsA Reunion Story Rating: 5 out of 5 stars5/5Mastering Efficient Data Modeling with MongoDB Rating: 0 out of 5 stars0 ratingsJBoss Weld CDI for Java Platform Rating: 0 out of 5 stars0 ratingsUltimate Git and GitHub for Modern Software Development Rating: 0 out of 5 stars0 ratingsJava Reflection Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsLearning Advanced Programming Rating: 0 out of 5 stars0 ratingsBeginning Cryptography with Java Rating: 3 out of 5 stars3/5Professional JavaScript for Web Developers Rating: 0 out of 5 stars0 ratingsWatch Out, Hollywood!: More Confessions of a So-called Middle Child Rating: 5 out of 5 stars5/5Ubuntu 18.04 Essentials: Learn to Install, Administer and Use Ubuntu 18.04 Systems Rating: 0 out of 5 stars0 ratingsJava 9 with JShell Rating: 0 out of 5 stars0 ratingsUltimate Ember.js for Web App Development Rating: 0 out of 5 stars0 ratingsSonar Code Quality Testing Essentials Rating: 0 out of 5 stars0 ratingsMastering MEAN Stack: Build full stack applications using MongoDB, Express.js, Angular, and Node.js (English Edition) Rating: 0 out of 5 stars0 ratingsJob Ready Java Rating: 0 out of 5 stars0 ratingsAndroid Studio Ladybug Essentials - Kotlin Edition: Developing Android Apps Using Android Studio Ladybug and Kotlin Rating: 0 out of 5 stars0 ratingsAndroid Studio Iguana Essentials - Kotlin Edition Rating: 5 out of 5 stars5/5
Operating Systems For You
The Mac Terminal Reference and Scripting Primer Rating: 4 out of 5 stars4/5Bash Command Line Pro Tips Rating: 5 out of 5 stars5/5MacBook Pro User Manual: 2022 MacBook Pro User Guide for beginners and seniors to Master Macbook Pro like a Pro Rating: 0 out of 5 stars0 ratingsExcel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Learn Azure in a Month of Lunches Rating: 0 out of 5 stars0 ratingsUNIX For Dummies Rating: 3 out of 5 stars3/5Swift in Depth Rating: 0 out of 5 stars0 ratingsLinux Bible Rating: 0 out of 5 stars0 ratingsMastering Bash Rating: 5 out of 5 stars5/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5Ed Mastery (Manly McManface Edition) Rating: 0 out of 5 stars0 ratingsMastering Embedded Linux Programming - Second Edition Rating: 4 out of 5 stars4/5Linux All-in-One For Dummies Rating: 3 out of 5 stars3/5The Linux Command Line Beginner's Guide Rating: 4 out of 5 stars4/5Git Best Practices Guide Rating: 0 out of 5 stars0 ratingsHacking for Beginners: Mastery Guide to Learn and Practice the Basics of Computer and Cyber Security Rating: 0 out of 5 stars0 ratingsLinux Shell Scripting Cookbook - Third Edition Rating: 4 out of 5 stars4/5PowerShell: A Beginner's Guide to Windows PowerShell Rating: 4 out of 5 stars4/5Linux for Beginners: Linux Command Line, Linux Programming and Linux Operating System Rating: 4 out of 5 stars4/5Learning Linux Shell Scripting Rating: 4 out of 5 stars4/5Learn Windows PowerShell in a Month of Lunches Rating: 0 out of 5 stars0 ratingsLinux: A Comprehensive Guide to Linux Operating System and Command Line Rating: 0 out of 5 stars0 ratingsExploring Windows 11: The Illustrated, Practical Guide to Using Microsoft Windows Rating: 0 out of 5 stars0 ratingsMastering Windows Server 2022: Comprehensive administration of your Windows Server environment Rating: 0 out of 5 stars0 ratingsBeginning Linux Programming Rating: 0 out of 5 stars0 ratingsCISSP in 21 Days - Second Edition Rating: 3 out of 5 stars3/5Classic Computer Science Problems in Swift: Essential techniques for practicing programmers Rating: 0 out of 5 stars0 ratings
Reviews for Beginning Unix
1 rating0 reviews
Book preview
Beginning Unix - Paul Love
Introduction
The new millennium has seen many changes in many areas of computing, from new forms of storage with massive amounts of storage space, to systems that are far more powerful than the first computer users could have ever imagined. Designed and initially created more than 30 years ago, the Unix operating system has been part of the evolution of computers, so it’s no accident that Unix is still one of the most popular operating systems for mission-critical tasks.
Unix is the basis for some of the most-used operating systems today, from Apple’s Mac OS X to Linux to the more commonly known Unix versions, such as Sun’s Solaris Unix and IBM’s AIX. Today many of the versions of Unix are available free to users and corporations, allowing for a larger use base than many had imagined when Unix was first being developed. Unix is now seen as a user-friendly, very secure, and robust operating system rather than the cold, command line–only operating system once thought to be useful only to computer experts.
Beginning Unix covers all basic aspects of the Unix operating system. What is unique about this book is that it covers not only the standard Unix systems, such as Sun’s Solaris and IBM’s AIX, but also Unix derivatives, such as Apple’s Mac OS X and the various Linuxes. Additionally, this book includes a unique conversion section explaining how to convert Mac OS X–specific or Windows operating systems commands that you may already know into their Unix equivalents, making the transition from other operating systems much easier.
This book also includes a CD-ROM with the KNOPPIX operating system. This fully functional version of Linux enables you to restart your computer into a Linux environment. KNOPPIX requires no technical experience, and it will not damage or modify your current operating system. Using KNOPPIX is an easy way for you to follow along with the book, learning Unix without the consequences of having to lose any data or operating systems on your computer.
Who Is This Book For?
This book is for anyone who is interested in understanding the concepts and operation of the Unix operating system, including any of the Unix derivatives available today (Apple OS X, Linux, or BSD, for example). It is designed for absolute beginners to the Unix operating system, including those who have only worked with the many graphical user interfaces available for the different Unix systems (Apple’s Aqua interface, KDE, GNOME, and so forth). This book can also be useful for veteran Unix users, because no one knows everything about Unix, as a refresher on known concepts or as a tool to fill gaps in some knowledge areas.
No assumptions are made about the reader’s skill level or prior use of computers. If you have used computers and other operating systems such as Mac OS X or Microsoft Windows, you will understand some of the concepts faster, but all readers will gain some insight from this book, regardless of their present expertise.
What Does This Book Cover?
This book covers all versions of Unix in their most basic form, as well as commands and concepts common to all versions of Unix and its derivatives, including:
Apple’s Mac OS X
Red Hat Linux
Mandrakelinux
IBM’s AIX
Any version of Linux
Any version of BSD (FreeBSD, OpenBSD, NetBSD)
Special emphasis is placed on Sun’s Solaris, Mac OS X, and Linux because they are the most popular available. The different versions of Unix utilize the same principles and commands with small differences, so any version of Unix can be used with this book.
This book also covers basic programming, including shell scripting and Perl programming, which enable you to automate your system as much as possible—one of the strengths of the Unix operating system. The coverage of these programming concepts creates a firm foundation for more advanced programming covered by other books.
How This Book Is Structured
This book presents basic concepts of the Unix operating system first, progressing to more advanced topics and programming later in the book. If you are familiar with the concepts or commands covered in one chapter, you can simply skip to one that has information you need to learn.
Chapters 1 through 4 provide the fundamental information you need to understand Unix methodology, how Unix is designed, and the basics of logging in to and out of a Unix system.
Chapter 1: Unix Fundamentals. The basics of Unix, including the history and terminology as well as some of the core concepts of Unix design and philosophy. This chapter helps you understand some of the culture behind the Unix operating system.
Chapter 2: First Steps. This chapter describes the very first steps you must take to utilize the Unix operating system effectively, including what occurs during the Unix boot process, how to log in, and how the user environment (shell) is structured, as well as how to shut down a Unix system properly.
Chapter 3: Understanding Users and Groups. Learning how users and groups work within the system is crucial to understanding how you can effectively use your system. This chapter covers all aspects of user accounts and groups, including how to add, modify, and delete user accounts and how to become another user with the su command.
Chapter 4: File System Concepts. The Unix file system is one of the most critical components of the Unix system as a whole. The file system allows you to store and manipulate your files. This chapter shows you what the Unix file system is and how to use it from a user and system administrator point of view. You will learn how to utilize the file system effectively, so that you can prevent some of the common problems associated with file system management.
Chapters 5–7 put you to work, from customizing your working environment to editing files on Unix. These chapters extend your repertoire of Unix commands.
Chapter 5: Customize Your Working Environment. The shell is the primary environment that you use for day-to-day work in Unix. Unix offers a multitude of ways to customize your working environment to suit your needs and whims. This chapter goes over the many different configuration options available for users in many of the different Unix shells.
Chapter 6: Unix Commands in Depth. Unix has hundreds of different commands that do many tasks. This chapter provides a foundation for some of the most commonly used commands you will need to understand in order to use the system effectively for day-to-day work.
Chapter 7: Editing Files with Vi. The vi editor is one of the oldest and most widely used text editors in Unix. It is commonly seen as a monolithic and difficult-to-use editor, but as you will learn, it is a very powerful and fast way to edit files. This chapter explores all aspects of using the vi editor to create and edit files effectively.
With a good foundation in place, you’re ready to move on to more-advanced topics. Chapters 8–11 discuss how to use some powerful Unix tools, how to manage processes, and how to schedule programs to run at specific times. Chapter 12 takes on the important subject of security.
Chapter 8: Advanced Tools. This chapter introduces the concept of regular expressions and covers some of the more advanced tools available to the Unix user.
Chapter 9: Advanced Unix Commands: sed and awk.sed and awk are two very powerful tools that enable a user to manipulate files in an efficient manner. These commands are essential, and you will find yourself using them frequently. This chapter goes from the ground up in showing you how to use these commands.
Chapter 10: Job Control and Process Management. This chapter covers the basics of Unix processes and how to control and manage these crucial components of the Unix operating system. As an extension of processes, job control is reviewed and explained.
Chapter 11: Running Programs at Specified Times. Running programs at specified times without user or administrator intervention provides a user or administrator with the capability to run programs with minimal system impact when the fewest users are utilizing the system. This chapter covers how to run commands at different times and discusses the environmental variables that affect this process.
Chapter 12: Security. Unix has had security features ingrained for many years, but as with any operating system, it can be made more secure from malicious entities on the outside or inside. This chapter goes over the basics of system security and then covers some of the fundamental steps you can take to make your system more secure.
Chapters 13–17 delve into shell scripting and other methods of automating
common tasks in Unix systems. Although these tasks often fall within the purview of system administrators, other users, including home users, may benefit.
Chapter 13: Basic Shell Scripting. Shell scripting is the gateway to more advanced programming languages for many users. This chapter delves into the basics of programming with the major Unix shells, making the transition from user to beginning programmer easier.
Chapter 14: Advanced Shell Scripting. This chapter takes Chapter 13 one step further, moving you into more advanced programming topics and leaving you with the capability to program shell scripts for any task.
Chapter 15: System Logging. The importance of logging to users, administrators, and programmers cannot be overstated. Logging is the outlet for the system to communicate with the user, on everything from problems to successful system actions.
Chapter 16: Unix Networking. This chapter covers all aspects of communicating with other systems, including network administration and scripting on common network tasks.
Chapter 17: Perl Programming for Unix Automation. Perl is one of the most common programming languages on Unix, as well as on other operating systems. Perl enables you to quickly write concise, useful programs. This chapter goes over the basics of programming in the Perl language and tells you how to automate common Unix tasks with Perl.
Chapters 18 and 19 cover two important topics: backing up your data and installing Unix programs.
Chapter 18: Backup Tools. This chapter describes some of the tools available on your Unix system for backing up and restoring your system in the event of accidental deletion or major system failure or catastrophe.
Chapter 19: Installing Software from Source Code. Although Unix includes many programs in a default installation, there are often many other programs you will want to install. This chapter shows you how to install software from source code and from precompiled binaries.
Chapters 20 and 21 provide maps to Unix operating systems for those who are more familiar with Microsoft Windows, Microsoft DOS, Mac OS 9, and Mac OS X. These chapters are great references for those who have used other operating systems and want to compare Unix to what they already know.
Chapter 20: Conversion: Unix for Mac OS Users. Mac OS X is built on a Unix foundation, but there are some minor differences between standard Unix and Apple’s Mac OS X. This chapter converts typical Mac OS (X, 9, and below) commands and concepts into their equivalent Unix commands or concepts. This chapter makes the migration into Unix much easier for users of any version of Apple’s operating systems.
Chapter 21: Conversion: Unix for Windows Users. Microsoft Windows is the predominant operating system available today. This chapter converts the most common Windows and MS-DOS commands into their equivalent Unix commands, making the migration from those operating systems to Unix much simpler.
The book concludes with two appendixes. Appendix A, Answers,
provides the solutions to the exercise(s) at the end of most chapters. These exercises will enable you to test your grasp of the concepts presented in the chapter. Appendix B, Useful Unix Web Sites,
provides links to some of the best Unix-related Web sites on the Internet.
What Do You Need to Use This Book?
There are no requirements to use this book, but to make the learning process easier, the KNOPPIX distribution of Linux is provided on the CD-ROM accompanying this book. This enables you to use a Unix-based operating system any time, with no commitment of hard-drive resources or system alterations. The KNOPPIX distribution runs completely from CD-ROM and can be run at any time. If you have a Mac OS X system, you are already using a Unix operating system. The CD-ROM version of KNOPPIX runs only on Intel- or AMD-based systems; it will not work on Apple’s line of hardware.
Conventions
This book uses the conventions discussed in this section to make the importance of specific information stand out.
Important notes or concepts appear in this format.
Interesting tidbits or tips are formatted in italics, like this.
Code or commands are in this monotype format.
The text also uses specific styles to denote their significance:
Keyboard commands that use function keys are denoted like: Shift+Q
Web URLs are noted like this: persistence.properties.
Any actual Tab characters in code are represented by a right arrow: →.
Source Code
The source code for all the code in this book is available online if you prefer to cut and paste rather than copy by hand from the book. It is available at www.wrox.com. At the Wrox Web site, you can find the book’s source code by searching for the book title (Beginning Unix) or ISBN (0-7645-7994-0).
Errata
This book has been checked for technical and grammatical errors, but as is human nature, errors can occur. The errata page for this book is available at www.wrox.com, in the book details section. If you find an error in the book that is not listed, the authors would greatly appreciate it if you go to www.wrox.com/contact/techsupport.shtml and complete the form to submit the error. By submitting any errors you discover, you help us to make this book even better.
1
Unix Fundamentals
The Unix operating system was created more than 30 years ago by a group of researchers at AT&T’s Bell Laboratories. During the three decades of constant development that have followed, Unix has found a home in many places, from the ubiquitous mainframe to home computers to the smallest of embedded devices. This chapter provides a brief overview of the history of Unix, discusses some of the differences among the many Unix systems in use today, and covers the fundamental concepts of the basic Unix operating system.
Brief History
In terms of computers, Unix has a long history. Unix was developed at AT&T’s Bell Laboratories after Bell Labs withdrew from a long-term collaboration with General Electric (G.E.) and MIT to create an operating system called MULTICS (Multiplexed Operating and Computing System) for G.E.’s mainframe. In 1969, Bell Labs researchers created the first version of Unix (then called UNICS, or Uniplexed Operating and Computing System), which has evolved into the common Unix systems of today.
Unix was gradually ported to different machine architectures from the original PDP-7 minicomputer and was used by universities. The source code was made available at a small fee to encourage its further adoption. As Unix gained acceptance by universities, students who used it began graduating and moving into positions where they were responsible for purchasing systems and software. When those people began purchasing systems for their companies, they considered Unix because they were familiar with it, spreading adoption further. Since the first days of Unix, the operating system has grown significantly, so that it now forms the backbone of many major corporations’ computer systems.
Unix no longer is an acronym for anything, but it is derived from the UNICS acronym. Unix developers and users use a lot of acronyms to identify things in the system and for commands.
Unix Versions
In the early days Unix was made available as source code rather than in the typical binary form. This made it easier for others to modify the code to meet their needs, and it resulted in forks in the code, meaning that there are now many disparate versions (also known as flavors).
Source code represents the internal workings of a program, specifying line by line how a program or application operates. Access to source code makes it easier to understand what is occurring in the program and allows for easier modification of the program. Most commercial programs are distributed in binary form, meaning they are ready to be run, but the internal lines of code are not readable by people.
There are primarily two base versions of Unix available: AT&T System V and Berkley Software Distribution (BSD). The vast majority of all Unix flavors are built on one of these two versions. The primary differences between the two are the utilities available and the implementations of the file structure. Most of the Unix flavors incorporate features from each base version; some include the System V version utilities in /usr/bin and the BSD version in /usr/ucb/bin, for example, so that you have the choice of using a utility with which you are comfortable. This arrangement is indicative of the Unix way of providing the flexibility to do things in different ways.
The various versions of Unix systems provide the user the power of choice: you can select the flavor that best matches your needs or system requirements. This ability to choose is considered by many as a strength, although some see it as a weakness in that these slightly differing versions and flavors create some incompatibilities (in the implementation, commands, communications, or methods, for example). There is no true
version of Unix or one that is more official than others; there are just different implementations. Linux, for example, is a variant of Unix that was built from the ground up as a free Unix-like alternative to the expensive commercial Unix versions available when Linux was first created in 1991. Here are some of the more popular flavors of Unix available:
Each of these flavors implements its version of Unix in a slightly different way, but even though the implementation of a command may vary on some systems, the core command and its functionality follow the principles of one of the two major variations. Most versions of Unix utilize SVR4 (System V) and add the BSD components as an option to allow for maximum interoperability. This is especially true with commands; for example, there are two versions of the ps command (for showing processes) available on most systems. One version of ps might reside in /usr/bin/ps (the System V version) while the other might exist in /usr/ucb/bin (BSD version); the commands operate similarly, but provide output or accept optional components in a different manner.
Many vendors have attempted to standardize the Unix operating system. The most successful attempt, a product of the noncommercial Institute for Electrical and Electronics Engineers, is standard 1003 (IEEE 1003), also known as the POSIX (Portable Operating Systems Interface) standard. That standard is also registered with the International Organization for Standardization under ISO/IEC 9945-1, which you can find at http://iso.org/iso/en/CombinedQueryResult.CombinedQueryResult?queryString=9945. The POSIX standard merged with the Single Unix Specification (SUS) standard to become one integrated standard for all Unix flavors. It retained the name POSIX standard. Not all Unix versions follow the POSIX standard to the letter, but most do adhere to the major principles outlined in the standard.
Early Unix systems were mainly commercial commodities like most software for sale; to run the operating system, you generally had to pay for that right. In 1984 an engineer named Richard Stallman began work on the GNU Project, which was an effort to create an operating system that was like Unix and that could be distributed and used freely by anyone. He currently runs the Free Software Foundation (http://gnu.org/fsf/fsf.html), and many of the programs he and his supporters have created are used in both commercial and open-source versions of Unix.
GNU stands for GNU’s Not Unix, which is a recursive acronym. The GNU Project wanted to create a Unix-like operating system, not a Unix derivative (which would imply that it was a source-code copy of Unix).
In 1991 Linus Torvalds, a Finnish graduate student, began work on a Unix-like system called Linux. Linux is actually the kernel (kernels are discussed later in this chapter), while the parts with which most people are familiar—the tools, shell, and file system—are the creations of others (usually the GNU organization). As the Linux project gained momentum, it grew into a major contender in the Unix market. Many people are first introduced to Unix through Linux, which makes available to desktop machines the functionality of a Unix machine that used to costs thousands of dollars. The strength of Linux lies in its progressive licensing, which allows for the software to be freely distributable with no royalty requirements. The only requirement for the end user is that any changes made to the software be made available to others in the community, thus permitting the software to mature at an incredibly fast rate. The license under which Linux is distributed is called the GNU Public License (GPL), available at http://gnu.org/licenses/licenses.html.
Another free variant of Unix that has gained popularity is the BSD family of software, which uses the very lenient BSD License (http://opensource.org/licenses/bsd-license.php). This license allows for free modification without the requirement of providing the software source code to others. After a landmark 1994 lawsuit settlement, BSD Unix became freely distributable and has evolved into the NetBSD, FreeBSD, and OpenBSD projects, and it also forms the underlying technology for Darwin (upon which Mac OS X is based).
These freely available Unix derivatives have given new life to the Unix operating system, which had been experiencing a decline as the Microsoft Windows juggernaut advanced. Additionally, Apple has become the highest-volume supplier of Unix systems. Now Unix is moving forward in the corporate environment as well as in the end-user desktop market.
Operating System Components
An operating system is the software interface between the user and the hardware of a system. Whether your operating system is Unix, DOS, Windows, or OS/2, everything you do as a user or programmer interacts with the hardware in some way. In the very early days of computers, text output or a series of lights indicated the results of a system request. Unix started as a command-line interface (CLI) system—there was no graphical user interface (GUI) to make the system easier to use or more aesthetically pleasing. Now Unix has some of the most customizable user interfaces available, in the forms of the Mac OS X Aqua and Linux’s KDE and GNOME interfaces among others, making the Unix system truly ready for the average user’s desktop.
Let’s take a brief look at the components that make up the Unix operating system: the kernel, the shell, the file system, and the utilities (applications).
Unix Kernel
The kernel is the lowest layer of the Unix system. It provides the core capabilities of the system and allows processes (programs) to access the hardware in an orderly manner. Basically, the kernel controls processes, input/output devices, file system operations, and any other critical functions required by the operating system. It also manages memory. These are all called autonomous functions, in that they are run without instructions by a user process. It is the kernel that allows the system to run in multiuser (more than one user accessing the system at the same time), multitasking (more than one program running at a time) mode.
A kernel is built for the specific hardware on which it is operating, so a kernel built for a Sun Sparc machine can’t be run on an Intel processor machine without modifications. Because the kernel deals with very low-level tasks, such as accessing the hard drive or managing multitasking, and is not user friendly, it is generally not accessed by the user.
One of the most important functions of the kernel is to facilitate the creation and management of processes. Processes are executed programs (called jobs or tasks in some operating systems) that have owners—human or systems—who initiate their calling or execution. The management of these can be very complicated because one process often calls another (referred to as forking in Unix). Frequently processes also need to communicate with one another, sending and receiving information that allows other actions to be performed. The kernel manages all of this outside of the user’s awareness.
The kernel also manages memory, a key element of any system. It must provide all processes with adequate amounts of memory, and some processes require a lot of it. Sometimes a process requires more memory than is available (too many other processes running, for example). This is where virtual memory comes in. When there isn’t enough physical memory, the system tries to accommodate the process by moving portions of it to the hard disk. When the portion of the process that was moved to hard disk is needed again, it is returned to physical memory. This procedure, called paging, allows the system to provide multitasking capabilities, even with limited physical memory.
Another aspect of virtual memory is called swap, whereby the kernel identifies the least-busy process or a process that does not require immediate execution. The kernel then moves the entire process out of RAM to the hard drive until it is needed again, at which point it can be run from the hard drive or from physical RAM. The difference between the two is that paging moves only part of the process to the hard drive, while swapping moves the entire process to hard drive space. The segment of the hard drive used for virtual memory is called the swap space in Unix, a term you will want to remember as you move through this book. Running out of swap space can cause significant problems, up to and including system failure, so always be sure you have sufficient swap space. Whenever swapping occurs, you pay a heavy price in significantly decreased performance, because disks are appreciably slower than physical RAM. You can avoid swapping by ensuring that you have an adequate amount of physical RAM for the system.
Shells
The shell is a command line interpreter that enables the user to interact with the operating system. A shell provides the next layer of functionality for the system; it is what you use directly to administer and run the system. The shell you use will greatly affect the way you work. The original Unix shells have been heavily modified into many different types of shells over the years, all with some unique feature that the creator(s) felt was lacking in other shells. There are three major shells available on most systems: the Bourne shell (also called sh), the C shell (csh), and the Korn shell (ksh). The shell is used almost exclusively via the command line, a text-based mechanism by which the user interacts with the system.
The Bourne shell (also simply called Shell) was the first shell for Unix. It is still the most widely available shell on Unix systems, providing a language with which to script programs and basic user functionality to call other programs. Shell is good for everyday use and is especially good for shell scripting because its scripts are very portable (they work in other Unix versions’ Bourne shells). The only problem with the Bourne shell is that it has fewer features for user interaction than some of the more modern shells.
The C shell is another popular shell commonly available on Unix systems. This shell, from the University of California at Berkeley, was created to address some of the shortcomings of the Bourne shell and to resemble the C language (which is what Unix is built on). Job control features and the capability to alias commands (discussed in Chapter 5) make this shell much easier for user interaction. The C shell had some early quirks when dealing with scripting and is often regarded as less robust than the Bourne shell for creating shell scripts. The quirks were eventually fixed, but the C shell still has slight variations, resulting from different implementations based on which entity (commercial provider or other resource) is providing the shell.
The Korn shell was created by David Korn to address the Bourne shell’s user-interaction issues and to deal with the shortcomings of the C shell’s scripting quirks. The Korn shell adds some functionality that neither the Bourne or C shell has while incorporating the strong points of each shell. The only drawback to the Korn shell is that it requires a license, so its adoption is not as widespread as that of the other two.
These are by no means the only shells available. Here’s a list of some of the many shells available for the different Unix systems:
sh (also known as the Bourne shell)[
PDKSH (Public Domain Korn shell)
bash (Bourne Again Shell—a revamped version of Bourne shell)
Z shell
TCSH (TENEX C shell)
As with everything Unix, there are many different implementations, and you are free to choose the shell that best suits your needs based on the features provided. Chapter 5 examines several shells in detail.
The Other Components
The other Unix components are the file system and the utilities. The file system enables the user to view, organize, secure, and interact with, in a consistent manner, files and directories located on storage devices. The file system is discussed in depth in Chapter 4.
Utilities are the applications that enable you to work on the system (not to be confused with the shell). These utilities include the Web browser for navigating the Internet, word processing utilities, e-mail programs, and other commands that will be discussed throughout this book.
Try It Out Run Unix from a CD-ROM
The best way to learn Unix is to follow along with the book and try some of the exercises while you are reading. If you don’t have a current install of a Unix operating system, and you do have an Intel/AMD-based system (a PC that is Windows compatible), you can use KNOPPIX, a bootable Linux distribution. KNOPPIX enables you to try Unix right from a CD, without installing or modifying any other operating system on your computer. It provides a full-featured Linux environment and is a great way to see what Linux and Unix is about.
Use the copy of Knoppix included on this book’s CD or download the KNOPPIX ISO image from one of the mirrors listed at http://knopper.net/knoppix-mirrors/index-en.html. There are usually two versions of the software, one in German and one in English; choose the image with the extension -EN.iso.
If you downloaded a copy of Knoppix, use your favorite CD-burning software to burn a copy of the ISO onto a CD-R.
Insert the CD-ROM included with this book or the CD-R you created into your CD-ROM drive and boot (load) from it. By default, most systems let you boot from a CD-ROM simply by putting the disk in the drive. (If the CD-ROM doesn’t start automatically, you may need to contact your computer manufacturer’s manual for instructions.) You’ll see the opening KNOPPIX screen, which should be similar to the one in Figure 1-1.
c01f001Figure 1-1
Press Enter (or Return) to continue the boot process. You’ll see a screen similar to the one shown in Figure 1-2.
c01f002Figure 1-2
The boot sequence continues through a few more screens.
Because KNOPPIX is bootable and can be transported from system to system, you do not enter a password as you would with most Unix distributions.
Figure 1-3 shows the desktop loading.
c01f003Figure 1-3
When you are done, exit the system by rebooting (restarting) or shutting down your computer. You can do this by pressing Ctrl+Alt+Del. A dialog box provides you with options to Turn Off Computer or Restart Computer. If you select Restart Computer, take out the CD-ROM during the reboot to return to your regular operating system.
How It Works
The KNOPPIX distribution has been optimized to run within RAM from the CD-ROM. It does not need to modify the hard drive or install itself anywhere. It can be run without fear of damaging the current contents of your hard drive.
Summary
This chapter briefly discussed the history of Unix and introduced some of the versions of Unix. The Unix core components—the kernel, shells, file system, and utilities—were introduced.
In the past, Unix was considered a system geared to the most computer-savvy users and those who wanted a system for core functionality, with no regard to aesthetics or user friendliness. Unix has evolved to fit the needs of many different types of users, from the no-nonsense corporate environment to the novice computer user’s desktop. There are rich desktop environments available for many flavors of Unix, for example, and every currently selling Macintosh computer is running a version of Unix right out of the box.
In Chapter 2, you begin using a Unix system from initial login to logout.
2
First Steps
This chapter introduces you to interacting with the Unix operating system. It examines the initial Unix boot process, shows you how to log in to the system and to properly shut down the system, and explains what the shell offers you. It also covers the man command, which is Unix’s built-in system help facility. This chapter provides the foundation upon which other chapters will build.
System Startup
What occurs from the power-off position until your operating system is fully available is called the boot process. In the simplest terms, the boot process consists of the Read-Only Memory’s (ROM, or NVRAM, or firmware) loading of the program for actually booting (starting) the system. This initial step (commonly called bootstrapping) identifies the devices on the system that can be booted or started from. You can boot or start from only one device at a time, but, because many different devices can be identified as bootable, one of those other identified devices can be used if one bootable device has a failure. These devices may load automatically, or you may be shown a list of devices from which you can choose. Figure 2-1 shows a list of bootable devices in a Solaris boot system on the Intel platform.
c02f001Figure 2-1
The boot device doesn’t have to be a physical hard drive, because the system can boot from the network or from removable storage such as a CD-ROM or floppy diskette. A boot device simply holds the information about where to load the operating system. The bootstrap phase only identifies the hardware available for booting and whether it is usable.
Control is then transferred to the kernel. The operating system has not been loaded at this point, and the system is not usable for production processes. Some systems show the boot process by means of messages on the screen, and others hide the system messages from the users by using graphical figures to represent the boot process. Figure 2-2 shows the boot drive being identified during the Solaris boot process.
c02f002Figure 2-2
After the initial bootstrapping, the boot program begins loading the Unix kernel, which typically resides in the root partition of the system. The kernel on most Unix systems is called unix; in Linux systems, it might be called vmunix or vmlinuz. Its location differs according to the Unix version, as these examples show:
AIX: /unix
Linux: /boot/vmlinuz
Solaris: /kernel/unix
These are only a few of the different kernel locations, but in general you shouldn’t have to modify the kernel in day-to-day or even development processes unless you are a system administrator or need to add/remove some functionality from the kernel for a specific need.
The kernel’s initial tasks, which vary according to hardware and Unix version, are followed by the initialization phase, in which the system processes and scripts are started. The init process is the first job started and is the parent of all other processes. It must be running for the system to run. The init process calls the initialization scripts and completes administrative tasks relative to the system, such as starting sendmail, the X or window server (that provides the graphical user interface), and so on.
The init process looks into the initialization specification file, usually called /etc/inittab. This file identifies how init should interpret different run levels and what scripts and processes should be started in each run level. A run level is a grouping of processes (programs in the most basic sense) or daemons (processes that run all the time).
Figure 2-3 shows the initialization phase on a Mac OS X system.
c02f003Figure 2-3
Mac OS X and some of the newer versions of Unix are not as verbose as other Unix systems, because, as Unix has evolved, the makers of the different Unix systems have made ease of use their primary goal. Because the typical end user has no use for the information, a lot of the messages that appear on initialization screens of older versions of Unix generally aren’t displayed by Mac OS X and user-friendly Linuxes.
You can use the escape sequence (Cmd+v) to view the boot messages on the Mac OS X.
Figure 2-4 shows the end of the system initialization of a freshly installed Solaris 10 system.
c02f004Figure 2-4
At first, this information may seem odd or even alarming, but there is generally an explanation of the message in the script or logs to track down a problem as your Unix knowledge progresses. For example, the 10th line shows an error in syslogd (the system logging daemon, which is discussed in Chapter 15): syslogd: line 24: WARNING: loghost could not be resolved. That may look like big trouble, but it is in fact a minor issue that can be resolved by adding a single entry in /etc/hosts. You’ll learn more about these messages, how to identify them, and how to troubleshoot them in Chapter 15.
Figure 2-5 shows a Linux system booting (after the initialization phase), and again there are some messages that can be disconcerting, such as the one on line 3: Your system appears to have shut down uncleanly.
c02f005Figure 2-5
These errors are usually fixed automatically or can be corrected using the fsck command, which is introduced in Chapter 4.
The boot-up screens contain a wealth of information, but you don’t have to watch every message as it displays on your screen. You can use the command dmesg to gather boot-up messages that you can peruse at your leisure. To change the boot-up parameters, you must modify either the system Read-Only Memory (ROM) or the Unix operating system initialization scripts as discussed later in the book.
After the initialization phase has completed, the system is running and ready for users to log in. You will see a login prompt or graphical login screen on your system if you are logging in locally.
Logging In and Out of Unix
Logging in means that you are authenticating yourself to the Unix system as a valid user who needs to utilize resources. When you attempt to log in to a Unix system, you are typically asked to authenticate yourself by providing a username and password pair, although logins can include more advanced mechanisms such as biometrics (a retina eye scan, for example) or one-time-use tokens that change password combinations every few seconds. You can log in by using either a graphical user interface (GUI) or the command line.
Logging In via GUI
If you have a keyboard/mouse and monitor directly connected to the Unix system, you can log in much like users log in to their home systems. The initial login screen can take many forms, from the traditional command line that only presents text information to graphical logins complete with pictures. Let’s look at a few examples. Figure 2-6 shows a command-line interface on a Mandrakelinux login screen via a command line interface.
c02f006Figure 2-6
Figure 2-7 shows a graphical login for a Mandrakelinux system.
c02f007Figure 2-7
Figure 2-8 shows a Solaris 10 graphical login.
c02f008Figure 2-8
The username and password that you supply are against the internal system file or database containing a list of valid usernames and passwords. Figure 2-9 shows a Mac OS X login screen asking the user to select as whom he wants to log in.
c02f009Figure 2-9
In this example, selecting Beginning Unix brings up the screen shown in Figure 2-10, where a valid password must be entered.
c02f010Figure 2-10
An incorrect password usually results in a text or graphic message letting the user know the password entered is invalid. Most Unix systems are set up to freeze an account or set a time delay if a user enters a password incorrectly more than three (or some other specified number of) times. This is for security reasons, so that someone cannot easily continue to enter different passwords in an attempt to log in to another person’s account. A correct password starts the login process, which might look much like that shown in Figure 2-11.
c02f011Figure 2-11
Logging In at the Command Line
There are instances where Unix systems aren’t running graphical user interfaces and all work is done using the command line. In these cases, you typically see either a banner message indicating the type of machine you are logging in to or a message set up by the system administrator. Sometimes you won’t see anything other than the login prompt. Figure 2-12 shows a sample login screen from a Linux system.
c02f012Figure 2-12
The banner portion of this screen is this part:
Mandrake Linux release 10.0 (Official) for i586 Kernel 2.6.3-7ndksmp on an i686
The first line of the banner indicates that this is a Linux system, specifically the Mandrake 10 distribution. The second line indicates the kernel the system is running and also specifies the teletype number (screen). Banners differ from system to system, but you can generally figure out what information is being presented. Because of security concerns, this information may be absent on systems that are publicly accessible through the Internet (exact system specifications make it easier for hackers to attack the system).
The third line shows the hostname, which can be a name (linux, in Figure 2-12) or IP address (such as 192.168.1.1) and then the phrase login:. This is where you enter the username that you are logging in as. Notice that the command line login doesn’t offer any hints about what username to use, so you have to know it ahead of time. Figure 2-13 shows a login failure, followed by the sequence of events for a successful logging in.
c02f013Figure 2-13
In this example, the user enters beginningunix as the username and presses Enter (or Return). The request for the password comes on the screen (line 4). The user enters a bad password for that account, and the system responds with the Login incorrect statement, followed by another chance to log in. This time the user enters the correct username and password. The system then displays the last time the user was logged in and provides access to a command line shell so that the user can begin working on the system.
The last time logged in is a security feature that enables you to see when the account was last used. If you notice that the last time logged in was a time when you weren’t using the system, someone may have broken into your