Transcript

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


Recommended