-
Building and Installing Software from Source on Linux
Building and installing software from source on Linux with the classic configure/make/install pattern, and how to keep it uninstallable.
-
Watching Files for Changes on Linux with inotify
Watching files for changes on Linux with inotify, why it beats polling, and the watch limit that trips up large development setups.
-
What’s New in the Linux Kernel 6.x Series for Desktop and Server Users
A tour of the Linux 6.x kernel series’ most practical improvements for desktop responsiveness, laptop battery life, and server I/O throughput.
-
Running Local LLMs with Ollama: A Practical Guide
Install Ollama on Linux, pull your first models, call the local REST API from Python, and build a custom Modelfile tuned for your own use case.
-
WSL2 vs a Native Linux Install: Choosing the Right Dev Environment on Windows
A practical comparison of WSL2 and native Linux for development in 2026, including the single biggest WSL2 performance mistake and how to avoid it.
-
Setting Up Remote Desktop Access on Linux with VNC and xrdp
Setting up remote graphical desktop access on Linux with VNC and xrdp, and why a lightweight desktop environment matters for either.
-
Docker and Podman on Linux: Containerization Best Practices in 2026
A practical comparison of Docker and Podman on Linux in 2026, plus Dockerfile and Compose best practices that apply to both.
-
Understanding Predictable Network Interface Naming on Linux
Why modern Linux replaced simple eth0 naming with predictable interface names, and the boot-order problem it was designed to fix.
-
The Unix Wars: How Fragmentation Nearly Killed Unix
The Unix wars of the 80s and 90s, the fragmentation between commercial variants, and how Linux ultimately succeeded where standardization efforts alone fell short.
-
Linux Archiving and Compression: tar, gzip, and zip Compared
Linux archiving and compression with tar, gzip, bzip2, and zip compared, and why tar and compression were designed as separate tools.
-
Debugging Programs on Linux with strace and ltrace
Debugging misbehaving programs on Linux with strace and ltrace, and how to turn a mysterious hang into an obvious cause.
-
Slackware: The Oldest Surviving Linux Distribution
Slackware, the oldest actively maintained Linux distribution, and why its deliberately minimal, no-hand-holding philosophy has endured for three decades.
-
Building a Custom Linux Kernel from Source
A hands-on walkthrough of compiling a custom Linux kernel from source: fetching, configuring from your running kernel’s config, and installing safely.
-
Windows Subsystem for Linux: A History from Bash-on-Windows to WSL2
From syscall translation in WSL1 to a real Linux kernel in WSL2 — the history of how Windows learned to actually run Linux.
-
Network Interface Bonding on Linux Explained
Network interface bonding on Linux explained: the different modes, and why LACP requires matching switch-side configuration.
-
Linux Filesystem Types Compared: ext4, XFS, Btrfs, ZFS
Comparing Linux filesystem types — ext4, XFS, Btrfs, and ZFS — and which use cases each one is actually built for.
-
Automating Linux Server Configuration with Ansible
Automating Linux server configuration with Ansible playbooks, and why idempotency is the core concept that makes it safe to re-run.
-
The Linux Boot Process and GRUB Explained
The Linux boot process from firmware to a working shell, explained step by step, and recovering from a broken GRUB configuration.
-
Linux Disk I/O Schedulers Explained
Linux disk I/O schedulers explained, and why the right choice genuinely differs between spinning HDDs and SSDs.
-
Setting Up a Headless Linux Home Server
The essential setup checklist for a headless Linux home server: static IP, hardened SSH, unattended upgrades, and what to actually run on it first.
-
Managing Log Files on Linux with logrotate
Managing log files on Linux with logrotate, and why the postrotate script is essential for apps that keep their log file open.
-
Cloning Disks on Linux with dd and Clonezilla
Cloning disks on Linux with dd and Clonezilla, and the classic if/of mixup that makes dd a genuinely dangerous tool to use carelessly.
-
Container Networking Basics on Linux
Container networking basics on Linux: how containers get connectivity, and why same-network containers can reach each other by name.
-
A Brief History of Linux Window Managers: twm to Modern Compositors
From twm’s bare-bones 1980s simplicity to modern compositing desktops: a history of Linux window managers and the philosophies behind them.
-
CLI vs GUI on Linux: Why the Terminal Still Wins for Admins
Why the CLI remains the default for Linux administrators despite mature GUI tools: scriptability, remote efficiency, and where GUIs still genuinely win.
-
Essential Linux Network Troubleshooting Tools
Essential Linux network troubleshooting tools: ping, dig, mtr, ss, and tcpdump — and why ss has replaced netstat as the modern default.
-
Automating Security Updates on Linux Servers
Automating security-only updates on Linux servers with unattended-upgrades, and why scoping it to security patches specifically is the sensible default.
-
Setting Up Samba File Sharing Between Linux and Windows
Installing and configuring Samba on Linux, creating a Samba-specific user account, and connecting to the share from Windows File Explorer.
-
Diagnosing Network Path Issues on Linux with mtr
Diagnosing network path issues on Linux with mtr, and how to read hop-by-hop loss data to distinguish real problems from router ICMP deprioritization.
-
Linux User Management: useradd, usermod, and userdel
Linux user management with useradd, usermod, and userdel, and the -a flag mistake that silently wipes existing group memberships.
-
Linux Network Namespaces Explained
Linux network namespaces explained through a manual walkthrough of the exact mechanism Docker uses to isolate container networking.
-
Combining SSH Hardening, Fail2ban, and UFW for a Secure Server
Combining UFW, SSH hardening, and Fail2ban as layered defense on a Linux server, and why each layer covers a genuine gap the others don’t.
-
Understanding Linux Permissions: chmod, chown, and umask
A practical walkthrough of Linux’s permission model: reading rwx strings, chmod and chown in both numeric and symbolic form, umask, and the special bits.
-
Swap Partition vs Swap File on Linux: Which Should You Use
Swap partition vs swap file on Linux: why swap files became the modern default, and how to set one up correctly.
-
Monitoring Linux Servers with Prometheus and Node Exporter
Monitoring Linux servers with Prometheus and node_exporter, and why its pull-based scraping model differs from traditional push monitoring.
-
Real-Time Linux Monitoring with Netdata
Real-time, per-second Linux server monitoring with Netdata, and why granular sampling catches spikes coarser tools miss entirely.
-
Building a CLI Tool in Go from Scratch
Building a real CLI tool in Go with Cobra, and cross-compiling it into single, dependency-free binaries for Linux, macOS, and Windows.
-
Verifying Package Integrity on Linux with GPG and Checksums
Verifying package integrity on Linux with checksums and GPG signatures, and why a checksum alone doesn’t prove authenticity.
-
Managing Custom Package Repositories on Linux
Managing custom APT package repositories on Linux properly, including scoped signing keys and the real risk of mixing too many sources.
-
A Beginner’s Guide to the Linux Filesystem Hierarchy
A tour of the standard Linux directory layout — what /etc, /var, /proc, and the rest actually contain, and why the structure is so consistent across…
-
X11 vs Wayland: The Display Server Transition Explained
X11 vs Wayland: the security and architectural reasons behind Linux’s long-running display server transition.
-
Understanding Linux File Descriptors and ulimit
Understanding Linux file descriptors and ulimit, and why “too many open files” errors under load are almost always a limit, not a bug.
-
The History of Red Hat and Enterprise Linux
Red Hat’s history from a 1993 startup to a $34 billion IBM acquisition, and the CentOS controversy that reshaped the enterprise Linux ecosystem.
-
Modern Linux Networking with the ip Command
Modern Linux networking with the ip command, replacing the older ifconfig/route/arp tools, and why changes aren’t persistent by default.
-
The History of Unix and How Linux Came to Be
From Bell Labs’ 1969 Unix project through the GNU Project’s missing kernel to Linus Torvalds’ 1991 hobby project — how Linux actually came to exist.
-
Blocking Brute-Force Attacks on Linux with Fail2ban
Blocking brute-force attacks on Linux with Fail2ban: setup, jail configuration, and enabling it for services beyond just SSH.
-
Dependency Hell on Linux: Why It Happened and How Modern Tools Fixed It
What Linux dependency hell actually was, and the combination of better solvers and sandboxed packaging that largely fixed it.
-
Checking Disk Usage on Linux: du, df, and ncdu
Checking disk usage on Linux with du, df, and ncdu, and the phantom-deleted-file gotcha that keeps space from being reclaimed.
-
Centralized Log Management with rsyslog on Linux
Centralized log management with rsyslog on Linux, including forwarding logs to a remote server for tamper-resistant retention.
-
Linux Package Managers Compared: apt, dnf, pacman, zypper
Comparing Linux package managers across major distro families: apt, dnf, pacman, and zypper, and the package formats underneath them.
-
Tuning Linux Swappiness for Better Performance
Tuning Linux swappiness for better performance, and what the different value ranges actually mean for desktop vs server workloads.
-
Understanding Linux Process Management: ps, top, and htop
Using ps, top, and htop to diagnose Linux performance issues, plus what the R, S, D, and Z process states actually mean.
-
sudo vs su on Linux: What’s Actually Different
sudo vs su on Linux: the real difference in their models, and why sudo’s auditability made it the modern security default.
-
Linux Network Bridges Explained
Linux network bridges explained, and why they’re the exact mechanism behind Docker’s default container networking.
-
Managing Process Priority on Linux with nice and renice
Managing process priority on Linux with nice and renice, plus ionice for deprioritizing disk-heavy background jobs.
-
Time Synchronization on Linux with NTP and chrony
Time synchronization on Linux with chrony, why it replaced ntpd, and how clock drift silently breaks Kerberos authentication.
-
Software RAID on Linux with mdadm
Software RAID on Linux with mdadm: setting up a mirrored array, and the process for replacing a failed disk without data loss.
-
Setting Up NFS Shares on Linux
Setting up NFS shares on Linux for network file sharing, and when it’s the better choice over Samba for Linux-to-Linux setups.
-
Full Disk Encryption on Linux with LUKS
Full disk encryption on Linux with LUKS, and why backing up the LUKS header separately is a critical, often-skipped step.
-
Linux Control Groups (cgroups) Explained
Linux control groups (cgroups) explained, the exact mechanism containers use to enforce CPU and memory limits.
-
A Practical Linux Server Hardening Checklist
A practical Linux server hardening checklist: SSH lockdown, firewall defaults, fail2ban, and automatic security updates.
-
Understanding DNS on Linux: BIND, dnsmasq, and systemd-resolved
How systemd-resolved, dnsmasq, and BIND each fit into the Linux DNS stack, and which one actually matches your use case.
-
Configuring Timezone and Locale Settings on a Linux Server
Configuring timezone and locale on a Linux server correctly, and why servers should almost always run on UTC regardless of physical location.