12
CONTENTS IN DETAIL PREFACE xix Who Should Read This Book? xx Prerequisites xx How to Read This Book xx A Hands-On Approach xx How This Book Is Organized xxi What’s New in the Second Edition? xxi A Note on Terminology xxii ACKNOWLEDGMENTS xxiii 1 THE BIG PICTURE 1 11 Levels and Layers of Abstraction in a Linux System 2 12 Hardware: Understanding Main Memory 4 13 The Kernel 4 131 Process Management 5 132 Memory Management 6 133 Device Drivers and Management 7 134 System Calls and Support 7 14 User Space 8 15 Users 9 16 Looking Forward 10 2 BASIC COMMANDS AND DIRECTORY HIERARCHY 11 21 The Bourne Shell: /bin/sh 12 22 Using the Shell 12 221 The Shell Window 12 222 cat 13 223 Standard Input and Standard Output 13 23 Basic Commands 14 231 ls 14 232 cp 15 233 mv 15 234 touch 15 235 rm 16 236 echo 16 24 Navigating Directories 16 241 cd 16 242 mkdir 17 243 rmdir 17 244 Shell Globbing (Wildcards) 17

Contents in Detail - No Starch Press | "The finest in geek ... .6 .1 USB Storage and SCSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3 .6 .2 SCSI and ATA

  • Upload
    dodung

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

C o n t e n t s i n D e t a i l

Preface xixWho Should Read This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxPrerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxHow to Read This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxA Hands-On Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxHow This Book Is Organized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiWhat’s New in the Second Edition? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiA Note on Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii

acknowledgments xxiii

1 the Big Picture 11 .1 Levels and Layers of Abstraction in a Linux System . . . . . . . . . . . . . . . . . . . . . . . . 21 .2 Hardware: Understanding Main Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 .3 The Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1 .3 .1 Process Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 .3 .2 Memory Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 .3 .3 Device Drivers and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 .3 .4 System Calls and Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1 .4 User Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 .5 Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 .6 Looking Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Basic commands and directory hierarchy 112 .1 The Bourne Shell: /bin/sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 .2 Using the Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 .2 .1 The Shell Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 .2 .2 cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 .2 .3 Standard Input and Standard Output . . . . . . . . . . . . . . . . . . . . . . . 13

2 .3 Basic Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 .3 .1 ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 .3 .2 cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 .3 .3 mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 .3 .4 touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 .3 .5 rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 .3 .6 echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2 .4 Navigating Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 .4 .1 cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 .4 .2 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 .4 .3 rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 .4 .4 Shell Globbing (Wildcards) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

viii Contents in Detail

2 .5 Intermediate Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 .5 .1 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 .5 .2 less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 .5 .3 pwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 .5 .4 diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 .5 .5 file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 .5 .6 find and locate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 .5 .7 head and tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 .5 .8 sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2 .6 Changing Your Password and Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 .7 Dot Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 .8 Environment and Shell Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 .9 The Command Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 .10 Special Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 .11 Command-Line Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 .12 Text Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 .13 Getting Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 .14 Shell Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2 .14 .1 Standard Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 .14 .2 Standard Input Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2 .15 Understanding Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 .15 .1 Anatomy of a UNIX Error Message . . . . . . . . . . . . . . . . . . . . . . . 282 .15 .2 Common Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2 .16 Listing and Manipulating Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 .16 .1 Command Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 .16 .2 Killing Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 .16 .3 Job Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 .16 .4 Background Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2 .17 File Modes and Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 .17 .1 Modifying Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 .17 .2 Symbolic Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 .17 .3 Creating Symbolic Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2 .18 Archiving and Compressing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 .18 .1 gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 .18 .2 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 .18 .3 Compressed Archives ( .tar .gz) . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 .18 .4 zcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 .18 .5 Other Compression Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2 .19 Linux Directory Hierarchy Essentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 .19 .1 Other Root Subdirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 .19 .2 The /usr Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 .19 .3 Kernel Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2 .20 Running Commands as the Superuser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 .20 .1 sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 .20 .2 /etc/sudoers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2 .21 Looking Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

3 devices 453 .1 Device Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 .2 The sysfs Device Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Contents in Detail ix

3 .3 dd and Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 .4 Device Name Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

3 .4 .1 Hard Disks: /dev/sd* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 .4 .2 CD and DVD Drives: /dev/sr* . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 .4 .3 PATA Hard Disks: /dev/hd* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 .4 .4 Terminals: /dev/tty*, /dev/pts/*, and /dev/tty . . . . . . . . . . . . . . . 513 .4 .5 Serial Ports: /dev/ttyS* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 .4 .6 Parallel Ports: /dev/lp0 and /dev/lp1 . . . . . . . . . . . . . . . . . . . . . . 523 .4 .7 Audio Devices: /dev/snd/*, /dev/dsp, /dev/audio, and More . . . . 533 .4 .8 Creating Device Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3 .5 udev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 .5 .1 devtmpfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 .5 .2 udevd Operation and Configuration . . . . . . . . . . . . . . . . . . . . . . . 553 .5 .3 udevadm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 .5 .4 Monitoring Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

3 .6 In-Depth: SCSI and the Linux Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 .6 .1 USB Storage and SCSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 .6 .2 SCSI and ATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 .6 .3 Generic SCSI Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633 .6 .4 Multiple Access Methods for a Single Device . . . . . . . . . . . . . . . . . 63

4 disks and filesystems 654 .1 Partitioning Disk Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

4 .1 .1 Viewing a Partition Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 .1 .2 Changing Partition Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 .1 .3 Disk and Partition Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 .1 .4 Solid-State Disks (SSDs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4 .2 Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724 .2 .1 Filesystem Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 .2 .2 Creating a Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 .2 .3 Mounting a Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 .2 .4 Filesystem UUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 .2 .5 Disk Buffering, Caching, and Filesystems . . . . . . . . . . . . . . . . . . . . 774 .2 .6 Filesystem Mount Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 .2 .7 Remounting a Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 .2 .8 The /etc/fstab Filesystem Table . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 .2 .9 Alternatives to /etc/fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 .2 .10 Filesystem Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814 .2 .11 Checking and Repairing Filesystems . . . . . . . . . . . . . . . . . . . . . . . 824 .2 .12 Special-Purpose Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

4 .3 Swap Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854 .3 .1 Using a Disk Partition as Swap Space . . . . . . . . . . . . . . . . . . . . . . 854 .3 .2 Using a File as Swap Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854 .3 .3 How Much Swap Do You Need? . . . . . . . . . . . . . . . . . . . . . . . . . . 86

4 .4 Looking Forward: Disks and User Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864 .5 Inside a Traditional Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4 .5 .1 Viewing Inode Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 .5 .2 Working with Filesystems in User Space . . . . . . . . . . . . . . . . . . . . . 904 .5 .3 The Evolution of Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

x Contents in Detail

5 how the linux kernel Boots 935 .1 Startup Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945 .2 Kernel Initialization and Boot Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955 .3 Kernel Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965 .4 Boot Loaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

5 .4 .1 Boot Loader Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975 .4 .2 Boot Loader Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

5 .5 GRUB Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985 .5 .1 Exploring Devices and Partitions with the GRUB Command Line . . . 1005 .5 .2 GRUB Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025 .5 .3 GRUB Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

5 .6 UEFI Secure Boot Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065 .7 Chainloading Other Operating Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065 .8 Boot Loader Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5 .8 .1 MBR Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075 .8 .2 UEFI Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085 .8 .3 How GRUB Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

6 how user sPace starts 1116 .1 Introduction to init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 .2 System V Runlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 .3 Identifying Your init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146 .4 systemd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

6 .4 .1 Units and Unit Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146 .4 .2 systemd Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156 .4 .3 systemd Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176 .4 .4 systemd Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206 .4 .5 Adding Units to systemd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226 .4 .6 systemd Process Tracking and Synchronization . . . . . . . . . . . . . . . 1236 .4 .7 systemd On-Demand and Resource-Parallelized Startup . . . . . . . . . 1246 .4 .8 systemd System V Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . 1296 .4 .9 systemd Auxiliary Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

6 .5 Upstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 .5 .1 Upstart Initialization Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 .5 .2 Upstart Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316 .5 .3 Upstart Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336 .5 .4 Upstart Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376 .5 .5 Upstart Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386 .5 .6 Upstart Runlevels and System V Compatibility . . . . . . . . . . . . . . . . 138

6 .6 System V init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396 .6 .1 System V init: Startup Command Sequence . . . . . . . . . . . . . . . . . . 1416 .6 .2 The System V init Link Farm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 .6 .3 run-parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 .6 .4 Controlling System V init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

6 .7 Shutting Down Your System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446 .8 The Initial RAM Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1456 .9 Emergency Booting and Single-User Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Contents in Detail xi

7 system configuration: logging, system time, Batch JoBs, and users 1497 .1 The Structure of /etc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507 .2 System Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

7 .2 .1 The System Logger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517 .2 .2 Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

7 .3 User Management Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537 .3 .1 The /etc/passwd File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537 .3 .2 Special Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557 .3 .3 The /etc/shadow File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557 .3 .4 Manipulating Users and Passwords . . . . . . . . . . . . . . . . . . . . . . . 1557 .3 .5 Working with Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

7 .4 getty and login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577 .5 Setting the Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

7 .5 .1 Kernel Time Representation and Time Zones . . . . . . . . . . . . . . . . . 1587 .5 .2 Network Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

7 .6 Scheduling Recurring Tasks with cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 .6 .1 Installing Crontab Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607 .6 .2 System Crontab Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 .6 .3 The Future of cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

7 .7 Scheduling One-Time Tasks with at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 .8 Understanding User IDs and User Switching . . . . . . . . . . . . . . . . . . . . . . . . . . 162

7 .8 .1 Process Ownership, Effective UID, Real UID, and Saved UID . . . . . . 1627 .9 User Identification and Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

7 .9 .1 Using Libraries for User Information . . . . . . . . . . . . . . . . . . . . . . . 1647 .10 PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

7 .10 .1 PAM Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667 .10 .2 Notes on PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697 .10 .3 PAM and Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

7 .11 Looking Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

8 a closer look at Processes and resource utilization 1718 .1 Tracking Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728 .2 Finding Open Files with lsof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

8 .2 .1 Reading the lsof Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728 .2 .2 Using lsof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

8 .3 Tracing Program Execution and System Calls . . . . . . . . . . . . . . . . . . . . . . . . . 1748 .3 .1 strace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748 .3 .2 ltrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

8 .4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768 .4 .1 Single-Threaded and Multithreaded Processes . . . . . . . . . . . . . . . . 1768 .4 .2 Viewing Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

8 .5 Introduction to Resource Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788 .6 Measuring CPU Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788 .7 Adjusting Process Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

xii Contents in Detail

8 .8 Load Averages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1808 .8 .1 Using uptime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1808 .8 .2 High Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

8 .9 Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1818 .9 .1 How Memory Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1828 .9 .2 Page Faults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

8 .10 Monitoring CPU and Memory Performance with vmstat . . . . . . . . . . . . . . . . . . 1838 .11 I/O Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

8 .11 .1 Using iostat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1858 .11 .2 Per-Process I/O Utilization and Monitoring: iotop . . . . . . . . . . . . 186

8 .12 Per-Process Monitoring with pidstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1878 .13 Further Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

9 understanding your network and its configuration 1899 .1 Network Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

9 .1 .1 Packets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1909 .2 Network Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1919 .3 The Internet Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

9 .3 .1 Viewing Your Computer’s IP Addresses . . . . . . . . . . . . . . . . . . . . 1939 .3 .2 Subnets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1949 .3 .3 Common Subnet Masks and CIDR Notation . . . . . . . . . . . . . . . . . 195

9 .4 Routes and the Kernel Routing Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1959 .4 .1 The Default Gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

9 .5 Basic ICMP and DNS Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1979 .5 .1 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1979 .5 .2 traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1989 .5 .3 DNS and host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

9 .6 The Physical Layer and Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1999 .7 Understanding Kernel Network Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1999 .8 Introduction to Network Interface Configuration . . . . . . . . . . . . . . . . . . . . . . . . 200

9 .8 .1 Manually Adding and Deleting Routes . . . . . . . . . . . . . . . . . . . . . 2019 .9 Boot-Activated Network Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2029 .10 Problems with Manual and Boot-Activated Network Configuration . . . . . . . . . . 2029 .11 Network Configuration Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

9 .11 .1 NetworkManager Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . 2039 .11 .2 Interacting with NetworkManager . . . . . . . . . . . . . . . . . . . . . . . 2049 .11 .3 NetworkManager Configuration . . . . . . . . . . . . . . . . . . . . . . . . 204

9 .12 Resolving Hostnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2069 .12 .1 /etc/hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2079 .12 .2 resolv .conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2079 .12 .3 Caching and Zero-Configuration DNS . . . . . . . . . . . . . . . . . . . . 2089 .12 .4 /etc/nsswitch .conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

9 .13 Localhost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2099 .14 The Transport Layer: TCP, UDP, and Services . . . . . . . . . . . . . . . . . . . . . . . . 209

9 .14 .1 TCP Ports and Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2109 .14 .2 Establishing TCP Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 2109 .14 .3 Port Numbers and /etc/services . . . . . . . . . . . . . . . . . . . . . . . . 211

Contents in Detail xiii

9 .14 .4 Characteristics of TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2129 .14 .5 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

9 .15 Revisiting a Simple Local Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2149 .16 Understanding DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

9 .16 .1 The Linux DHCP Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2149 .16 .2 Linux DHCP Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

9 .17 Configuring Linux as a Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2159 .17 .1 Internet Uplinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

9 .18 Private Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2169 .19 Network Address Translation (IP Masquerading) . . . . . . . . . . . . . . . . . . . . . . 2179 .20 Routers and Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2189 .21 Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

9 .21 .1 Linux Firewall Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2209 .21 .2 Setting Firewall Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2219 .21 .3 Firewall Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

9 .22 Ethernet, IP, and ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2259 .23 Wireless Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

9 .23 .1 iw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2279 .23 .2 Wireless Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

9 .24 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

10 network aPPlications and services 22910 .1 The Basics of Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

10 .1 .1 A Closer Look . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23010 .2 Network Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23210 .3 Secure Shell (SSH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

10 .3 .1 The SSHD Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23410 .3 .2 The SSH Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

10 .4 The inetd and xinetd Daemons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23710 .4 .1 TCP Wrappers: tcpd, /etc/hosts .allow, and /etc/hosts .deny . . . . 238

10 .5 Diagnostic Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23810 .5 .1 lsof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23910 .5 .2 tcpdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24010 .5 .3 netcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24110 .5 .4 Port Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

10 .6 Remote Procedure Call (RPC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24310 .7 Network Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

10 .7 .1 Typical Vulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24410 .7 .2 Security Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

10 .8 Looking Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24510 .9 Sockets: How Processes Communicate with the Network . . . . . . . . . . . . . . . . . 24610 .10 Unix Domain Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

10 .10 .1 Advantages for Developers . . . . . . . . . . . . . . . . . . . . . . . . . . . 24710 .10 .2 Listing Unix Domain Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . 248

11 introduction to shell scriPts 24911 .1 Shell Script Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

11 .1 .1 Limitations of Shell Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

xiv Contents in Detail

11 .2 Quoting and Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25111 .2 .1 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25111 .2 .2 Single Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25211 .2 .3 Double Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25211 .2 .4 Passing a Literal Single Quote . . . . . . . . . . . . . . . . . . . . . . . . . . 253

11 .3 Special Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25311 .3 .1 Individual Arguments: $1, $2, … . . . . . . . . . . . . . . . . . . . . . . . 25411 .3 .2 Number of Arguments: $# . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25411 .3 .3 All Arguments: $@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25411 .3 .4 Script Name: $0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25511 .3 .5 Process ID: $$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25511 .3 .6 Exit Code: $? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

11 .4 Exit Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25511 .5 Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

11 .5 .1 Getting Around Empty Parameter Lists . . . . . . . . . . . . . . . . . . . . 25711 .5 .2 Using Other Commands for Tests . . . . . . . . . . . . . . . . . . . . . . . . 25711 .5 .3 elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25811 .5 .4 && and || Logical Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . 25811 .5 .5 Testing Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25811 .5 .6 Matching Strings with case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

11 .6 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26211 .6 .1 for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26211 .6 .2 while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

11 .7 Command Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26311 .8 Temporary File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26411 .9 Here Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26511 .10 Important Shell Script Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

11 .10 .1 basename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26511 .10 .2 awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26611 .10 .3 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26611 .10 .4 xargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26711 .10 .5 expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26811 .10 .6 exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

11 .11 Subshells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26811 .12 Including Other Files in Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26911 .13 Reading User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26911 .14 When (Not) to Use Shell Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

12 moving files across the network 27112 .1 Quick Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27212 .2 rsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

12 .2 .1 rsync Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27212 .2 .2 Making Exact Copies of a Directory Structure . . . . . . . . . . . . . . . 27312 .2 .3 Using the Trailing Slash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27412 .2 .4 Excluding Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . 27512 .2 .5 Transfer Integrity, Safeguards, and Verbose Modes . . . . . . . . . . . 27612 .2 .6 Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27712 .2 .7 Limiting Bandwidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27712 .2 .8 Transferring Files to Your Computer . . . . . . . . . . . . . . . . . . . . . . 27712 .2 .9 Further rsync Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Contents in Detail xv

12 .3 Introduction to File Sharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27812 .4 Sharing Files with Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

12 .4 .1 Configuring the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27912 .4 .2 Server Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27912 .4 .3 Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28012 .4 .4 Starting the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28212 .4 .5 Diagnostics and Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28212 .4 .6 Configuring a File Share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28212 .4 .7 Home Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28312 .4 .8 Sharing Printers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28312 .4 .9 Using the Samba Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28312 .4 .10 Accessing Files as a Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

12 .5 NFS Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28512 .6 Further Network File Service Options and Limitations . . . . . . . . . . . . . . . . . . . 286

13 user environments 28713 .1 Guidelines for Creating Startup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28813 .2 When to Alter Startup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28813 .3 Shell Startup File Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

13 .3 .1 The Command Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28913 .3 .2 The Manual Page Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29013 .3 .3 The Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29013 .3 .4 Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29013 .3 .5 The Permissions Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

13 .4 Startup File Order and Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29113 .4 .1 The bash Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29213 .4 .2 The tcsh Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

13 .5 Default User Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29513 .5 .1 Shell Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29513 .5 .2 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29513 .5 .3 Pager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

13 .6 Startup File Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29613 .7 Further Startup Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

14 a Brief survey of the linux desktoP 29714 .1 Desktop Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

14 .1 .1 Window Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29814 .1 .2 Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29914 .1 .3 Desktop Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29914 .1 .4 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

14 .2 A Closer Look at the X Window System . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29914 .2 .1 Display Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30014 .2 .2 Network Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

14 .3 Exploring X Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30114 .3 .1 X Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30114 .3 .2 Understanding X Input and Preference Settings . . . . . . . . . . . . . . 302

14 .4 The Future of X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

xvi Contents in Detail

14 .5 D-Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30514 .5 .1 System and Session Instances . . . . . . . . . . . . . . . . . . . . . . . . . . 30614 .5 .2 Monitoring D-Bus Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

14 .6 Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30714 .6 .1 CUPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30714 .6 .2 Format Conversion and Print Filters . . . . . . . . . . . . . . . . . . . . . . 308

14 .7 Other Desktop Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

15 develoPment tools 30915 .1 The C Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

15 .1 .1 Multiple Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31115 .1 .2 Header (Include) Files and Directories . . . . . . . . . . . . . . . . . . . . 31115 .1 .3 Linking with Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31315 .1 .4 Shared Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

15 .2 make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31815 .2 .1 A Sample Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31815 .2 .2 Built-in Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31915 .2 .3 Final Program Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31915 .2 .4 Staying Up-to-Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32015 .2 .5 Command-Line Arguments and Options . . . . . . . . . . . . . . . . . . . 32015 .2 .6 Standard Macros and Variables . . . . . . . . . . . . . . . . . . . . . . . . 32115 .2 .7 Conventional Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32215 .2 .8 Organizing a Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

15 .3 Debuggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32315 .4 Lex and Yacc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32415 .5 Scripting Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

15 .5 .1 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32615 .5 .2 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32615 .5 .3 Other Scripting Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

15 .6 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32715 .7 Looking Forward: Compiling Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

16 introduction to comPiling software from c source code 32916 .1 Software Build Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33016 .2 Unpacking C Source Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

16 .2 .1 Where to Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33116 .3 GNU Autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

16 .3 .1 An Autoconf Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33216 .3 .2 Installing Using a Packaging Tool . . . . . . . . . . . . . . . . . . . . . . . 33316 .3 .3 configure Script Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33416 .3 .4 Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33416 .3 .5 Autoconf Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33616 .3 .6 Autoconf Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33616 .3 .7 pkg-config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

16 .4 Installation Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33816 .4 .1 Where to Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Contents in Detail xvii

16 .5 Applying a Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33916 .6 Troubleshooting Compiles and Installations . . . . . . . . . . . . . . . . . . . . . . . . . . 340

16 .6 .1 Specific Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34016 .7 Looking Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

17 Building on the Basics 34517 .1 Web Servers and Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34617 .2 Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

17 .2 .1 Types of Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34717 .3 Virtualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34717 .4 Distributed and On-Demand Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . 34817 .5 Embedded Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34817 .6 Final Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

BiBliograPhy 351

index 355