Whether you're new to Linux or have some experience, this practical book shows you how to master various tasks with this operating system--not just system administration. Cloud native professionals including developers, architects, DevOps practitioners, and site reliability engineers will learn how to use and program Linux in different modern environments, from embedded systems such as the Raspberry Pi to the virtual machine of your cloud provider of choice.

Along the way, you'll gain hands-on experience with modern terminals, shells, and commands, use Linux networking, and learn how to manage your workloads, all with the goal of implementing modern Linux observability. You'll also understand how to run Linux applications in modern ways by using containers, systemd, modern filesystems, and immutable distros such as Flatcar and Bottlerocket.

With this book, you will:

  • Use Linux as a modern programming environment, not just as an admin tool
  • Learn critical components such as the kernel, terminal multiplexer, human-friendly shells, and portable scripting
  • Become familiar with access control, from file permissions to capabilities
  • Understand the role of filesystems as a fundamental building block in Linux
  • Gain hands-on experience with the Linux networking stack and tooling
  • Learn how to apply modern operating system observability to manage your workloads
  • Share data using SSH, rsync, and cloud sync mechanisms

Table of Contents

  1. 1. Introduction to Linux
    1. What are Modern Environments?
    2. Mobile Devices: Phones and Tablets
    3. Cloud Computing
    4. The Internet of (Smart) Things
    5. Diversity of Processor Architectures
    6. The Linux Story (So Far)
    7. Why an Operating System at All?
    8. Linux Distributions
    9. Resource Visibility
    10. A 10,000ft View on Linux
    11. Conclusion
  2. 2. The Linux Kernel
    1. Linux Architecture
    2. CPU Architectures
    3. x86 Architecture
    4. Arm Architecture
    5. RISC-V Architecture
    6. Kernel Components
    7. Process Management
    8. Memory Management
    9. Networking
    10. Filesystems
    11. Device Drivers
    12. Syscalls
    13. Kernel Extensions
    14. Modules
    15. A Modern Way to Extend the Kernel: eBPF
    16. Conclusion
  3. 3. Shells and Scripting
    1. Basics
    2. Terminals
    3. Shells
    4. Modern Commands
    5. Common Tasks
    6. Human-friendly Shells
    7. Fish Shell
    8. The Z-shell
    9. Other Modern Shells
    10. Which Shell Should I Use?
    11. Terminal multiplexer
    12. screen
    13. tmux
    14. Other Multiplexer
    15. Which Mulitplexer Should I Use?
    16. Scripting
    17. Scripting Basics
    18. Writing Portable Bash Scripts
    19. Linting and Testing Scripts
    20. End-to-end Example: GitHub User Info Script
    21. Conclusion
  4. 4. Access Control
    1. Basics
    2. Resources and Ownership
    3. Sandboxing
    4. Types of Access Control
    5. Users
    6. Managing Users Locally
    7. Centralized User Management
    8. Permissions
    9. File Permissions
    10. Process Permissions
    11. Advanced Permission Management
    12. Capabilities
    13. Seccomp Profiles
    14. Access Control Lists (ACL)
    15. Good Practices
    16. Conclusion