Introduction |
|
xxi | |
|
|
xliv | |
|
Answers to Assessment Test |
|
|
lv | |
Part I Gathering Your Tools |
|
1 | (130) |
|
Chapter 1 Preparing Your Environment |
|
|
3 | (14) |
|
Setting Up a Learning Space |
|
|
4 | (4) |
|
|
4 | (1) |
|
Creating a Virtualized Environment |
|
|
5 | (2) |
|
|
7 | (1) |
|
Exploring Linux Distributions |
|
|
8 | (6) |
|
Looking at Red Hat Enterprise Linux |
|
|
9 | (1) |
|
|
10 | (1) |
|
|
11 | (1) |
|
|
12 | (2) |
|
|
14 | (1) |
|
|
15 | (2) |
|
Chapter 2 Introduction to Services |
|
|
17 | (26) |
|
|
18 | (4) |
|
|
19 | (1) |
|
|
20 | (2) |
|
|
22 | (5) |
|
|
22 | (1) |
|
|
23 | (2) |
|
|
25 | (2) |
|
|
27 | (4) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
29 | (2) |
|
|
31 | (4) |
|
|
31 | (2) |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
35 | (1) |
|
|
35 | (1) |
|
|
35 | (1) |
|
|
35 | (1) |
|
|
36 | (1) |
|
|
37 | (1) |
|
|
38 | (5) |
|
Chapter 3 Managing Files, Directories, and Text |
|
|
43 | (46) |
|
Handling Files and Directories |
|
|
44 | (16) |
|
Viewing and Creating Files |
|
|
44 | (6) |
|
|
50 | (6) |
|
|
56 | (4) |
|
Linking Files and Directories |
|
|
60 | (3) |
|
|
60 | (2) |
|
|
62 | (1) |
|
|
63 | (8) |
|
Reading Entire Text Files |
|
|
64 | (2) |
|
Reading Text File Portions |
|
|
66 | (4) |
|
|
70 | (1) |
|
|
71 | (11) |
|
|
72 | (1) |
|
Exploring File Differences |
|
|
72 | (3) |
|
Using Simple Pinpoint Commands |
|
|
75 | (4) |
|
Using Intricate Pinpoint Commands |
|
|
79 | (3) |
|
|
82 | (1) |
|
|
83 | (1) |
|
|
84 | (5) |
|
Chapter 4 Searching and Analyzing Text |
|
|
89 | (42) |
|
|
90 | (11) |
|
|
90 | (5) |
|
|
95 | (4) |
|
|
99 | (2) |
|
Redirecting Input and Output |
|
|
101 | (10) |
|
|
101 | (1) |
|
Redirecting Standard Error |
|
|
102 | (2) |
|
Regulating Standard Input |
|
|
104 | (2) |
|
|
106 | (2) |
|
|
108 | (1) |
|
|
109 | (2) |
|
|
111 | (12) |
|
Appreciating Text Editors |
|
|
111 | (5) |
|
Learning about Stream Editors |
|
|
116 | (7) |
|
|
123 | (1) |
|
|
124 | (1) |
|
|
125 | (6) |
Part II Starting Up and Configuring Your System |
|
131 | (158) |
|
Chapter 5 Explaining the Boot Process |
|
|
133 | (24) |
|
|
134 | (2) |
|
Following the Boot Process |
|
|
134 | (1) |
|
|
135 | (1) |
|
|
136 | (2) |
|
|
136 | (1) |
|
|
137 | (1) |
|
|
138 | (8) |
|
|
139 | (4) |
|
|
143 | (2) |
|
|
145 | (1) |
|
|
146 | (4) |
|
|
146 | (2) |
|
|
148 | (2) |
|
|
150 | (1) |
|
|
150 | (2) |
|
|
152 | (5) |
|
Chapter 6 Maintaining System Startup and Services |
|
|
157 | (42) |
|
|
158 | (1) |
|
|
159 | (19) |
|
|
160 | (2) |
|
Focusing on Service Unit Files |
|
|
162 | (5) |
|
Focusing on Target Unit Files |
|
|
167 | (1) |
|
|
168 | (4) |
|
Examining Special systemd Commands |
|
|
172 | (6) |
|
Managing SysV init Systems |
|
|
178 | (9) |
|
|
178 | (4) |
|
Investigating SysV init Commands |
|
|
182 | (5) |
|
Digging Deeper into systemd |
|
|
187 | (4) |
|
Looking at systemd Mount Units |
|
|
187 | (2) |
|
Exploring Automount Units |
|
|
189 | (1) |
|
Focusing on Timer Unit Files |
|
|
190 | (1) |
|
|
191 | (1) |
|
|
191 | (3) |
|
|
194 | (5) |
|
Chapter 7 Configuring Network Connections |
|
|
199 | (36) |
|
Configuring Network Features |
|
|
200 | (14) |
|
Network Configuration Files |
|
|
201 | (2) |
|
|
203 | (2) |
|
|
205 | (9) |
|
Command-Line Networking Tool |
|
|
214 | (3) |
|
Basic Network Troubleshooting |
|
|
217 | (5) |
|
|
217 | (2) |
|
|
219 | (3) |
|
Advanced Network Troubleshooting |
|
|
222 | (6) |
|
|
222 | (4) |
|
|
226 | (1) |
|
|
226 | (2) |
|
|
228 | (1) |
|
|
229 | (2) |
|
|
231 | (4) |
|
|
235 | (34) |
|
|
236 | (11) |
|
|
237 | (2) |
|
|
239 | (2) |
|
|
241 | (2) |
|
Making Acquaintance with MATE |
|
|
243 | (2) |
|
|
245 | (2) |
|
|
247 | (5) |
|
|
248 | (2) |
|
|
250 | (2) |
|
|
252 | (5) |
|
|
252 | (2) |
|
|
254 | (2) |
|
|
256 | (1) |
|
|
257 | (1) |
|
|
257 | (5) |
|
|
259 | (1) |
|
|
260 | (1) |
|
Tunneling Your X11 Connection |
|
|
261 | (1) |
|
|
262 | (1) |
|
|
262 | (2) |
|
|
264 | (5) |
|
Chapter 9 Adjusting Localization Options |
|
|
269 | (20) |
|
Understanding Localization |
|
|
270 | (2) |
|
|
270 | (1) |
|
|
271 | (1) |
|
|
272 | (3) |
|
Installation Locale Decisions |
|
|
272 | (1) |
|
|
272 | (3) |
|
|
275 | (6) |
|
|
275 | (1) |
|
Setting the Time and Date |
|
|
276 | (4) |
|
|
280 | (1) |
|
|
281 | (1) |
|
|
282 | (2) |
|
|
284 | (5) |
Part III Managing Your System |
|
289 | (148) |
|
Chapter 10 Administering Users and Groups |
|
|
291 | (38) |
|
|
292 | (17) |
|
|
292 | (12) |
|
|
304 | (2) |
|
|
306 | (2) |
|
|
308 | (1) |
|
|
309 | (4) |
|
Setting Up the Environment |
|
|
313 | (3) |
|
|
313 | (1) |
|
Understanding User Entries |
|
|
314 | (2) |
|
|
316 | (1) |
|
|
316 | (4) |
|
Exploring the whoami Utility |
|
|
316 | (1) |
|
Understanding the who Utility |
|
|
317 | (1) |
|
Identifying with the id Program |
|
|
318 | (1) |
|
Displaying Access History with the last Utility |
|
|
319 | (1) |
|
Managing Disk Space Usage |
|
|
320 | (3) |
|
|
323 | (1) |
|
|
324 | (1) |
|
|
325 | (4) |
|
Chapter 11 Handling Storage |
|
|
329 | (34) |
|
|
330 | (2) |
|
|
330 | (1) |
|
|
331 | (1) |
|
Automatic Drive Detection |
|
|
331 | (1) |
|
|
332 | (5) |
|
|
332 | (2) |
|
|
334 | (2) |
|
|
336 | (1) |
|
|
337 | (1) |
|
Understanding Filesystems |
|
|
337 | (4) |
|
|
338 | (3) |
|
Maneuvering around the Filesystem |
|
|
341 | (1) |
|
|
341 | (3) |
|
|
341 | (2) |
|
|
343 | (1) |
|
|
344 | (2) |
|
Manually Mounting Devices |
|
|
344 | (1) |
|
Automatically Mounting Devices |
|
|
345 | (1) |
|
|
346 | (3) |
|
Retrieving Filesystem Stats |
|
|
346 | (2) |
|
|
348 | (1) |
|
|
349 | (9) |
|
|
350 | (1) |
|
|
350 | (4) |
|
|
354 | (1) |
|
|
355 | (3) |
|
|
358 | (1) |
|
|
358 | (2) |
|
|
360 | (3) |
|
Chapter 12 Protecting Files |
|
|
363 | (30) |
|
Understanding Backup Types |
|
|
364 | (2) |
|
Looking at Compression Methods |
|
|
366 | (2) |
|
Comparing Archive and Restore Utilities |
|
|
368 | (14) |
|
|
369 | (3) |
|
|
372 | (5) |
|
|
377 | (3) |
|
|
380 | (2) |
|
Securing Offsite/Off-System Backups |
|
|
382 | (5) |
|
|
382 | (2) |
|
Transferring Securely via sftp |
|
|
384 | (3) |
|
Checking Backup Integrity |
|
|
387 | (2) |
|
Digesting an MD5 Algorithm |
|
|
387 | (1) |
|
|
388 | (1) |
|
|
389 | (1) |
|
|
389 | (1) |
|
|
390 | (3) |
|
Chapter 13 Governing Software |
|
|
393 | (30) |
|
|
394 | (6) |
|
|
394 | (1) |
|
Bundling Source Code Packages |
|
|
395 | (4) |
|
|
399 | (1) |
|
|
400 | (13) |
|
Installing and Managing Packages |
|
|
401 | (4) |
|
Understanding Repositories |
|
|
405 | (8) |
|
Using Application Containers |
|
|
413 | (5) |
|
|
414 | (2) |
|
|
416 | (2) |
|
|
418 | (1) |
|
|
419 | (2) |
|
|
421 | (2) |
|
Chapter 14 Tending Kernel Modules |
|
|
423 | (14) |
|
|
424 | (4) |
|
Installing Kernel Modules |
|
|
428 | (3) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
432 | (2) |
|
|
434 | (3) |
Part IV Securing Your System |
|
437 | (134) |
|
Chapter 15 Applying Ownership and Permissions |
|
|
439 | (30) |
|
Looking at File and Directory Permissions |
|
|
440 | (8) |
|
|
440 | (2) |
|
Controlling Access Permissions |
|
|
442 | (3) |
|
Exploring Special Permissions |
|
|
445 | (1) |
|
Managing Default Permissions |
|
|
446 | (2) |
|
|
448 | (2) |
|
Context-Based Permissions |
|
|
450 | (7) |
|
|
451 | (4) |
|
|
455 | (2) |
|
Understanding Linux User Types |
|
|
457 | (2) |
|
|
458 | (1) |
|
|
458 | (1) |
|
Restricting Users and Files |
|
|
459 | (5) |
|
|
464 | (1) |
|
|
465 | (1) |
|
|
466 | (3) |
|
Chapter 16 Looking at Access and Authentication Methods |
|
|
469 | (34) |
|
|
470 | (13) |
|
Exploring PAM Configuration Files |
|
|
471 | (3) |
|
Enforcing Strong Passwords |
|
|
474 | (3) |
|
|
477 | (4) |
|
|
481 | (2) |
|
|
483 | (3) |
|
|
483 | (1) |
|
|
483 | (1) |
|
|
484 | (1) |
|
|
485 | (1) |
|
|
486 | (10) |
|
Exploring Basic SSH Concepts |
|
|
486 | (2) |
|
|
488 | (2) |
|
|
490 | (2) |
|
Authenticating with SSH Keys |
|
|
492 | (2) |
|
Authenticating with the Authentication Agent |
|
|
494 | (2) |
|
|
496 | (2) |
|
|
498 | (1) |
|
|
499 | (1) |
|
|
499 | (2) |
|
|
501 | (2) |
|
Chapter 17 Implementing Logging Services |
|
|
503 | (14) |
|
Understanding the Importance of Logging |
|
|
504 | (3) |
|
|
504 | (2) |
|
The History of Linux Logging |
|
|
506 | (1) |
|
Basic Logging Using rsyslog |
|
|
507 | (3) |
|
|
507 | (2) |
|
|
509 | (1) |
|
|
509 | (1) |
|
Journaling with systemd-journald |
|
|
510 | (3) |
|
|
510 | (1) |
|
|
511 | (2) |
|
|
513 | (1) |
|
|
514 | (1) |
|
|
515 | (2) |
|
Chapter 18 Overseeing Linux Firewalls |
|
|
517 | (30) |
|
|
518 | (2) |
|
Looking at Firewall Technologies |
|
|
520 | (19) |
|
Familiarizing Yourself with firewalld |
|
|
521 | (4) |
|
|
525 | (5) |
|
|
530 | (3) |
|
|
533 | (6) |
|
|
539 | (1) |
|
Dynamically Setting Rules |
|
|
539 | (3) |
|
|
539 | (1) |
|
|
540 | (1) |
|
|
540 | (2) |
|
|
542 | (1) |
|
|
542 | (2) |
|
|
544 | (3) |
|
Chapter 19 Embracing Best Security Practices |
|
|
547 | (24) |
|
|
548 | (13) |
|
|
548 | (2) |
|
Multifactor Authentication |
|
|
550 | (1) |
|
|
551 | (1) |
|
|
551 | (2) |
|
Restricting the Root Account |
|
|
553 | (2) |
|
|
555 | (1) |
|
|
556 | (1) |
|
|
556 | (1) |
|
Preventing Unauthorized Rebooting |
|
|
557 | (2) |
|
Restricting Unapproved Jobs |
|
|
559 | (1) |
|
|
559 | (1) |
|
|
559 | (1) |
|
|
560 | (1) |
|
|
561 | (1) |
|
|
561 | (3) |
|
|
561 | (1) |
|
Disabling Unused Services |
|
|
562 | (1) |
|
|
562 | (1) |
|
Using Encryption on the Network |
|
|
563 | (1) |
|
|
564 | (1) |
|
|
565 | (2) |
|
|
567 | (4) |
Part V Troubleshooting Your System |
|
571 | (126) |
|
Chapter 20 Analyzing System Properties and Remediation |
|
|
573 | (34) |
|
Troubleshooting the Network |
|
|
574 | (13) |
|
|
574 | (4) |
|
Viewing Network Performance |
|
|
578 | (6) |
|
Reviewing the Network's Configuration |
|
|
584 | (3) |
|
Troubleshooting Storage Issues |
|
|
587 | (7) |
|
Running Out of Filesystem Space |
|
|
587 | (1) |
|
|
588 | (3) |
|
Measuring Disk Performance |
|
|
591 | (2) |
|
|
593 | (1) |
|
|
594 | (1) |
|
|
595 | (5) |
|
|
596 | (3) |
|
|
599 | (1) |
|
Surviving a Lost Root Password |
|
|
600 | (1) |
|
|
601 | (1) |
|
|
601 | (2) |
|
|
603 | (4) |
|
Chapter 21 Optimizing Performance |
|
|
607 | (16) |
|
|
608 | (2) |
|
Monitoring Processes in Real Time |
|
|
610 | (4) |
|
|
614 | (4) |
|
|
614 | (1) |
|
|
615 | (3) |
|
|
618 | (1) |
|
|
619 | (1) |
|
|
620 | (3) |
|
Chapter 22 Investigating User Issues |
|
|
623 | (20) |
|
|
624 | (7) |
|
|
624 | (5) |
|
|
629 | (1) |
|
|
630 | (1) |
|
|
631 | (5) |
|
|
631 | (1) |
|
|
632 | (1) |
|
Working with Advanced Permissions |
|
|
633 | (2) |
|
|
635 | (1) |
|
Exploring Environment and Shell Issues |
|
|
636 | (2) |
|
|
638 | (1) |
|
|
638 | (1) |
|
|
639 | (4) |
|
Chapter 23 Dealing with Linux Devices |
|
|
643 | (24) |
|
Communicating with Linux Devices |
|
|
644 | (7) |
|
|
644 | (3) |
|
|
647 | (1) |
|
|
648 | (2) |
|
|
650 | (1) |
|
|
651 | (8) |
|
|
651 | (3) |
|
|
654 | (1) |
|
|
655 | (1) |
|
|
656 | (2) |
|
|
658 | (1) |
|
Using Hot-Pluggable Devices |
|
|
659 | (3) |
|
Detecting Dynamic Devices |
|
|
660 | (1) |
|
Working with Dynamic Devices |
|
|
660 | (2) |
|
|
662 | (1) |
|
|
662 | (2) |
|
|
664 | (3) |
|
Chapter 24 Troubleshooting Application and Hardware Issues |
|
|
667 | (30) |
|
Dealing with Storage Problems |
|
|
668 | (6) |
|
|
668 | (2) |
|
Dealing with Specialized Issues |
|
|
670 | (4) |
|
Uncovering Application Permission Issues |
|
|
674 | (3) |
|
Analyzing Application Dependencies |
|
|
677 | (4) |
|
|
677 | (1) |
|
|
677 | (1) |
|
|
678 | (1) |
|
|
679 | (1) |
|
Exploring Environment Variable Issues |
|
|
679 | (1) |
|
Gaining GCC Compatibility |
|
|
680 | (1) |
|
Perusing Repository Problems |
|
|
680 | (1) |
|
Looking at SELinux Context Violations |
|
|
681 | (1) |
|
Exploring Firewall Blockages |
|
|
682 | (2) |
|
|
682 | (1) |
|
|
683 | (1) |
|
|
683 | (1) |
|
Troubleshooting Additional Hardware Issues |
|
|
684 | (8) |
|
Looking at Helpful Hardware Commands |
|
|
684 | (4) |
|
Investigating Other Hardware Problems |
|
|
688 | (4) |
|
|
692 | (1) |
|
|
692 | (2) |
|
|
694 | (3) |
Part VI Automating Your System |
|
697 | (74) |
|
Chapter 25 Deploying Bash Scripts |
|
|
699 | (28) |
|
The Basics of Shell Scripting |
|
|
700 | (5) |
|
Running Multiple Commands |
|
|
700 | (1) |
|
|
701 | (1) |
|
|
702 | (1) |
|
|
703 | (1) |
|
|
704 | (1) |
|
|
705 | (6) |
|
|
706 | (1) |
|
|
706 | (3) |
|
|
709 | (1) |
|
|
710 | (1) |
|
|
711 | (10) |
|
|
711 | (1) |
|
|
712 | (2) |
|
|
714 | (3) |
|
|
717 | (3) |
|
|
720 | (1) |
|
|
721 | (1) |
|
|
722 | (2) |
|
|
724 | (3) |
|
Chapter 26 Automating Jobs |
|
|
727 | (22) |
|
Running Scripts in Background Mode |
|
|
728 | (2) |
|
Running in the Background |
|
|
728 | (1) |
|
Running Multiple Background Jobs |
|
|
729 | (1) |
|
Running Scripts without a Console |
|
|
730 | (2) |
|
|
732 | (2) |
|
|
732 | (1) |
|
|
732 | (2) |
|
|
734 | (3) |
|
|
734 | (2) |
|
|
736 | (1) |
|
|
737 | (7) |
|
Scheduling a Job Using the at Command |
|
|
737 | (3) |
|
Scheduling Regular Scripts |
|
|
740 | (4) |
|
|
744 | (1) |
|
|
744 | (2) |
|
|
746 | (3) |
|
Chapter 27 Controlling Versions with Git |
|
|
749 | (22) |
|
Understanding Version Control |
|
|
750 | (2) |
|
Setting Up Your Git Environment |
|
|
752 | (3) |
|
|
755 | (7) |
|
|
762 | (1) |
|
|
763 | (3) |
|
|
766 | (1) |
|
|
766 | (2) |
|
|
768 | (3) |
Part VII Realizing Virtual and Cloud Environments |
|
771 | (58) |
|
Chapter 28 Understanding Cloud and Virtualization Concepts |
|
|
773 | (18) |
|
Considering Cloud Services |
|
|
774 | (3) |
|
|
774 | (1) |
|
What Are the Cloud Services? |
|
|
775 | (2) |
|
Understanding Virtualization |
|
|
777 | (4) |
|
|
778 | (1) |
|
|
779 | (2) |
|
|
781 | (1) |
|
|
781 | (5) |
|
|
781 | (1) |
|
|
782 | (1) |
|
|
783 | (1) |
|
|
783 | (3) |
|
|
786 | (1) |
|
|
787 | (1) |
|
|
788 | (3) |
|
Chapter 29 Inspecting Cloud and Virtualization Services |
|
|
791 | (22) |
|
|
792 | (4) |
|
|
792 | (1) |
|
|
793 | (1) |
|
Managing with Virtual Machine Manager |
|
|
794 | (2) |
|
Understanding Bootstrapping |
|
|
796 | (6) |
|
Booting with Shell Scripts |
|
|
796 | (1) |
|
Kickstarting with Anaconda |
|
|
797 | (4) |
|
Initializing with Cloud-init |
|
|
801 | (1) |
|
|
802 | (2) |
|
Considering Network Configurations |
|
|
804 | (4) |
|
|
804 | (1) |
|
Configuring Virtualized NICs |
|
|
805 | (3) |
|
|
808 | (1) |
|
|
808 | (2) |
|
|
810 | (3) |
|
Chapter 30 Orchestrating the Environment |
|
|
813 | (16) |
|
Understanding Orchestration Concepts |
|
|
814 | (5) |
|
|
815 | (1) |
|
|
816 | (3) |
|
Provisioning the Data Center |
|
|
819 | (3) |
|
Coding the Infrastructure |
|
|
819 | (1) |
|
Automating the Infrastructure |
|
|
820 | (1) |
|
Comparing Agent and Agentless |
|
|
821 | (1) |
|
Investigating the Inventory |
|
|
821 | (1) |
|
Looking at Container Orchestration Engines |
|
|
822 | (1) |
|
|
822 | (1) |
|
|
823 | (1) |
|
|
823 | (1) |
|
|
823 | (1) |
|
|
824 | (1) |
|
|
825 | (4) |
Appendix Answers to the Review Questions |
|
829 | (68) |
|
Chapter 2: Introduction to Services |
|
|
830 | (3) |
|
Chapter 3: Managing Files, Directories, and Text |
|
|
833 | (4) |
|
Chapter 4: Searching and Analyzing Text |
|
|
837 | (4) |
|
Chapter 5: Explaining the Boot Process |
|
|
841 | (3) |
|
Chapter 6: Maintaining System Startup and Services |
|
|
844 | (4) |
|
Chapter 7: Configuring Network Connections |
|
|
848 | (3) |
|
Chapter 8: Comparing GUIs |
|
|
851 | (4) |
|
Chapter 9: Adjusting Localization Options |
|
|
855 | (3) |
|
Chapter 10: Administering Users and Groups |
|
|
858 | (3) |
|
Chapter 11: Handling Storage |
|
|
861 | (2) |
|
Chapter 12: Protecting Files |
|
|
863 | (1) |
|
Chapter 13: Governing Software |
|
|
864 | (2) |
|
Chapter 14: Tending Kernel Modules |
|
|
866 | (2) |
|
Chapter 15: Applying Ownership and Permissions |
|
|
868 | (1) |
|
Chapter 16: Looking at Access and Authentication Methods |
|
|
869 | (2) |
|
Chapter 17: Implementing Logging Services |
|
|
871 | (1) |
|
Chapter 18: Overseeing Linux Firewalls |
|
|
872 | (2) |
|
Chapter 19: Embracing Best Security Practices |
|
|
874 | (2) |
|
Chapter 20: Analyzing System Properties and Remediation |
|
|
876 | (2) |
|
Chapter 21: Optimizing Performance |
|
|
878 | (2) |
|
Chapter 22: Investigating User Issues |
|
|
880 | (1) |
|
Chapter 23: Dealing with Linux Devices |
|
|
881 | (2) |
|
Chapter 24: Troubleshooting Application and Hardware Issues |
|
|
883 | (2) |
|
Chapter 25: Deploying Bash Scripts |
|
|
885 | (2) |
|
Chapter 26: Automating Jobs |
|
|
887 | (2) |
|
Chapter 27: Controlling Versions with Git |
|
|
889 | (1) |
|
Chapter 28: Understanding Cloud and Virtualization Concepts |
|
|
890 | (2) |
|
Chapter 29: Inspecting Cloud and Virtualization Services |
|
|
892 | (2) |
|
Chapter 30: Orchestrating the Environment |
|
|
894 | (3) |
Index |
|
897 | |