Verdict: Highly recommended
This book is relevant for a broader scope of readers than this book’s strapline suggests. Professionals using Linux in the cloud, who may be more familiar with Windows, will have a reasonable introduction to Linux. Other Linux users – from desktop systems to Raspberry Pi aficionados – will find its coverage useful as well. It does so using examples at the command line, expecting the reader to take a hands-on approach. Each chapter concludes with a list of additional books and/or websites to refer to.
‘Chapter 1: Introduction to Linux’ illustrates the broad usage of the Linux kernel over a variety of hardware platforms. A history of Linux over three decades is provided. The necessity of an operating system is covered. The concept of Linux distributions is covered. Finally, the overall structure of the book is revealed in a diagram of the kernel’s topics. A very good link to an interview of Brian Kernighan, is provided using O’Reilly link redirection: https://oreil.ly/MlQ0J. These links are useful but the links are sometimes ambiguous to the reader of the physical book.
‘Chapter 2: The Linux Kernel’ goes into more detail, giving the reader a good grasp of the basics – Linux architecture (Hardware /Kernel/User land), CPU architectures (x86_64, ARM, RISC-V), Kernel components (Processes, Memory, Networking, Filesystems, device drivers).
‘Chapter 3: Shells and Scripting’ emphasises the importance of this topic. Personally, I just use bash with the gnome-terminal. As a default, this book assumes the use of bash. This chapter also covers ‘Human-Friendly Shells’, ‘Terminal Multiplexers’ (I use multiple terminal windows) and, finally, covers scripting. There is more to this chapter than equivalents of Windows’s
COPY commands, though. Wisely, it advises the reader, if they are writing long scripts, to consider using a proper scripting language like Python or Ruby. Good practice advice is provided – from ‘Fail fast and loud’ to ‘Testing’. Testing advice – in particular using shellcheck on your machine or via https://www.shellcheck.net/. Finally, a worked example is provided – a ‘GitHub User Info Script’, which I didn’t try because GitHub is a topic I will learn more about later. As usual, the chapter concludes with useful websites but curiously omits a link to https://www.gnu.org/software/bash/manual/
‘Chapter 4: Access Control’ covers user accounts, their role in the control of access to resources, and files in particular – all of which are important in a multi-user environment like Linux. The different types of access control are covered – from local (the usual stuff) through to centralised. Local access control is covered OK but I don’t know much about SELiniux or AppArmor to comment. Sandboxing is mentioned as covered in a later chapter. The
umask command is mentioned but could have been covered more fully.
‘Chapter 5: Filesystems’ starts with a very good introduction to the topic, introduces relevant commands that other explanations don’t, and gives the reader a firm foundation to build on. It is relevant both to the hobbyist user and professional users.
‘Chapter 6: Applications, Package Management, and Containers’ covers a lot of ground. First, it gives a list of definitions. It gives an overview of the Startup/Boot process,
journalctl, an example of a timer unit,
bootctl), Linux Application Supply Chains, Packages and Package Managers, RPM. Debian deb, Language-specific Package Managers, Containers, Namespaces, cgroups, Docker, Modern Package Managers – Snap, Flatpak etc). It concludes with many Internet links to build on top of this chapter.
‘Chapter 7: Networking’ is a really good chapter. It has many diagrams, illustrating the relationships between components, the layered architecture of the TCP/IP stack, header formats for the IP, TCP, and UDP layers. I ended up printing copies of the diagrams and making notes on them. It doesn’t make me a networking expert, but I now know more about networking than before.
‘Chapter 8: Observability’ is all about getting information on the state of a running Linux system. Brendan Gregg’s ‘Linux Performance Observability Tools’ diagram makes an appearance (see https://www.brendangregg.com/linuxperf.html). The topic is split into Basics/Logging/Monitoring/Advanced ).
‘Chapter 9: Advanced Topics’ covers a bit of a mixed bag – Interprocess Communication (Signals, Named Pipes, UNIX Domain Sockets), Virtual Machines, Modern (i.e. more recent) Linux Distros, Authorisation Tools (Kerberos, Pluggable Authentication Modules).
I am not a professional system administrator – but I was still able to understand this book. It covers its chosen topic well, providing very useful links to build on. All in all, highly recommended.