Preface |
|
xxi | |
Who Should Read This Book? |
|
xxi | |
Prerequisites |
|
xxii | |
How to Read This Book |
|
xxii | |
A Hands-on Approach |
|
xxii | |
How This Book Is Organized |
|
xxii | |
What's New in the Third Edition? |
|
xxiii | |
A Note on Terminology |
|
xxiv | |
|
|
1 | (10) |
|
1.1 Levels and Layers of Abstraction in a Linux System |
|
|
2 | (2) |
|
1.2 Hardware: Understanding Main Memory |
|
|
4 | (1) |
|
|
4 | (4) |
|
|
5 | (1) |
|
|
6 | (1) |
|
1.3.3 Device Drivers and Management |
|
|
6 | (1) |
|
1.3.4 System Calls and Support |
|
|
7 | (1) |
|
|
8 | (1) |
|
|
9 | (1) |
|
|
10 | (1) |
|
2 Basic Commands And Directory Hierarchy |
|
|
11 | (36) |
|
2.1 The Bourne Shell:/bin/sh |
|
|
12 | (1) |
|
|
12 | (3) |
|
|
13 | (1) |
|
|
13 | (1) |
|
2.2.3 Standard Input and Standard Output |
|
|
14 | (1) |
|
|
15 | (1) |
|
|
15 | (1) |
|
|
15 | (1) |
|
|
16 | (1) |
|
|
16 | (1) |
|
|
16 | (1) |
|
|
16 | (1) |
|
2.4 Navigating Directories |
|
|
16 | (3) |
|
|
17 | (1) |
|
|
17 | (1) |
|
|
17 | (1) |
|
2.4.4 Shell Globbing ("Wildcards") |
|
|
18 | (1) |
|
2.5 Intermediate Commands |
|
|
19 | (3) |
|
|
19 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
21 | (1) |
|
|
21 | (1) |
|
|
21 | (1) |
|
|
22 | (1) |
|
2.6 Changing Your Password and Shell |
|
|
22 | (1) |
|
|
22 | (1) |
|
2.8 Environment and Shell Variables |
|
|
22 | (1) |
|
|
23 | (1) |
|
|
24 | (1) |
|
2.11 Command-Line Editing |
|
|
25 | (1) |
|
|
25 | (1) |
|
|
26 | (2) |
|
2.14 Shell Input and Output |
|
|
28 | (1) |
|
|
29 | (1) |
|
2.14.2 Standard Input Redirection |
|
|
29 | (1) |
|
2.15 Understanding Error Messages |
|
|
29 | (3) |
|
2.15.1 Anatomy of a Unix Error Message |
|
|
30 | (1) |
|
|
30 | (2) |
|
2.16 Listing and Manipulating Processes |
|
|
32 | (3) |
|
|
32 | (1) |
|
2.16.2 Process Termination |
|
|
33 | (1) |
|
|
34 | (1) |
|
2.16.4 Background Processes |
|
|
34 | (1) |
|
2.17 File Modes and Permissions |
|
|
35 | (4) |
|
2.17.1 Modifying Permissions |
|
|
36 | (2) |
|
2.17.2 Working with Symbolic Links |
|
|
38 | (1) |
|
2.18 Archiving and Compressing Files |
|
|
39 | (3) |
|
|
39 | (1) |
|
|
39 | (1) |
|
2.18.3 Compressed Archives (.tar.gz) |
|
|
40 | (1) |
|
|
41 | (1) |
|
2.18.5 Other Compression Utilities |
|
|
41 | (1) |
|
2.19 Linux Directory Hierarchy Essentials |
|
|
42 | (2) |
|
2.19.1 Other Root Subdirectories |
|
|
43 | (1) |
|
2.19.2 The /usr Directory |
|
|
44 | (1) |
|
|
44 | (1) |
|
2.20 Running Commands as the Superuser |
|
|
44 | (2) |
|
|
45 | (1) |
|
|
45 | (1) |
|
|
46 | (1) |
|
|
46 | (1) |
|
|
47 | (22) |
|
|
48 | (1) |
|
3.2 The sysfs Device Path |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (5) |
|
3.4.1 Hard Disks:/dev/sd* |
|
|
52 | (1) |
|
3.4.2 Virtual Disks:/dev/xvd*,/dev/vd* |
|
|
53 | (1) |
|
3.4.3 Non-Volatile Memory Devices:/dev/nvme* |
|
|
53 | (1) |
|
3.4.4 Device Mapper:/dev/dm-*,/dev/mapper/* |
|
|
53 | (1) |
|
3.4.5 CD and DVD Drives: /dev/sr* |
|
|
53 | (1) |
|
3.4.6 PATA Hard Disks: /dev/hd* |
|
|
53 | (1) |
|
3.4.7 Terminals: /dev/tty*, /dev/pts/*, and /dev/tty |
|
|
53 | (2) |
|
3.4.8 Serial Ports:/dev/ttyS*,/dev/ttyUSB*,/dev/ttyACM* |
|
|
55 | (1) |
|
3.4.9 Parallel Ports: /dev/Ip0 and /dev/lpl |
|
|
55 | (1) |
|
3.4.10 Audio Devices: /dev/snd/*, /dev/dsp, /dev/audio, and More |
|
|
55 | (1) |
|
3.4.11 Device File Creation |
|
|
56 | (1) |
|
|
56 | (6) |
|
|
57 | (1) |
|
3.5.2 Udevd Operation and Configuration |
|
|
58 | (2) |
|
|
60 | (1) |
|
|
61 | (1) |
|
3.6 In-Depth: SCSI and the Linux Kernel |
|
|
62 | (7) |
|
3.6.1 USB Storage and SCSI |
|
|
65 | (1) |
|
|
65 | (1) |
|
3.6.3 Generic SCSI Devices |
|
|
66 | (1) |
|
3.6.4 Multiple Access Methods for a Single Device |
|
|
67 | (2) |
|
|
69 | (48) |
|
4.1 Partitioning Disk Devices |
|
|
72 | (8) |
|
4.1.1 Viewing a Partition Table |
|
|
72 | (3) |
|
4.1.2 Modifying Partition Tables |
|
|
75 | (1) |
|
4.1.3 Creating a Partition Table |
|
|
76 | (2) |
|
4.1.4 Navigating Disk and Partition Geometry |
|
|
78 | (2) |
|
4.1.5 Reading from Solid-State Disks |
|
|
80 | (1) |
|
|
80 | (14) |
|
|
81 | (1) |
|
4.2.2 Creating a Filesystem |
|
|
82 | (1) |
|
4.2.3 Mounting a Filesystem |
|
|
83 | (2) |
|
|
85 | (1) |
|
4.2.5 Disk Buffering, Caching, and Filesystems |
|
|
86 | (1) |
|
4.2.6 Filesystem Mount Options |
|
|
86 | (1) |
|
4.2.7 Remounting a Filesystem |
|
|
87 | (1) |
|
4.2.8 The /etc/fstab Filesystem Table |
|
|
88 | (1) |
|
4.2.9 Alternatives to /etc/fstab |
|
|
89 | (1) |
|
4.2.10 Filesystem Capacity X |
|
|
89 | (2) |
|
4.2.11 Checking and Repairing Filesystems |
|
|
91 | (2) |
|
4.2.12 Special-Purpose Filesystems |
|
|
93 | (1) |
|
|
94 | (2) |
|
4.3.1 Using a Disk Partition as Swap Space |
|
|
94 | (1) |
|
4.3.2 Using a File as Swap Space |
|
|
95 | (1) |
|
4.3.3 Determining How Much Swap You Need |
|
|
95 | (1) |
|
4.4 The Logical Volume Manager |
|
|
96 | (1) |
|
|
97 | (10) |
|
4.4.3 The LVM Implementation |
|
|
107 | (4) |
|
4.5 Looking Forward: Disks and User Space |
|
|
111 | (1) |
|
4.6 Inside a Traditional Filesystem |
|
|
111 | (2) |
|
4.6.1 Inode Details and the Link Count |
|
|
113 | (1) |
|
|
114 | (1) |
|
4.6.3 Working with Filesystems in User Space |
|
|
115 | (2) |
|
5 How The Linux Kernel Boots |
|
|
117 | (20) |
|
|
118 | (1) |
|
5.2 Kernel Initialization and Boot Options V |
|
|
119 | (1) |
|
|
120 | (1) |
|
|
121 | (2) |
|
|
122 | (1) |
|
5.4.2 Boot Loader Overview |
|
|
123 | (1) |
|
|
123 | (8) |
|
5.5.1 Exploring Devices and Partitions with the GRUB Command Line |
|
|
125 | (2) |
|
|
127 | (3) |
|
|
130 | (1) |
|
5.6 UEFI Secure Boot Problems |
|
|
131 | (1) |
|
5.7 Chainloading Other Operating Systems |
|
|
132 | (1) |
|
|
132 | (5) |
|
|
133 | (1) |
|
|
133 | (1) |
|
|
134 | (3) |
|
|
137 | (30) |
|
|
138 | (1) |
|
6.2 Identifying Your init |
|
|
139 | (1) |
|
|
139 | (17) |
|
6.3.1 Units and Unit Types |
|
|
140 | (1) |
|
6.3.2 Booting and Unit Dependency Graphs |
|
|
140 | (1) |
|
6.3.3 Systemd Configuration |
|
|
141 | (3) |
|
|
144 | (3) |
|
6.3.5 Systemd Process Tracking and Synchronization |
|
|
147 | (1) |
|
6.3.6 Systemd Dependencies |
|
|
148 | (3) |
|
6.3.7 Systemd On-Demand and Resource-Parallelized Startup |
|
|
151 | (5) |
|
6.3.8 Systemd Auxiliary Components |
|
|
156 | (1) |
|
|
156 | (1) |
|
|
157 | (5) |
|
6.5.1 System V init: Startup Command Sequence |
|
|
158 | (1) |
|
6.5.2 The System V init Link Farm |
|
|
159 | (1) |
|
|
160 | (1) |
|
6.5.4 System V init Control |
|
|
161 | (1) |
|
6.5.5 Systemd System V Compatibility |
|
|
161 | (1) |
|
6.6 Shutting Down Your System |
|
|
162 | (1) |
|
6.7 The Initial RAM Filesystem |
|
|
163 | (1) |
|
6.8 Emergency Booting and Single-User Mode |
|
|
164 | (1) |
|
|
165 | (2) |
|
7 System Configuration: Logging, System Time, Batch Jobs, And Users |
|
|
167 | (32) |
|
|
168 | (8) |
|
7.1.1 Checking Your Log Setup |
|
|
169 | (1) |
|
7.1.2 Searching and Monitoring Logs |
|
|
169 | (3) |
|
|
172 | (1) |
|
7.1.4 Journal Maintenance |
|
|
173 | (1) |
|
7.1.5 A Closer Look at System Logging |
|
|
173 | (3) |
|
|
176 | (1) |
|
7.3 User Management Files |
|
|
177 | (4) |
|
7.3.1 The/etc/passwd File |
|
|
177 | (1) |
|
|
178 | (1) |
|
7.3.3 The/etc/shadow File |
|
|
179 | (1) |
|
7.3.4 Manipulating Users and Passwords |
|
|
179 | (1) |
|
7.3.5 Working with Groups |
|
|
180 | (1) |
|
|
181 | (1) |
|
|
181 | (2) |
|
7.5.1 Kernel Time Representation and Time Zones |
|
|
182 | (1) |
|
|
182 | (1) |
|
7.6 Scheduling Recurring Tasks with cron and Timer Units |
|
|
183 | (4) |
|
7.6.1 Installing Crontab Files 1 |
|
|
84 | (101) |
|
7.6.2 System Crontab Files |
|
|
185 | (1) |
|
|
185 | (2) |
|
7.6.4 Cron vs. Timer Units |
|
|
187 | (1) |
|
7.7 Scheduling One-Time Tasks with at |
|
|
187 | (1) |
|
7.7.1 Timer Unit Equivalents |
|
|
188 | (1) |
|
7.8 Timer Units Running as Regular Users |
|
|
188 | (1) |
|
|
189 | (3) |
|
7.9.1 User IDs and User Switching |
|
|
189 | (1) |
|
7.9.2 Process Ownership, Effective UID, Real UID, and Saved UID |
|
|
189 | (2) |
|
7.9.3 User Identification, Authentication, and Authorization |
|
|
191 | (1) |
|
7.9.4 Using Libraries for User Information |
|
|
192 | (1) |
|
7.10 Pluggable Authentication Modules |
|
|
192 | (6) |
|
|
193 | (3) |
|
7.10.2 Tips on PAM Configuration Syntax |
|
|
196 | (1) |
|
|
197 | (1) |
|
|
198 | (1) |
|
8 A Closer Look At Processes And Resource Utilization |
|
|
199 | (24) |
|
|
200 | (1) |
|
8.2 Finding Open Files with Isof |
|
|
200 | (2) |
|
8.2.1 Reading the Isof Output |
|
|
201 | (1) |
|
|
202 | (1) |
|
8.3 Tracing Program Execution and System Calls |
|
|
202 | (2) |
|
|
202 | (2) |
|
|
204 | (1) |
|
|
204 | (2) |
|
8.4.1 Single-Threaded and Multithreaded Processes |
|
|
204 | (1) |
|
|
205 | (1) |
|
8.5 Introduction to Resource Monitoring |
|
|
206 | (10) |
|
|
207 | (1) |
|
8.5.2 Adjusting Process Priorities |
|
|
207 | (1) |
|
8.5.3 Measuring CPU Performance with Load Averages |
|
|
208 | (2) |
|
8.5.4 Monitoring Memory Status |
|
|
210 | (2) |
|
8.5.5 Monitoring CPU and Memory Performance with vmstat |
|
|
212 | (2) |
|
|
214 | (2) |
|
8.5.7 Per-Process Monitoring with pidstat |
|
|
216 | (1) |
|
8.6 Control Groups (cgroups) |
|
|
216 | (5) |
|
8.6.1 Differentiating Between cgroup Versions |
|
|
217 | (2) |
|
|
219 | (1) |
|
8.6.3 Manipulating and Creating cgroups |
|
|
220 | (1) |
|
8.6.4 Viewing Resource Utilization |
|
|
221 | (1) |
|
|
221 | (2) |
|
9 Understanding Your Network And Its Configuration |
|
|
223 | (46) |
|
|
224 | (1) |
|
|
224 | (1) |
|
|
225 | (1) |
|
|
226 | (4) |
|
9.4.1 Viewing IP Addresses |
|
|
228 | (1) |
|
|
228 | (1) |
|
9.4.3 Common Subnet Masks and CIDR Notation |
|
|
229 | (1) |
|
9.5 Routes and the Kernel Routing Table |
|
|
230 | (1) |
|
|
231 | (1) |
|
9.7 IPv6 Addresses and Networks |
|
|
231 | (3) |
|
9.7.1 Viewing IPv6 Configuration on Your System |
|
|
232 | (1) |
|
9.7.2 Configuring Dual-Stack Networks |
|
|
233 | (1) |
|
9.8 Basic ICMP and DNS Tools |
|
|
234 | (1) |
|
|
234 | (1) |
|
|
235 | (1) |
|
9.9 The Physical Layer and Ethernet |
|
|
235 | (1) |
|
9.10 Understanding Kernel Network Interfaces |
|
|
236 | (1) |
|
9.11 Introduction to Network Interface Configuration |
|
|
237 | (2) |
|
9.11.1 Manually Configuring Interfaces |
|
|
237 | (1) |
|
9.11.2 Manually Adding and Deleting Routes |
|
|
238 | (1) |
|
9.12 Boot-Activated Network Configuration |
|
|
239 | (1) |
|
9.13 Problems with Manual and Boot-Activated Network Configuration |
|
|
239 | (1) |
|
9.14 Network Configuration Managers |
|
|
240 | (3) |
|
9.14.1 NetworkManager Operation |
|
|
241 | (1) |
|
9.14.2 NetworkManager Interaction |
|
|
241 | (1) |
|
9.14.3 NetworkManager Configuration |
|
|
242 | (1) |
|
|
243 | (4) |
|
|
244 | (1) |
|
|
245 | (1) |
|
9.15.3 Caching and Zero-Configuration DNS |
|
|
245 | (1) |
|
9.15.4 /etc/nsswitch.conf |
|
|
246 | (1) |
|
|
247 | (1) |
|
9.17 The Transport Layer: TCP, UDP, and Services |
|
|
247 | (5) |
|
9.17.1 TCP Ports and Connections |
|
|
248 | (2) |
|
|
250 | (2) |
|
9.18 Revisiting a Simple Local Network |
|
|
252 | (1) |
|
|
252 | (1) |
|
9.19.1 Linux DHCP Clients |
|
|
253 | (1) |
|
9.19.2 Linux DHCP Servers |
|
|
253 | (1) |
|
9.20 Automatic IPv6 Network Configuration |
|
|
253 | (1) |
|
9.21 Configuring Linux as a Router |
|
|
254 | (2) |
|
9.22 Private Networks (IPv4) |
|
|
256 | (1) |
|
9.23 Network Address Translation (IP Masquerading) |
|
|
256 | (2) |
|
|
258 | (1) |
|
|
259 | (5) |
|
9.25.1 Linux Firewall Basics |
|
|
259 | (2) |
|
9.25.2 Setting Firewall Rules |
|
|
261 | (1) |
|
9.25.3 Firewall Strategies |
|
|
262 | (2) |
|
9.26 Ethernet, IP, ARP, and NDP |
|
|
264 | (2) |
|
|
266 | (2) |
|
|
267 | (1) |
|
|
268 | (1) |
|
|
268 | (1) |
|
10 Network Applications And Services |
|
|
269 | (22) |
|
10.1 The Basics of Services |
|
|
270 | (1) |
|
|
271 | (1) |
|
|
272 | (6) |
|
|
273 | (1) |
|
|
274 | (2) |
|
|
276 | (1) |
|
|
277 | (1) |
|
10.4 Pre-systemd Network Connection Servers: inetd/xinetd |
|
|
278 | (1) |
|
|
279 | (5) |
|
|
280 | (1) |
|
|
281 | (2) |
|
|
283 | (1) |
|
|
284 | (1) |
|
10.6 Remote Procedure Calls |
|
|
284 | (1) |
|
|
285 | (2) |
|
10.7.1 Typical Vulnerabilities |
|
|
286 | (1) |
|
10.7.2 Security Resources |
|
|
287 | (1) |
|
|
287 | (1) |
|
|
288 | (1) |
|
10.10 Unix Domain Sockets |
|
|
289 | (2) |
|
11 Introduction To Shell Scripts |
|
|
291 | (24) |
|
|
291 | (2) |
|
11.1.1 Limitations of Shell Scripts |
|
|
292 | (1) |
|
11.2 Quoting and Literals |
|
|
293 | (3) |
|
|
293 | (1) |
|
|
294 | (1) |
|
|
295 | (1) |
|
11.2.4 Literal Single Quotes |
|
|
295 | (1) |
|
|
296 | (2) |
|
11.3.1 Individual Arguments: $1, $2, and So On |
|
|
296 | (1) |
|
11.3.2 Number of Arguments: $# |
|
|
297 | (1) |
|
|
297 | (1) |
|
|
297 | (1) |
|
|
298 | (1) |
|
|
298 | (1) |
|
|
298 | (1) |
|
|
299 | (6) |
|
11.5.1 A Workaround for Empty Parameter Lists |
|
|
299 | (1) |
|
11.5.2 Other Commands for Tests |
|
|
300 | (1) |
|
|
300 | (1) |
|
11.5.4 Logical Constructs |
|
|
300 | (1) |
|
11.5.5 Testing Conditions |
|
|
301 | (3) |
|
|
304 | (1) |
|
|
305 | (1) |
|
|
305 | (1) |
|
|
305 | (1) |
|
11.7 Command Substitution |
|
|
306 | (1) |
|
11.8 Temporary File Management |
|
|
307 | (1) |
|
|
308 | (1) |
|
11.10 Important Shell Script Utilities |
|
|
308 | (3) |
|
|
308 | (1) |
|
|
309 | (1) |
|
|
309 | (1) |
|
|
310 | (1) |
|
|
311 | (1) |
|
|
311 | (1) |
|
|
311 | (1) |
|
11.12 Including Other Files in Scripts |
|
|
312 | (1) |
|
|
312 | (1) |
|
11.14 When (Not) to Use Shell Scripts |
|
|
312 | (3) |
|
12 Network File Transfer And Sharing |
|
|
315 | (20) |
|
|
316 | (1) |
|
|
317 | (6) |
|
12.2.1 Getting Started with rsync |
|
|
317 | (1) |
|
12.2.2 Making Exact Copies of a Directory Structure |
|
|
318 | (1) |
|
12.2.3 Using the Trailing Slash |
|
|
319 | (1) |
|
12.2.4 Excluding Files and Directories |
|
|
320 | (1) |
|
12.2.5 Checking Transfers, Adding Safeguards, and Using Verbose Mode |
|
|
321 | (1) |
|
|
321 | (1) |
|
12.2.7 Limiting Bandwidth |
|
|
322 | (1) |
|
12.2.8 Transferring Files to Your Computer |
|
|
322 | (1) |
|
12.2.9 Further rsync Topics |
|
|
322 | (1) |
|
12.3 Introduction to File Snaring |
|
|
323 | (1) |
|
12.3.1 File Sharing Usage and Performance |
|
|
323 | (1) |
|
12.3.2 File Sharing Security |
|
|
323 | (1) |
|
12.4 Sharing Files with Samba |
|
|
324 | (7) |
|
12.4.1 Server Configuration |
|
|
324 | (1) |
|
12.4.2 Server Access Control |
|
|
325 | (1) |
|
|
326 | (1) |
|
12.4.4 Manual Server Startup |
|
|
327 | (1) |
|
12.4.5 Diagnostics and Logfiles |
|
|
328 | (1) |
|
12.4.6 File Share Configuration |
|
|
328 | (1) |
|
|
328 | (1) |
|
|
329 | (1) |
|
|
329 | (2) |
|
|
331 | (1) |
|
|
332 | (1) |
|
|
333 | (1) |
|
12.8 The State of Network File Sharing |
|
|
333 | (2) |
|
|
335 | (12) |
|
13.1 Guidelines for Creating Startup Files |
|
|
336 | (1) |
|
13.2 When to Alter Startup Files |
|
|
336 | (1) |
|
13.3 Shell Startup File Elements |
|
|
337 | (3) |
|
|
337 | (1) |
|
13.3.2 The Manual Page Path |
|
|
338 | (1) |
|
|
338 | (1) |
|
|
339 | (1) |
|
13.3.5 The Permissions Mask |
|
|
339 | (1) |
|
13.4 Startup File Order and Examples |
|
|
340 | (3) |
|
|
340 | (2) |
|
|
342 | (1) |
|
13.5 Default User Settings |
|
|
343 | (1) |
|
|
343 | (1) |
|
|
344 | (1) |
|
|
344 | (1) |
|
13.6 Startup File Pitfalls |
|
|
344 | (1) |
|
13.7 Further Startup Topics |
|
|
345 | (2) |
|
14 A Brief Survey Of The Linux Desktop And Printing |
|
|
347 | (16) |
|
|
348 | (3) |
|
|
348 | (1) |
|
14.1.2 The X Window System |
|
|
348 | (1) |
|
|
349 | (1) |
|
|
349 | (1) |
|
|
350 | (1) |
|
14.1.6 Desktop Environments |
|
|
350 | (1) |
|
|
350 | (1) |
|
14.2 Are You Running Wayland or X? |
|
|
351 | (1) |
|
14.3 A Closer Look at Wayland |
|
|
351 | (3) |
|
14.3.1 The Compositing Window Manager |
|
|
351 | (1) |
|
|
352 | (1) |
|
14.3.3 X Compatibility in Wayland |
|
|
353 | (1) |
|
14.4 A Closer Look at the X Window System |
|
|
354 | (5) |
|
|
355 | (1) |
|
14.4.2 Network Transparency |
|
|
355 | (1) |
|
14.4.3 Ways of Exploring X Clients |
|
|
355 | (1) |
|
|
356 | (1) |
|
14.4.5 X Input and Preference Settings |
|
|
357 | (2) |
|
|
359 | (1) |
|
14.5.1 System and Session Instances |
|
|
360 | (1) |
|
14.5.2 D-Bus Message Monitoring |
|
|
360 | (1) |
|
|
360 | (2) |
|
|
361 | (1) |
|
14.6.2 Format Conversion and Print Filters |
|
|
361 | (1) |
|
14.7 Other Desktop Topics |
|
|
362 | (1) |
|
|
363 | (22) |
|
|
364 | (9) |
|
15.1.1 Compiling Multiple Source Files |
|
|
365 | (1) |
|
15.1.2 Linking with Libraries |
|
|
366 | (1) |
|
15.1.3 Working with Shared Libraries |
|
|
367 | (4) |
|
15.1.4 Working with Header (Include) Files and Directories |
|
|
371 | (2) |
|
|
373 | (6) |
|
|
374 | (1) |
|
|
374 | (1) |
|
15.2.3 Final Program Build |
|
|
375 | (1) |
|
15.2.4 Dependency Updates |
|
|
375 | (1) |
|
15.2.5 Command-Line Arguments and Options |
|
|
376 | (1) |
|
15.2.6 Standard Macros and Variables |
|
|
377 | (1) |
|
15.2.7 Conventional Targets |
|
|
378 | (1) |
|
15.2.8 Makefile Organization |
|
|
378 | (1) |
|
|
379 | (1) |
|
|
380 | (2) |
|
|
381 | (1) |
|
|
381 | (1) |
|
15.4.3 Other Scripting Languages |
|
|
381 | (1) |
|
|
382 | (1) |
|
15.6 Looking Forward: Compiling Packages |
|
|
383 | (2) |
|
16 Introduction To Compiling Software From C Source Code |
|
|
385 | (16) |
|
16.1 Software Build Systems |
|
|
386 | (1) |
|
16.2 Unpacking C Source Packages |
|
|
387 | (1) |
|
|
388 | (6) |
|
16.3.1 An Autoconf Example |
|
|
389 | (1) |
|
16.3.2 Installation Using a Packaging Tool |
|
|
390 | (1) |
|
16.3.3 Configure Script Options |
|
|
390 | (1) |
|
16.3.4 Environment Variables |
|
|
391 | (1) |
|
|
392 | (1) |
|
|
392 | (1) |
|
|
393 | (1) |
|
16.4 Installation Practice |
|
|
394 | (1) |
|
|
395 | (1) |
|
|
395 | (1) |
|
16.6 Troubleshooting Compiles and Installations |
|
|
396 | (3) |
|
|
397 | (2) |
|
|
399 | (2) |
|
|
401 | (18) |
|
|
402 | (3) |
|
|
402 | (1) |
|
17.1.2 Hardware in a Virtual Machine |
|
|
403 | (1) |
|
17.1.3 Common Uses of Virtual Machines |
|
|
404 | (1) |
|
17.1.4 Drawbacks of Virtual Machines |
|
|
404 | (1) |
|
|
405 | (12) |
|
17.2.1 Docker, Podman, and Privileges |
|
|
406 | (1) |
|
|
407 | (7) |
|
|
414 | (1) |
|
|
415 | (1) |
|
17.2.5 Pitfalls of Containers |
|
|
415 | (2) |
|
17.3 Runtime-Based Virtualization |
|
|
417 | (2) |
Bibliography |
|
419 | (4) |
Index |
|
423 | |