A Complete Beginner-to-Advanced Guide
Introduction
Chapter 1: Your First Linux System — Choosing, Installing, and Bootstrapping
- What Is Linux (and Why Developers Prefer It)
- Choosing Your Distribution: Ubuntu, Fedora, Arch, Debian, and Alternatives
- Installation Methods: Native Install, Virtual Machines, WSL2, Dual Boot
- The First Boot: Initial Configuration and Updates
- Creating Users, Groups, and Managing Permissions Basics
- Setting Up Your Development Directory Structure
Chapter 2: Navigating the System — Filesystem, Shell, and Terminal Fundamentals
- The Linux Filesystem Hierarchy: Understanding /, /home, /usr, /etc, and More
- Opening a Terminal and Your First Commands
- Navigating Directories and Listing Files
- Creating, Moving, Copying, and Deleting Files
- Understanding Permissions: Owners, Groups, Modes, and chmod/chown
- Hidden Files, Configuration Directories, and the Home Directory
Chapter 3: The Command Line Environment — Bash, Shell Configuration, and Productivity
- How Shells Work: Interactive vs Script Mode, History, and Completion
- Essential Command-Line Skills: Pipes, Redirection, and Command Substitution
- Environment Variables: PATH, HOME, EDITOR, and Development-Relevant Settings
- Shell Configuration Files: .bashrc, .profile, .bash_profile, and .inputrc
- Productivity Enhancements: Aliases, Functions, and Prompt Customization
- Alternative Shells: Zsh, Fish, and When to Switch
Chapter 4: Package Management and System Configuration
- How Package Managers Work: Repositories, Dependencies, and Versions
- Debian/Ubuntu Package Management: apt, dpkg, and PPAs
- Fedora/RHEL Package Management: dnf, rpm, and COPR
- Arch Linux Package Management: pacman and the AUR
- Systemd Services: Understanding and Managing Background Processes
- Essential System Configuration: Time Zones, Locale, Hostname, and Network Settings
Chapter 5: Text Editors, IDEs, and Development Environments
- Terminal-Based Editing: nano for Beginners, vim and neovim for Power Users
- Visual Studio Code on Linux: Installation, Extensions, and Configuration
- JetBrains IDEs: IntelliJ IDEA, PyCharm, GoLand, and RustRover Setup
- Language Servers, LSP, and Modern Editor Integration
- Choosing Your Editor: Workflow Considerations and Trade-offs
- Configuring Fonts, Themes, Terminal Emulators, and Window Managers
Chapter 6: Version Control with Git — Complete Workflow Guide
- Why Version Control Matters: Concepts and Terminology
- Installing and Configuring Git on Linux
- Basic Operations: init, add, commit, status, log, and diff
- Branching and Merging: Workflow Patterns for Feature Development
- Remote Repositories: GitHub, GitLab, SSH Keys, and Push/Pull Workflows
- Advanced Git: Rebase, Stash, Bisect, Submodules, and Hooks
Chapter 7: Networking, SSH, and Remote Development
- Linux Networking Fundamentals: IP Addresses, DNS, Interfaces, and Tools
- Testing Connectivity: ping, curl, wget, nc, and Network Debugging
- SSH Essentials: Connecting to Remote Servers and Key-Based Authentication
- Advanced SSH: Config Files, Port Forwarding, Tunnels, and Agents
- Remote Development: VS Code Remote SSH, tmux, and Screen Sessions
- Security Considerations: Firewalls, Fail2Ban, and Secure Configuration
Chapter 8: Build Systems, Compilers, and Language Runtimes — Part I (Systems Languages)
- How Compilation Works: Source to Binary on Linux
- The C Toolchain: gcc, g++, make, and Building C/C++ Projects
- Build Systems Compared: Make, CMake, Meson, and Ninja
- Linking, Libraries, and pkg-config: Managing Dependencies
- Debugging with GDB and LLDB: Breakpoints, Inspection, and Core Dumps
- Rust Development: rustup, cargo, clippy, and the Rust Ecosystem
Chapter 9: Build Systems, Compilers, and Language Runtimes — Part II (Managed Languages)
- Python Development: venv, pip, Poetry, pyenv, and Virtual Environments
- Java Development: JDK Installation, Maven, Gradle, and JRE/JDK Management
- Go Development: go install, Modules, Workspaces, and Tooling
- JavaScript and TypeScript: Node.js, npm, yarn, pnpm, nvm, and tsconfig
- Version Managers Across Languages: Managing Multiple Runtimes Safely
- Cross-Language Build Orchestration: Makefiles for Polyglot Projects
Chapter 10: Containers, Virtualization, and Reproducible Environments
- Why Containers Matter for Development: Isolation, Reproducibility, Deployment
- Docker Fundamentals: Images, Containers, Dockerfiles, and docker compose
- Building Development Environments with Docker Compose
- Podman and Rootless Containers: Alternatives to Docker on Linux
- Virtual Machines for Development: QEMU, KVM, libvirt, and Vagrant
- Dev Containers and Codespaces: Standardized Development Environments
Chapter 11: Testing, CI/CD, and Automation Workflows
- Testing Fundamentals: Unit Tests, Integration Tests, and Test Frameworks
- Running Tests on Linux: Language-Specific Test Runners and Coverage Tools
- Continuous Integration with GitHub Actions and GitLab CI
- Self-Hosted CI: Jenkins, Drone, and Runner Configuration on Linux
- Automation with Shell Scripts: Idempotency, Error Handling, and Best Practices
- Infrastructure as Code Basics: Ansible, Terraform, and Configuration Management
Chapter 12: Monitoring, Debugging, Performance, Security, and Advanced Techniques
- System Monitoring Tools: top, htop, btop, iostat, vmstat, and sar
- Process Analysis and Debugging: ps, strace, lsof, and pstack
- Performance Profiling: perf, flame graphs, valgrind, and memory analysis
- Logging on Linux: journalctl, syslog, log rotation, and application logging
- Security Fundamentals for Developers: SELinux/AppArmor, Capabilities, Hardening
- Advanced Techniques: Namespaces, cgroups, FUSE, eBPF, and Kernel Interfaces
