grep -rl "intermediate" ./blog

Intermediate Linux Guides

For people past the basics. Deeper explanations of how subsystems actually work, and the tools that only make sense once you have used a Linux system for a while.

28 articles

Core Dumps on Linux: Debugging Crashes With coredumpctl When a program crashes, Linux can save a snapshot of its memory. How core dumps work, where systemd-coredump stores them, how to list and inspect crashes with coredumpctl and gdb, get debug symbols with debuginfod, and control disk use. Debugging Bash Scripts: set -x, PS4, and ShellCheck How to find out what a misbehaving shell script is actually doing: syntax checks with bash -n, tracing with set -x and a better PS4, tracing to a file, catching errors with trap, and finding bugs before they run with ShellCheck. Speeding Up Linux Boot With systemd-analyze Find out where boot time actually goes with systemd-analyze time, blame, critical-chain, and plot, then fix the usual culprits: network-wait services, slow firmware, unneeded services, and timeouts on missing disks. systemd User Services: Running Your Own Services Without Root systemctl --user lets any user run background services and timers under their own account, with logging, restarts, and dependencies. Where unit files go, how lingering keeps them running after logout, and common pitfalls over SSH. Neovim Basics: Getting From Vim to a Modern Editor Setup Neovim keeps Vim's modal editing and adds Lua configuration, a built-in LSP client, Tree-sitter highlighting, and a plugin ecosystem built around them. How it differs from Vim, a minimal init.lua, and how to add language support. NixOS Explained: A Linux Distro You Configure in One File and Roll Back in One Command NixOS builds your entire system from a declarative configuration, keeps every previous version bootable, and never installs packages into /usr. How the Nix store works, what configuration.nix looks like, what flakes are, and the trade-offs. Tiling Wayland Compositors Explained: niri vs Hyprland vs Sway Tiling compositors arrange windows for you instead of letting them overlap. How scrollable tiling in niri differs from Hyprland's dynamic tiling and Sway's i3-style manual tiling, what else you need to build a desktop, and how to pick one. Unlock LUKS With the TPM: systemd-cryptenroll Explained Bind your encrypted disk to the TPM so it unlocks automatically at boot, or with a short PIN, and only on your untouched machine. How TPM sealing and PCRs work, the exact enrollment steps, recovery keys, and the security trade-offs. zswap vs zram: Which Compressed Swap Should You Use? Both compress memory to stretch your RAM, but zram is a swap device in RAM while zswap is a compressed cache in front of disk swap. How each works, how to check and configure them, why you should not stack them, and which to pick. Linux ACLs Explained: getfacl and setfacl Beyond rwx Permissions Standard permissions give you one owner, one group, and everyone else. Access control lists let you grant specific users and groups their own permissions on a file, and getfacl and setfacl are how you manage them. Btrfs Snapshots and Timeshift: Undo for Your Whole System Btrfs can capture the state of your filesystem in an instant snapshot that costs almost nothing until files change. Paired with Timeshift or Snapper, that becomes an undo button for bad updates. Here is how it works and how to set it up. Rescuing an Unbootable Linux System with chroot When Linux will not boot, a live USB plus chroot lets you enter the broken installation as if it were running: fix the bootloader, roll back a bad kernel, reset a password, and reinstall packages from inside. Kernel Modules Explained: lsmod, modprobe, and DKMS Most drivers on Linux are kernel modules, loaded and unloaded at runtime. Here is how to inspect them with lsmod and modinfo, manage them with modprobe, blacklist the troublesome ones, and understand what DKMS rebuilds. logrotate Explained: Keeping Log Files From Eating Your Disk logrotate renames, compresses, and eventually deletes aging log files on a schedule, and nearly every distro ships it preconfigured. Here is how the rotation cycle works and how to write configs for your own apps. Reverse Proxies Explained: Nginx, Caddy, and Traefik for Self-Hosters A reverse proxy sits in front of your services, routing incoming requests by hostname and terminating HTTPS in one place. Here is why every self-hosted setup grows one, and how the three big options differ. SSH Tunneling Explained: Local, Remote, and Dynamic Port Forwarding SSH can carry more than shells. With -L, -R, and -D it forwards ports through encrypted tunnels, reaching firewalled services, exposing local apps, and acting as a instant SOCKS proxy. Automated Backups on Linux A practical guide to setting up automated backups on Linux using rsync, tar, and dedicated tools like restic and Borg, following the 3-2-1 rule, scheduling with cron or systemd timers, and actually verifying backups work. CPU Monitoring on Linux A practical guide to monitoring CPU usage on Linux, covering top, htop, and mpstat, how to read user/system/wait time breakdowns, per-core versus aggregate views, and identifying whether a bottleneck is CPU-bound or I/O-bound. iostat Explained iostat reports per-device disk I/O statistics, showing throughput, request sizes, queue depth, and utilization. This guide covers installing sysstat, reading iostat -x output, and identifying which disk is actually the bottleneck. Monitoring Memory Usage on Linux A practical guide to checking memory usage on Linux: reading /proc/meminfo, understanding what counts as "used" memory, finding which process is consuming RAM, and recognizing real memory pressure versus normal cache behavior. Writing Scheduled Scripts That Actually Work on Linux Scripts that run fine interactively often fail silently when triggered by cron or systemd timers. This guide covers the practical differences: environment variables, working directories, logging, locking, and failure notification for scripts meant to run unattended. Understanding Load Average on Linux Load average is one of the most misread numbers in Linux administration. This guide explains what it actually measures, why Linux counts differently from other Unix systems, and how to judge whether a load average is actually a problem. vmstat Explained vmstat reports processes, memory, swap, I/O, and CPU activity in one compact table, sampled at an interval you choose. This guide breaks down every column and how to spot memory pressure, I/O bottlenecks, and CPU contention from its output. xz Compression Explained xz achieves the best compression ratio of the common Linux compressors, at the cost of being the slowest to compress. This guide covers usage, multi-threaded compression, and why xz has become the default for software release archives. Arch Linux Explained Arch Linux is a rolling-release distribution built around the principle that users should understand and control every part of their system. This guide explains what makes Arch different, how it works, and who it is actually for. Encrypting Your Linux Installation with LUKS Full disk encryption protects your data if your laptop is lost or stolen. Linux uses LUKS (Linux Unified Key Setup) to encrypt partitions at the block device level. This guide explains how to enable it at install time, how it works, and how to manage it after installation. Linux Partitioning Explained Partitioning divides a disk into sections that the OS treats as independent storage units. Understanding partition tables (MBR vs GPT), partition types (EFI, swap, root, home), and filesystems (ext4, btrfs, xfs) lets you make informed decisions during installation. Secure Boot Explained: What It Is and How Linux Handles It Secure Boot is a UEFI feature that verifies the digital signature of the bootloader before running it. Most major Linux distributions handle it transparently, but some setups require additional configuration. This guide explains how it works and what to do.