Learning Modern Linux: A Handbook for the Cloud Native Practitioner by Michael Hausenblas
Book about various parts of Linux systems, the kernel and its ecosystem. Even though I’ve used Linux for my development work for many years, a lot of this book was new to me, covering topics that most developers have interacted with at some level, but most don’t understand deeply. The text is a mixture of theoretical and practical knowledge, it covers a lot of topics without going into too much depth on any of them (it is only about 200 pages), but gives pointers to resources where you can learn more if you want. A lot of the book is diagnostic commands and example output, which you should follow along while reading (not too difficult because they are mostly commands to diagnose the state of various parts of the system). Another useful aspect is it tells you which commands are deprecated and newer versions are preferred, and it gives upgraded versions of many standard Linux commands.
Some of the topics covered in each chapter:
- Ch1: Differences between environment, OS, kernel, Linux distribution; history of Linux.
- Ch2: Overview of the kernel, which is basically an abstraction between applications and hardware. The kernel manages processes, virtual memory, the filesystem and provide syscalls for applications.
- Ch3: Shell and scripting basics. Environment variables, basic commands (including modern versions of these), alternative shells, tmux multiplexing, bash scripting.
- Ch4: Access control: managing users, file permission bits, UIDs for process permissions, capabilities for fine grained permission management.
- Ch5: File system basic terminology and commands; VFS (virtual file system) allows the “everything is a file philosophy” with kernel information mapped to filesystems in /proc and /sys. Besides ordinary filesystems, there are also in-memory only and copy-on-write filesystems for efficiency.
- Ch6: The Linux startup process using UEFI and bootstrapping; systemd which manages daemons (replacing cron jobs); package managers like yum and apt; namespaces and cgroups existed before Docker for resource isolation, but Docker made things easier, and is useful in many places for containerization.
- Ch7: Networking: the TCP-IP stack (comprising of link, internet, transport and application layers), DNS, network tools like Curl, SSH, SCP.
- Ch8: Common logging formats, tools to monitor system resource usage, tools to profile for performance.
- Ch9: Miscellaneous topics: interprocess communication, virtual machines, container-centric Linux distros.