Linux guides
235 guides · intermediate.
XWayland: A Survival Guide
XWayland bridges X11 apps to your Wayland desktop. Learn how it works, fix blurry windows and clipboard issues, and set the right environment variables.
Wayland vs X11: A Deep Dive
A practical deep dive into Wayland vs X11: architecture, security isolation, frame latency, what still needs XWayland, and how to manage mixed sessions.
Get Screen Sharing to Work on Wayland
Fix Wayland screen sharing for browsers, OBS, and video calls by correctly setting up PipeWire, xdg-desktop-portal, and compositor-specific backends.
XDG Desktop Portals Explained
Learn what XDG Desktop Portals do, how to install the right backend for GNOME, KDE, or wlroots, and how to fix common screen sharing and file picker failures.
Use PlatformIO for Embedded Development
Install PlatformIO on Linux, integrate it with VS Code, choose between Arduino and ESP-IDF frameworks, run on-device unit tests, and attach a hardware debugger.
Listen to Music in the Terminal with MPD + ncmpcpp
Set up MPD as a per-user systemd service, configure ncmpcpp with a spectrum visualiser, and control playback from the terminal on any Linux distro.
Use mise for Tools, Tasks and Env Vars
Replace asdf, direnv, and task runners with a single mise binary. Covers installation, tool versioning, env vars, tasks, and secrets via sops.
Use ESPHome to Build Smart Devices
Install ESPHome on Linux, write YAML configs with a secrets file, flash ESP32/ESP8266 over USB and OTA, then integrate live sensor data into Home Assistant.
Try the COSMIC Desktop from System76
Install COSMIC Desktop from System76 on Pop!_OS 24.04 Alpha or Fedora, configure tiling and panels, and know what to expect from this Rust-built alpha DE.
True Color, Image Protocols and Modern Terminal Features
Configure TERM, COLORTERM, sixel, Kitty graphics, and iTerm2 inline image protocols correctly across Kitty, WezTerm, foot, Alacritty, and tmux.
Build a Woodpecker CI Pipeline End-to-End
Set up a Woodpecker CI server and agent with Docker Compose, then build a real pipeline with registry secrets, BuildKit layer caching, and SSH deploy steps.
Self-Host Wallabag for Read-It-Later
Deploy Wallabag on your own server with Docker and PostgreSQL, configure browser extensions and mobile apps, and import your Pocket or Instapaper reading list.
Self-Host Vaultwarden (Bitwarden Server)
Deploy a self-hosted Vaultwarden (Bitwarden-compatible) password server using Docker Compose, nginx reverse proxy, Let's Encrypt TLS, and automated backups.
Self-Host CalDAV/CardDAV with Radicale
Set up Radicale as a self-hosted CalDAV/CardDAV server with htpasswd auth, Nginx reverse proxy, and sync to Evolution, Thunderbird, iOS, and Android.
Self-Host PhotoPrism for Photo Library
Deploy PhotoPrism on your own server with Docker Compose. Covers storage layout, database setup, face recognition tuning, and reverse geocoding for places.
Self-Host Kavita for Comics and Books
Deploy Kavita on Docker, configure comic and book libraries, enable OPDS for mobile reading apps, and secure it with an Nginx HTTPS reverse proxy.
Self-Host Joplin Server
Self-host Joplin Server with Docker Compose, PostgreSQL, Nginx TLS reverse proxy, and end-to-end encryption for private, cross-device note sync.
Self-Host Immich (Google Photos Replacement)
Deploy Immich — a full Google Photos replacement — on your own server using Docker Compose, with machine learning, mobile auto-backup, and album sharing.
Self-Host FreshRSS
Deploy FreshRSS with Docker Compose, import feeds via OPML, connect mobile clients through the Google Reader API, and manage multiple users on one instance.
Self-Host Forgejo (Gitea Fork)
Install Forgejo from a single binary on Linux, harden it with systemd, put it behind Nginx with TLS, add CI runners, and understand the ForgeFed federation roadmap.
Self-Host Calibre-Web for Your eBook Library
Deploy Calibre-Web with Docker, import your Calibre library, configure send-to-Kindle email delivery, and set up an OPDS catalog for KOReader.
Pi-hole + Unbound on a Raspberry Pi
Set up Pi-hole as a network-wide DNS blocker paired with Unbound for fully recursive, DNSSEC-validating resolution on a Raspberry Pi — no upstream DNS provider needed.
Boot a Raspberry Pi from NVMe or USB SSD
Update EEPROM firmware, configure boot order, clone your SD image, and verify performance booting a Pi 4 or Pi 5 from USB SSD or NVMe.
Turn a Raspberry Pi into a Media Server
Set up Jellyfin on a Raspberry Pi 4 or 5 with persistent external storage mounts and honest guidance on hardware-accelerated transcoding limits.
Use the Raspberry Pi Camera Module
Learn to capture stills, record video, and stream live footage over the network using libcamera and rpicam-apps on Raspberry Pi OS Bookworm.
Try niri, the Scrollable-Tiling Wayland Compositor
Install niri, the Rust-based scrollable-tiling Wayland compositor, then configure its unique horizontal window model, keybinds, and status bar.
Manage Dotfiles with chezmoi
Track, template, and encrypt your dotfiles with chezmoi — then restore any machine to your exact config in one command.
Custom Keybinds: Caps as Esc/Ctrl, Sticky Keys, Macros
Remap Caps Lock to Esc/Ctrl, set up hyperkeys, sticky keys, and macros using xkb, keyd, input-remapper, and kanata—covering X11 and Wayland.
A Sysadmin's Daily Driver Setup
Build a complete sysadmin terminal workflow with tmux, Neovim, fzf, atuin, version-controlled dotfiles, clean multi-server SSH, and audit-ready habits.
A Linux Remote-Work Setup
Set up a full Linux remote-work environment: multi-monitor displays, Zoom/Teams/Element video calls, WireGuard/OpenVPN, calendar sync, and a password manager.
Linux for Podcasters and Streamers
Set up a professional Linux podcast and streaming rig: PipeWire low-latency audio, RNNoise suppression, OBS Studio, Reaper DAW, and Audacity multi-track recording.
A Complete Linux Developer Workstation Setup
Set up a complete Linux developer workstation: distro selection, terminal stack, language version managers, Docker, VS Code, and reproducible dotfiles.
Linux for Designers: A Complete Setup Guide
Set up a professional Linux design workstation: ICC color management, font pipelines, Inkscape/GIMP/Krita/Penpot installs, and Wayland rendering fixes.
Linux for Data Scientists: A Complete Setup Guide
Set up a production data science workstation on Linux: Conda, mamba, uv, JupyterLab, R, RStudio Server, CUDA, and Apache Arrow, with verification steps.
Linux Accessibility: Screen Readers and Magnification
Set up Orca screen reader, GNOME and KDE magnification, high-contrast themes, and full keyboard navigation on modern Linux desktops including Wayland sessions.
Install Zigbee2MQTT
Install Mosquitto, configure a Zigbee USB coordinator, run Zigbee2MQTT as a systemd service, and pair devices using the built-in web frontend.
Sway Power-User Configuration
Configure Sway end-to-end: i3-compatible bindings, Waybar status bar, swaylock screen locking, swayidle with idle-hints, and grim/slurp screen capture.
Install the Mosquitto MQTT Broker
Install and secure Mosquitto MQTT broker with password auth, TLS on port 8883, ACL topic control, and a clean mosquitto.conf on Debian, Ubuntu, Fedora, and Arch.
Install Miniflux RSS Reader
Install the Miniflux self-hosted RSS reader on Linux: single binary, PostgreSQL backend, Fever API for mobile clients, and OPML import in under 30 minutes.
Install Home Assistant OS on a Pi (or VM)
Flash Home Assistant OS to a Raspberry Pi 4/5 or VM, attach a Zigbee dongle, configure add-ons, and set up automated off-device backups.
Use Figma or Self-Host Penpot on Linux
Run Figma in Chromium on Linux with local font support, or self-host the open-source alternative Penpot using Docker Compose — step-by-step for all major distros.
Install darktable for RAW Photo Processing
Install darktable on Ubuntu, Fedora, and Arch, then learn importing, the scene-referred pipeline, masking, exporting, and how it compares to RawTherapee.
Install ActivityWatch for Local Time Tracking
Install ActivityWatch on Linux, configure systemd auto-start, set up window and AFK watchers, connect the browser extension, and read time-tracking reports.
Fix Fractional Scaling and HiDPI on Wayland
Fix blurry apps on HiDPI Wayland displays: enable compositor fractional scaling, set GDK and Qt env vars for XWayland, and configure Electron's Ozone backend.
Configure WezTerm with Lua
Configure WezTerm entirely in Lua: set fonts, colour schemes, key bindings, split panes and tabs, the built-in mux server, and SSH session integration.
Write an Ansible Role
Learn to build a reusable Ansible role from scratch: directory layout, defaults vs vars, handlers, templates, dependencies, and publishing to Ansible Galaxy.
Ship Logs with Vector
Configure Vector to collect systemd-journald logs, reshape events with VRL transforms, and ship structured data to Grafana Loki and Elasticsearch.
Use Toolbx on Fedora (and Silverblue)
Learn how to create and use Toolbx containers on Fedora and Silverblue — including package installs, GPU passthrough, and running GUI apps from inside.
Use Kustomize (Without Templates)
Manage Kubernetes manifests without templates using Kustomize bases, overlays, patches, and generators — applied with plain kubectl -k.
Use kubectl Effectively
Master kubectl contexts, namespace switching, built-in API docs with explain, structured output, live debugging with ephemeral containers, and Kustomize overlays.
Use Helm Charts on Linux
Install Helm 3, manage chart repos, override values, render manifests locally with helm template, and package your own chart for Kubernetes.
Use GPIO Pins on a Raspberry Pi
Control Raspberry Pi GPIO pins using libgpiod — the modern replacement for deprecated sysfs. Covers CLI tools, Python, and C with real working examples.
Use distrobox to Run Other Distros in Containers
Run Arch, Fedora, Ubuntu, or any distro as an integrated container on your current system using distrobox—with shared home, GUI support, and shell integration.
Tune PHP-FPM Pools for Production
Configure PHP-FPM pool process managers (dynamic, static, ondemand), calculate max_children from real memory usage, enable slowlog, and monitor with the status page.
Self-Host a GitHub Actions Runner on Linux
Install a GitHub Actions self-hosted runner on Linux, configure it as a systemd service, assign labels, register at org level, and harden the execution environment.
Build a Raspberry Pi Kiosk
Boot a Raspberry Pi straight into full-screen Chromium with no desktop, no cursor, and no screen blanking using labwc, systemd autologin, and Wayland.
Offsite Backups to Backblaze B2 / R2 / S3
Back up Linux servers to Backblaze B2, Cloudflare R2, or AWS S3 using rclone, restic, and BorgBackup—with lifecycle policies and restore testing.
Monitor a Server with node_exporter
Install Prometheus node_exporter as a hardened systemd service, configure scraping, and set up Grafana dashboards for full server observability.
A Modern nginx TLS Configuration
Configure nginx with TLS 1.2/1.3, Mozilla Intermediate cipher suites, OCSP stapling, HSTS, and DH parameters for a production-ready HTTPS setup.
nginx as a Reverse Proxy: Best Practices
Configure nginx as a production-grade reverse proxy: upstream keepalive pools, buffering tuning, WebSocket upgrades, and correct X-Forwarded-* header handling.
IPv6 on Linux — A Practical Guide
Configure IPv6 on Linux from scratch: address types, SLAAC with privacy extensions, DHCPv6, static addressing, routing, nftables firewall rules, and dual-stack operation.
Install the Wazuh Agent on Linux
Install and configure the Wazuh Agent on Linux: add the repo, enroll with your manager, set up log collection, file integrity monitoring, and vulnerability detection.
Install TimescaleDB on PostgreSQL
Install TimescaleDB on PostgreSQL, create hypertables, automate continuous aggregates, and enforce data-retention policies on Ubuntu, Fedora, and Arch.
Install and Use Terraform on Linux
Install Terraform on Debian, Fedora, and Arch Linux, configure AWS, Hetzner, and DigitalOcean providers, and manage infrastructure with plan, apply, and remote state backends.
Install PyTorch with GPU Support
Install PyTorch with NVIDIA CUDA or AMD ROCm GPU support inside a Python venv, then verify torch.cuda.is_available() returns True on Linux.
Install Pulumi on Linux
Install Pulumi on Debian, Fedora, or Arch Linux, pick a language runtime, configure a state backend, manage secrets, and compare Pulumi to Terraform.
Install Prometheus on Linux
Install Prometheus on Linux from tarball or distro packages, configure scrape targets and retention, and run it securely under a hardened systemd unit.
Use OpenTofu (the Terraform Fork)
Install OpenTofu, the MPL-licensed Terraform fork, migrate existing projects safely, and understand provider compatibility and new features like state encryption.
Install MongoDB on Linux
Install MongoDB 7.0 on Linux via the official apt/dnf repo, configure mongod, enable authentication, and set up a single-node replica set ready for production.
Install Mail-in-a-Box
Set up a self-hosted mail server on Ubuntu 22.04 with one command. Covers the MiaB installer, DNS records (SPF, DKIM, DMARC), admin panel, and verification.
Install Loki and Promtail for Logs
Install Grafana Loki and Promtail as single binaries, ship systemd-journald logs, and create log-based metric rules — managed with systemd.
Install and Use llama.cpp
Build llama.cpp from source on Linux, enable CUDA/ROCm GPU offloading, load GGUF models, and serve an OpenAI-compatible local inference API.
Install k3s on a Single Linux Node
Install k3s on a single Linux node in minutes: covers the curl installer, kubeconfig setup, built-in Traefik ingress, and essential kubectl commands.
Install and Configure a GitLab Runner
Install GitLab Runner on Linux, register Shell and Docker executors, configure caches, route jobs with tags, and understand autoscaling with the fleeting plugin.
Install Drone / Woodpecker CI
Deploy Woodpecker CI (or Drone) with Docker Compose, wire OAuth to Gitea or GitHub, connect agents, and run your first pipeline in under an hour.
Install ClickHouse on Linux
Install ClickHouse on Linux from the official repo, configure users and storage, design an efficient MergeTree schema, ingest data, and tune for query performance.
Install Ardour for Audio Recording
Install Ardour on Linux via distro packages, official binary, or source build. Configure JACK or PipeWire, set up a recording session, and add LV2/VST plugins.
Install and Tune Redis for Production
Install Redis on Linux, configure RDB and AOF persistence, set maxmemory eviction policies, and add replication with Sentinel for production HA.
Auto-Deploy a Static Site with Caddy + Git Hooks
Set up a zero-CI deploy pipeline: push to a bare Git repo, run a build hook, and let Caddy serve your static site with automatic TLS.
Linux Server Disaster Recovery Checklist
A practical Linux server disaster recovery checklist: what to back up, RTO/RPO planning, immutable off-site copies, automated restore drills, and verification.
Container Image Best Practices
Reduce container attack surface with multi-stage builds, distroless base images, non-root users, and automated CVE scanning using Trivy, Scout, and Grype.
Set Up an OpenVPN Server
Build a complete OpenVPN server on Linux using Easy-RSA 3 for PKI, a hardened server.conf, client .ovpn profiles, and systemd — with a WireGuard comparison.
Expose a Service with Cloudflare Tunnel
Expose local services to the internet without port-forwarding using Cloudflare Tunnel. Install cloudflared, create a named tunnel, configure ingress rules, and run as a systemd service.
cloud-init Explained (with worked examples)
Learn how cloud-init bootstraps cloud VMs: user-data formats, key modules, datasource detection, and hands-on debugging on Hetzner, EC2, and DigitalOcean.
Build a .rpm Package
Learn to build .rpm packages step by step: set up the rpmbuild tree, write a spec file with BuildRequires, and produce clean builds with mock.
Build an Arch AUR Package (PKGBUILD)
Learn to write an Arch Linux PKGBUILD from scratch, build it with makepkg, lint it with namcap, and publish it to the AUR step by step.
Build a Mesh VPN with Nebula
Build a fully self-hosted mesh VPN with Nebula: create a CA, sign node certs, configure lighthouses, enforce group-based firewall rules, and run as a systemd service.
Build a .deb Package
Step-by-step guide to building a .deb package using dh_make, debian/control, debian/rules, lintian quality checks, and clean chroot builds with sbuild.
Manage Secrets with Ansible Vault
Encrypt Ansible secrets with AES-256 using ansible-vault: encrypt files and inline vars, automate with password files, and isolate group-level secrets with vault IDs.
ZFS vs Btrfs on Linux
ZFS vs Btrfs on Linux: a direct comparison of maturity, licensing, RAID safety, snapshots, performance, and which filesystem to pick for your use case.
Write a Makefile for Anything (Not Just C)
Learn how to write a Makefile for any project—targets, prerequisites, .PHONY, variables, pattern rules, and the classic gotchas explained with real examples.
Void Linux and Artix — Quick Takes
A practical comparison of Void Linux and Artix Linux: how xbps and runit work on Void, OpenRC and pacman on Artix, and which distro suits which user.
A Vim Config From Scratch
Build a Neovim config from scratch: sensible defaults, lazy.nvim plugin manager, Treesitter, LSP via Mason, and autocompletion — all explained step by step.
Use yq to Process YAML
Learn to read, filter, transform, and safely edit YAML files in place using mikefarah/yq — the Go-based jq equivalent for YAML.
Use Wireshark on Linux
Install Wireshark on Linux, configure non-root capture, use capture and display filters, decrypt TLS with SSLKEYLOGFILE, and follow TCP streams end-to-end.
Use tcpdump Effectively
Master tcpdump with BPF filters, ring buffer tuning, rotating pcap captures, and a systemd service wrapper — without dropping packets or wasting disk space.
Use curl Like a Pro
Master curl beyond basic GET requests: inspect and send headers, authenticate with tokens, POST JSON, upload files, manage cookies, and debug with -v.
Try a Tiling Window Manager (i3 or sway)
Install i3 or sway, understand tiling layouts and config syntax, add a status bar, and keep the useful parts of your old desktop environment.
How to Upgrade Ubuntu LTS to the Next LTS
Step-by-step guide to upgrading Ubuntu LTS to the next LTS: pre-upgrade backups, disabling PPAs, running do-release-upgrade, and fixing common post-upgrade issues.
How to Upgrade Fedora to a New Release
Upgrade Fedora in-place using dnf system-upgrade. Covers pre-upgrade prep, third-party repos, the upgrade reboot, post-upgrade cleanup, and common fixes.
Snapshot Backups with Btrfs and Snapper
Set up Btrfs subvolumes, configure Snapper for automated snapshots, integrate with GRUB for bootable recovery points, and perform full system rollbacks.
Shell Script Strict Mode
Learn how set -euo pipefail, IFS, and traps protect bash scripts from silent failures, undefined variables, and leaked temporary files.
Set Up systemd-resolved Cleanly
Enable systemd-resolved's stub listener, configure DNS-over-TLS, set up conditional forwarding for split-horizon DNS, and debug with resolvectl.
Set Up a WireGuard VPN Server
Configure a WireGuard VPN server from scratch: key generation, server and client configs, NAT with nftables, IP forwarding, firewall rules, and MTU tuning.
Self-Host Nextcloud
Install a production Nextcloud server using Nginx, PHP-FPM, MariaDB, and Redis — including systemd-managed cron and performance tuning.
Schedule Backups with systemd Timers
Use systemd timers to schedule reliable backups with OnCalendar, RandomizedDelaySec, and Persistent=true — replacing cron with better logging and catch-up runs.
rsync Recipes Every Sysadmin Needs
Practical rsync recipes for mirrors, SSH transfers, exclude lists, bandwidth throttling, hard-link snapshots, and safe dry-run verification. Ready to adapt.
Recover a Broken Package Database
Fix half-installed packages, corrupt RPM databases, and broken apt/dpkg states with targeted recovery commands for Debian, Ubuntu, Fedora, and RHEL systems.
Replace fail2ban with CrowdSec
Replace fail2ban with CrowdSec: install the agent and firewall bouncer, activate crowd-sourced blocklists, configure scenarios, and verify enforcement with nftables.
Neovim From Scratch with Lua
Build a modern Neovim config from scratch using init.lua, lazy.nvim, Treesitter, nvim-lspconfig, and Mason — step by step with no pre-made distribution.
Diagnose Routing with mtr and traceroute
Learn to diagnose network routing problems using mtr and traceroute, covering ICMP/UDP/TCP probe types, asymmetric routing, and when results mislead you.
Mastering tmux (Power-User Guide)
Go beyond the basics with tmux: persistent sessions, pane layouts, vi copy mode, a production tmux.conf, session scripting, and TPM plugins including resurrect.
Mastering jq for JSON on the Command Line
Master jq from field access to map/select, object reshaping, type conversion, and safe shell variable injection for real-world JSON processing on the command line.
Audit a Linux Server with Lynis
Run Lynis on any Linux server, interpret the hardening index and findings, apply the most impactful fixes, and automate weekly audits with a systemd timer.
VLANs on Linux
Configure 802.1Q VLAN sub-interfaces on Linux using ip link and NetworkManager, covering switch trunk port setup, persistence, and firewall integration.
Troubleshoot a Linux Bootloader (GRUB, systemd-boot)
Step-by-step repair guide for GRUB and systemd-boot on UEFI and legacy BIOS systems, covering BLS entries, dual-boot fixes, and EFI partition recovery.
Recover a Linux System from a Live USB
Boot a live USB, mount your broken Linux install, chroot into it, and fix the most common failures: bad fstab, forgotten passwords, and broken GRUB.
Detect Rootkits and Malware on Linux
Use chkrootkit, rkhunter, ClamAV, and Lynis to scan a Linux system for rootkits and malware — what each tool actually checks and how to read the results.
Linux Power Management for Laptops
Extend Linux laptop battery life using TLP, auto-cpufreq, PowerTOP, and kernel boot parameters. Practical configuration for all major distros.
Bash Globbing and Extended Glob Patterns
Master Bash globbing beyond * and ?: learn globstar recursive matching, extglob operators, brace expansion, and the gotchas that cause real-world bugs.
Linux Disk Encryption Strategies
A practical guide to Linux disk encryption: full-disk LUKS2, encrypted /home partitions, kernel-native fscrypt, and file-level tools age and gocryptfs.
Linux Bridges (br0 etc.) Explained
Learn how Linux bridges (br0) work, when to use them for VMs and containers, how to configure them with iproute2, and how to manage STP correctly.
Install PostgreSQL with Sensible Tuning
Install PostgreSQL from PGDG repos and apply evidence-based tuning for shared_buffers, work_mem, effective_cache_size, and WAL settings on any Linux server.
Install and Use Podman (Docker without a daemon)
Run OCI containers without a daemon using Podman. Covers rootless setup, podman-compose, and systemd Quadlet units for production-grade container management.
Install and Configure HAProxy
Install HAProxy and configure frontends, backends, ACL-based routing, TLS termination, sticky sessions, and HTTP health checks on modern Linux distros.
Self-Host Git with Gitea or Forgejo
Install Forgejo or Gitea on Linux, configure Caddy as a reverse proxy, enable SSH access on a custom port, push your first repository, and register an Actions runner.
Install Elasticsearch or OpenSearch
Install Elasticsearch 8 or OpenSearch 2 on Linux, tune JVM heap, configure security, set up single-node or cluster mode, and verify with live index operations.
Immutable Linux: Fedora Silverblue, Vanilla, openSUSE Aeon
Learn how Fedora Silverblue, openSUSE Aeon, and Vanilla OS implement immutable, atomic updates with OSTree, transactional-update, and ABRoot—and how to work productively inside them.
Host Multiple Sites on One Linux Server
Host multiple websites on one Linux server using Nginx as a reverse proxy, systemd-managed app services, per-domain TLS, and isolated system users.
Diagnose and Fix "No Space Left" When Disk Is Empty (Inodes)
"No space left" with gigabytes free? You've hit inode exhaustion. Learn how to confirm it, find the culprit directories, clean up millions of files, and prevent recurrence.
Docker Compose in Production
Deploy Docker Compose in production with compose.yaml, explicit networks, named volumes, restart policies, journald logging, and file-based secrets.
How to Diagnose a Slow Network on Linux
Diagnose Linux network slowness layer by layer using ping, mtr, iperf3, ethtool, tcpdump, and dmesg—from bad cables to kernel buffer tuning.
Debug systemd Units that Won't Start
Learn a repeatable workflow to debug systemd services that won't start: status output, journalctl, systemd-analyze verify, and safe override.conf patches.
Configure the Touchpad and Multitouch Gestures
Configure Linux touchpad behavior and multitouch gestures using libinput, libinput-gestures, and native GNOME and KDE Plasma settings on both Wayland and X11.
Configure systemd-networkd
Learn how to configure systemd-networkd with .network unit files for static IPs, DHCP, bonding, bridges, and VLANs on modern Linux servers.
firewalld Zones and Rich Rules in Practice
Assign interfaces to firewalld zones, open services, write rich rules for source-based and rate-limited policies, and manage runtime vs permanent config.
chrony and Secure Time on Linux
Configure chrony with NTS (authenticated NTP over TLS) on Linux to prevent clock-skew attacks and protect Kerberos, TLS, and TOTP authentication.
Build an nftables Firewall Script
Build a complete nftables firewall from scratch: tables, chains, sets, default-deny input policy, service allowlisting, and persistent systemd configuration.
Build a Real Command-Line Tool in Shell
Build a proper CLI tool in Bash with strict mode, long/short argument parsing, --help, usage(), and clean packaging via install and a Makefile.
The Linux Boot Process Explained
Trace the full Linux boot sequence from UEFI firmware through GRUB2, the kernel, initramfs, and systemd to your login prompt — with diagnostics at each stage.
Bash Functions and Variable Scoping
Master Bash function scoping with local variables, source-based libraries, correct use of return codes, and array passing techniques including namerefs.
Bash Arrays and Associative Arrays
Master bash indexed and associative arrays: declaration, element access, looping, mapfile, namerefs, and practical patterns for real scripting work.
Back Up Linux with Borg or restic
Set up encrypted, deduplicated backups with BorgBackup or restic: local and remote repos, retention pruning, restoring files, and systemd timer scheduling.
Arch vs EndeavourOS vs Manjaro
Arch, EndeavourOS, and Manjaro compared honestly: repository differences, AUR compatibility, install experience, and which one suits your actual workflow.
Alpine Linux on Servers and in Containers
Deploy Alpine Linux on servers and in containers: musl vs glibc trade-offs, apk package management, OpenRC init, security hardening, and container best practices.
How to Write Portable POSIX Shell Scripts
Write shell scripts that run correctly under dash, BusyBox sh, and Bash by avoiding Bashisms, using POSIX constructs, and linting with shellcheck.
How to Write Bash Functions Properly
Learn to write reliable bash functions: safe argument handling, correct return values, proper use of local, error handling with set -e, and clean naming conventions.
How to Use a YubiKey on Linux
Use a YubiKey on Linux for PIV SSH, FIDO2 sudo and login via PAM, GPG smart card subkeys, and SSH through gpg-agent — step by step.
How to Use jq for JSON on the Command Line
Learn to filter, transform, and reshape JSON on the command line with jq — covering selectors, map/select, object construction, and real API pipelines.
How to Use fzf, the Fuzzy Finder
Install and configure fzf to fuzzy-search files, shell history, processes, and git branches — with shell integration for Bash, Zsh, and Fish.
How to Set Up Unbound as a Recursive DNS Resolver
Install Unbound, configure root hints and DNSSEC validation, and point your LAN at a private recursive DNS resolver — no upstream forwarder required.
How to Run Rootless Containers with Podman
Run OCI containers without root or a daemon. Learn Podman installation, user namespace setup, rootless networking, and systemd Quadlet unit files for production use.
How to Set Up Pi-hole on a Linux Server
Set up Pi-hole on Linux for network-wide ad and tracker blocking — covers installation, blocklists, gravity updates, conditional forwarding, and DHCP.
How to Configure nginx as a Reverse Proxy
Configure nginx as a reverse proxy: proxy_pass basics, correct header forwarding, WebSocket upgrade handling, and TLS termination with Let's Encrypt.
How to Set Up HiDPI and 4K Displays on Linux
Configure HiDPI and 4K scaling on Linux across GNOME, KDE, Sway, and X11—including fractional scaling and mixed-DPI multi-monitor setups.
How to Set Up and Use Docker Compose
Learn how to write Compose files, define networks and volumes, manage environment variables, and control multi-container Docker stacks with the modern Compose CLI plugin.
How to Add Two-Factor Authentication to SSH
Enforce two-factor authentication on SSH using PAM and Google Authenticator TOTP, with YubiKey alternatives and per-user exemption patterns for automation accounts.
How to Reset the Linux Network Stack
Reset a broken Linux network stack without rebooting: restart NetworkManager or systemd-networkd, flush the DNS cache, renew DHCP leases, and clear stale routes.
How to Recover Deleted Files on Linux with PhotoRec
Accidentally deleted files on Linux? PhotoRec scans raw disk sectors to recover documents, images, and more — no filesystem needed. Here's exactly how.
How to Protect nginx with fail2ban
Build custom fail2ban filters for nginx to block bad bots, brute-force attempts, and scanners — with tuned ban times and firewall backend configuration.
Master Vim: A Practical Path Beyond the Basics
Go beyond the basics: master Vim buffers, registers, macros, and the help system, then add only the plugins that genuinely earn their place.
How to Manage Dotfiles with GNU Stow
Use GNU Stow to turn a Git repository into a symlink farm for your dotfiles — deploy any config to a new Linux machine in under a minute.
How to Install Traefik as a Reverse Proxy
Install Traefik v3 as a Docker-based reverse proxy with automatic Let's Encrypt TLS, static and dynamic config, and label-driven service routing.
How to Install Rocky Linux on a Server
Install Rocky Linux 9 on a server with correct partitioning, static networking, a minimal software profile, and post-install hardening steps.
How to Install and Configure Redis
Install Redis on Debian, Ubuntu, Fedora, and Arch; configure persistence, memory limits, authentication, and manage the service with systemd for production use.
How to Install RabbitMQ on Linux
Install RabbitMQ on Debian, Ubuntu, Fedora, Rocky, and Arch using official repos, enable the management UI, create users, and test a live queue.
How to Install Prometheus and Grafana on Linux
Install Prometheus and Grafana on Linux, configure node_exporter scraping, connect the datasource, and build your first system metrics dashboard.
How to Set Up HAProxy as a Load Balancer
Set up HAProxy as an HTTP load balancer with active health checks, stick tables for session persistence, and a live stats dashboard — step by step.
How to Fix Screen Tearing on Linux
Fix screen tearing on Linux for Intel, AMD, and NVIDIA GPUs using TearFree, Force Composition Pipeline, and compositor settings on X11 and Wayland.
How to Fix dpkg "Broken Packages" Errors
Fix dpkg broken package errors step by step: configure pending packages, repair dependencies with apt --fix-broken, force-remove stuck packages, and rebuild the dpkg database.
How to Detect Rootkits with rkhunter
Install rkhunter, build a clean file-property baseline, tune the config to cut false positives, and automate daily scans with a systemd timer.
Wayland vs X11: How to Choose and Configure Each
Know when to run Wayland or X11, how to check your current session, switch at login with GDM/SDDM/LightDM, and handle NVIDIA and XWayland edge cases.
How to Benchmark Disk Performance with fio
Learn to benchmark Linux disk performance with fio: writing job files, testing latency and throughput, and interpreting IOPS and percentile output correctly.
How to Audit Linux Hardening with Lynis
Run Lynis to audit your Linux server, interpret the hardening index and warning output, and work through findings from critical to low-effort wins.
Writing Technical Documentation (the Linux way)
Write and publish Linux technical documentation using Markdown, AsciiDoc, man pages, DocBook, pandoc, and MkDocs—with CI integration and practical examples.
What Is Arch Linux? (And Should You Use It)
Arch Linux is a rolling-release, DIY distribution built on minimal defaults and user control. Learn what it demands and whether it fits your workflow.
Webmin: The Complete Setup Guide
Install Webmin on Debian/Ubuntu and RHEL-family Linux, configure core modules, and harden it with TLS, 2FA, and IP restrictions for production use.
How to Use tmux
Master tmux sessions, windows, panes, detach/reattach, and a practical ~/.tmux.conf so you can manage persistent terminal workflows like a pro.
How to Upgrade to a New Distro Release
Step-by-step in-place distro upgrades: Ubuntu/Debian do-release-upgrade, Fedora dnf system-upgrade, and Arch Linux rolling upkeep, with verification and recovery tips.
Understanding Linux Load Average
Load average measures scheduler demand—not CPU usage. Learn what the three numbers really mean, how to interpret them per CPU count, and how to separate CPU from I/O load.
Touchscreen Configuration on Linux
Configure Linux touchscreens end-to-end: verify libinput detection, calibrate under Wayland and X11, map to the right display, and enable multi-touch gestures.
The X Window System Explained
Understand how X11 actually works — X server, clients, display managers, window managers, compositors — and how Wayland's architecture differs and why it matters.
Sync Phones and Handheld Devices with Linux
Sync Android phones with Linux using MTP for file transfer and KDE Connect or GSConnect for wireless integration. Includes PalmOS history and CalDAV setup.
Squid Debug Logging: Turn It On and Read It
Learn how to enable Squid debug_options, navigate cache.log and access.log, and trace the exact cause of a denied or failed proxy request.
Set Up Squid as a Caching Web Proxy
Install and configure Squid as a forward caching proxy on Linux — covering ACLs, cache tuning, firewall rules, and explicit vs transparent intercept mode.
Squid ACL Configuration Explained
Learn how Squid proxy ACL definitions and http_access rules work, why ordering is critical, and avoid the most common allow/deny configuration mistakes.
How to Set Up Multiple Monitors on Linux
Configure multiple monitors on Linux: physical arrangement, per-display resolution, refresh rates, and scaling on both X11 (xrandr) and Wayland (GNOME, KDE, Sway, kanshi).
How to Set Up GPG Encryption
Generate GPG key pairs, encrypt and decrypt files, sign data, manage your keyring, and verify signatures on Debian, Fedora, and Arch Linux.
How to Set Up an NFS Server
Set up a production-ready NFSv4 server on Linux: configure exports, mount shares on clients, lock down permissions, and tune read/write performance.
How to Set Up a VPN with WireGuard
Set up a WireGuard VPN on Linux from scratch: generate keys, configure server and client peers, enable routing, and verify a live encrypted tunnel.
How to Set Up a Samba File Share
Step-by-step guide to installing Samba, creating a share user, configuring smb.conf, opening the firewall, and mounting the share from Windows and Linux clients.
How to Set Up a LEMP Stack
Install and configure Nginx, MariaDB, and PHP-FPM on a fresh Linux server. Covers Debian, Ubuntu, Fedora, RHEL, Rocky, and Arch with systemd service management.
How to Set Up a Firewall with firewalld
Learn how to configure firewalld using zones, services, rich rules, and source bindings — with a clear explanation of runtime vs permanent changes.
How to Set Up a DHCP Server on Linux
Install and configure ISC DHCP or Kea on Linux: define scopes, set static reservations, inspect leases, open firewall ports, and hook into dynamic DNS.
A Practical Guide to sed and awk
Learn sed and awk through practical examples: substitutions, in-place edits, field splitting, pattern-action programs, and real pipeline use cases.
How to Secure Webmin
Harden Webmin against attack: restrict access by IP, enforce HTTPS with valid certs, set up TOTP two-factor auth, integrate Fail2ban, and lock down modules.
How to Run a Node.js App in Production with PM2
Deploy a Node.js application with PM2: process management, ecosystem config files, systemd startup integration, and structured log rotation.
RHEL vs Rocky vs AlmaLinux
CentOS is gone. Here's how RHEL, Rocky Linux, and AlmaLinux compare on governance, compatibility, certifications, and which to choose for production.
How to Recover a Forgotten Root Password
Forgot the Linux root password? Boot into single-user mode or use rd.break to reset it safely, with steps for Debian, Fedora/RHEL, and Arch.
Port Forwarding on Linux
Forward ports on Linux using nftables DNAT rules, SSH local/remote tunnels, and router NAT configuration — with persistence and troubleshooting tips.
MTU and Packet Fragmentation Explained
Learn what MTU is, how path MTU discovery works, why it breaks, and how to diagnose and fix MTU mismatches on Linux with practical commands and examples.
How to Manage Disk Partitions on Linux
Learn to create, resize, and format Linux disk partitions using fdisk and parted, covering GPT, ext4/xfs/btrfs filesystems, fstab, and safe resizing procedures.
LVM: The Logical Volume Manager Explained
Learn how LVM works — Physical Volumes, Volume Groups, Logical Volumes — then create, resize, and snapshot volumes with real commands on any major Linux distro.
Linux Server Security Checklist
A step-by-step Linux server hardening checklist: secure SSH, firewall rules, automatic updates, service auditing, fail2ban, and intrusion detection for any internet-facing server.
Linux on Old and Low-RAM Hardware
Breathe life into old hardware with lightweight Linux desktops, proper swap file setup, zram compression, and I/O tuning for machines with 1–4 GB of RAM.
Linux for Astronomy
Set up KStars, Stellarium, and INDI on Linux for telescope control, automated imaging sequences, and image stacking with Siril.
Linux DNS Configuration
Configure Linux DNS end-to-end: understand /etc/resolv.conf, manage systemd-resolved, use /etc/hosts for static overrides, and verify with dig.
Lightweight Window Managers and Desktops
Install and configure i3, Sway, and Openbox on Linux. Learn tiling vs floating WMs, minimal session setup, status bars, and autostart with systemd.
IP Masquerading and NAT on Linux
Set up IP masquerading and NAT on Linux using nftables to turn any machine into a router. Covers ip_forward, SNAT, DNAT, and iptables equivalents.
How to Install and Configure PostgreSQL
Install PostgreSQL on Debian, Fedora, or Arch, then configure roles, databases, pg_hba.conf authentication, and secure remote access in clear, production-ready steps.
How to Install NVIDIA Drivers on Linux
Install NVIDIA proprietary drivers on Ubuntu, Debian, Fedora, and Arch Linux. Covers driver selection, Wayland setup, and troubleshooting common failures.
How to Install MySQL or MariaDB
Install MySQL or MariaDB on Debian, Fedora, or Arch; secure it with mysql_secure_installation; create users with least-privilege grants; and automate backups.
How to Install Docker on Linux
Install Docker Engine on Ubuntu, Debian, Fedora, RHEL, or Arch from the official repository, configure the docker group, run a first container, and get Compose working.
How to Install the Apache Web Server
Install Apache on Linux, enable modules, configure named virtual hosts, use .htaccess, and verify your setup — covering Debian, Ubuntu, Fedora, RHEL, and Arch.
How to Install and Configure nginx
Install nginx, configure server blocks and document roots, set up a reverse proxy to a local application, and verify everything with nginx -t and curl.
How to Install and Configure fail2ban
Install fail2ban, configure the SSH jail, tune ban times, write custom filters, and verify bans are working — on Debian, Fedora, and Arch.
How TCP/IP Networking Actually Works
Trace a TCP connection from socket to wire: routing table lookups, ARP, the three-way handshake, MTU/PMTUD, and how NAT rewrites packets on a Linux gateway.
How to Harden SSH on Linux
Lock down OpenSSH with key-only auth, disabled root login, user allowlists, and firewall rules. Step-by-step for Ubuntu, Fedora, RHEL, and Arch.
Free SSL Certificates with Let’s Encrypt
Issue and auto-renew free TLS certificates with Let's Encrypt and Certbot for Nginx or Apache on Ubuntu, Fedora, and Arch Linux.
How to Diagnose High CPU and Memory Usage
Learn to diagnose Linux CPU and memory problems using top, htop, load average, and the OOM killer log—from spotting runaway processes to preventing OOM kills.
How to Fix Audio Problems on Linux
Fix Linux audio issues step by step: identify PipeWire vs PulseAudio, unmute ALSA channels, select the right output device, reload drivers, and verify hardware.
How to Fix a Broken GRUB Bootloader
Fix a broken GRUB bootloader by booting from live media, chrooting into your installed system, reinstalling GRUB, and regenerating grub.cfg — covers BIOS/MBR and UEFI/GPT.
How to Encrypt a Disk with LUKS
Encrypt a full disk or individual partition on Linux using LUKS2 and cryptsetup, including key management, boot integration, and header backups.
How to Dual-Boot Linux and Windows
Shrink the Windows partition, install Linux without breaking the bootloader, configure GRUB, and handle Secure Boot — all in the correct order.
How to Create a systemd Service
Learn to write systemd service unit files from scratch: unit types, dependency directives, restart policies, enabling at boot, and reading logs with journalctl.
How to Configure sudo Safely
Learn to configure sudo securely using visudo, sudoers syntax, per-command restrictions, NOPASSWD, and drop-in files to enforce least-privilege access on Linux.
Configure a Squid Proxy with Webmin
Install Squid and the Webmin Squid module, configure disk and memory caching, set LAN access controls, and verify the proxy is serving cached responses.
How to Configure the SMTP HELO/EHLO Name
Set the correct SMTP HELO/EHLO hostname in Postfix and Sendmail, configure FCrDNS records, and verify your mail server won't be rejected or spam-flagged.
Configure a UPS on Linux with NUT
Install and configure Network UPS Tools (NUT) on Linux to detect your UPS, load the right driver, and trigger a safe automatic shutdown when battery runs low.
C Pointers Explained
Understand C pointers from first principles: addresses, dereferencing, pointer arithmetic, arrays, common bugs like null dereferences and dangling pointers, and how to use ASan and Valgrind.
How to Build Software from Source on Linux
Build Linux software from source using configure, make, and make install — with dependency tips, CMake and Meson coverage, and clean-install strategies.
Build an Intranet Server on Linux
Set up a complete small-office intranet on one Linux box: Nginx web server, dnsmasq local DNS, Samba file sharing, and a Wiki.js team wiki.
Btrfs Basics and Snapshots
Learn Btrfs subvolumes, instant copy-on-write snapshots, and safe system rollback — with both manual btrfs commands and Snapper automation.
The Best Linux Distros for Servers
Compare Ubuntu LTS, Debian, AlmaLinux, Rocky Linux, RHEL, Arch, and SLES for server use: support lifecycles, stability trade-offs, and how to choose the right fit.
AppArmor Explained
Learn how AppArmor profiles work, how to switch between enforce and complain mode, create new profiles, and diagnose access denials on Ubuntu, Debian, and Arch.