Linuxtastic is a reference for people who use Linux and want to understand it. Not a news site, not a distribution review site, and not a place that pads a two-line answer into a thousand words. Every page is written to be the one you keep open in a tab while you fix something.
There are five sections and they answer different questions. If you already know which question you have, go straight to the table at the bottom of this page.
New to Linux? Read these five, in this order. About two hours in total, and they cover the ninety per cent of day-to-day Linux that everything else assumes you already know.
- Command line basics — wildcards, quoting, pipes and redirection, which are the four things every later page assumes.
- The Linux filesystem — what every top-level directory is for, so you stop guessing where things live.
- File permissions — the nine bits, ownership, and what
chmod 777actually does to you. - What a shell actually is — which startup file runs when, and why your alias vanishes over SSH.
- systemctl — starting, stopping and inspecting services, which is most of what running a Linux machine consists of.
After those, follow whatever you are actually trying to do. There is no curriculum here and no order you are supposed to go in.
The five sections
Commands — one page per command, written as a reference rather than a tutorial: the handful of options you will actually use, the traps, and a quick-reference table at the end. Start with grep, find and journalctl.
Guides — numbered steps that get one thing working, each step with a Verify: line so you know it worked before moving on, and an honest statement near the top of what the guide does not achieve. Start with securing a new server.
Learn — the mechanisms underneath. Commands tells you how; Learn tells you why, so the error messages start making sense and the commands stop being incantations. This is where the long-form pieces live.
Distros — one page per distribution, each saying who should run it and who should not. Nothing here is sold to you, and a project’s own stated status is printed rather than rounded up. Start with Ubuntu, Debian or Fedora.
Tools — modern replacements for classic utilities, honestly compared, always including a section on where the old tool is still the right answer. Start with fzf, which is the single largest upgrade you can make to a shell in five minutes.
The long reads. A handful of pages go considerably deeper than everything else. Each follows one thing through its entire path — stage by stage, in the order it actually happens — shows the command that inspects each stage, and ends with a worked diagnosis rather than a summary.
They take half an hour rather than five minutes. They are the ones to read when you want to stop guessing at a whole class of problem for good.
- From Power-On to a Login Prompt — the eight handoffs between the power button and a shell, and how to tell which one failed
- The Shell, in Depth — the eleven stages between pressing Enter and an exit status, and why quoting bugs are invisible
- Containers, All the Way Down — the nine stages between
docker runand a running process, and why there is no such thing as a container - What Ships in Your Container Image — the seven stages between the build that made an image and the moment nobody can account for it, and why deleting a file does not unpublish it
- The Life of a Package — the eight stages between
apt installand working software, and why the two package families do the same job in the opposite order - Memory, All the Way Down — the eight stages between
mallocand the OOM killer, and whyfreeis not the number to look at - Permissions and Privilege, Properly — the six independent layers between a process and a file, in the order the kernel checks them
- The Life of a Login — the seven stages between a password and a shell, and why having a shell proves less than you think
- The Life of a Write — the seven layers between
write()returning and the data actually existing - How Time Works on a Linux Machine — the seven stages between the clock nobody is keeping and somebody else’s tolerance, and why every timestamp on the machine is true and no two of them are necessarily comparable
- The Life of a System Call — the seven stages between the name you wrote and the answer your program believes, and why four different things can answer for the kernel
- The Life of a File Descriptor — the seven stages between
open()andclose(), and why closing something rarely closes it - How a Path Becomes a File — the six stages between a pathname and an open file, and why the same string can name two different things
- The Life of a Unix Socket — the seven stages between a socket with no name and a name with no socket, and why every tool on the machine repeats a path none of them has checked
- DNS, All the Way Down — the eight stages between
getaddrinfoand an address, and whydigcannot see the first three of them - The Life of a Packet — everything between your application’s
write()and the wire, and back again - What Happens When You Type a URL — the six stages between a keystroke and a response, and why most of them finish before a packet exists
- The Life of a Log Line — the seven stages between a program’s own buffer and the party who has to be convinced, and why every field in the record was written by somebody different
- The Life of a Scheduled Job — the eight stages between the line you wrote and the person who needed last night’s output, and why a job that ran and did nothing is green on every instrument the machine has
- The Life of a Block Device — the eight stages between the kernel noticing a disk and the other copy of it somewhere else, and why no name your disk has is both stable across a move and unique across a copy
Nine of them are practical rather than explanatory, and live in Guides:
- Running PostgreSQL Properly — the eight stages between a client sending
COMMITand data you could still restore a year later - Kubernetes, Honestly — the seven stages between
kubectl applyand a running container, and why nothing in the middle is ever sent anywhere - etcd, Honestly — the six stages between the member that answered your write and a restore, and why a restore that reports success can quietly break every controller you have
- The Life of a Certificate — the six stages between an ACME account and a certificate your server is actually serving, and why a renewal that succeeds proves less than you think
- The Half of Patching That Happens After the File Is Correct — the seven stages between a security advisory and a machine you can vouch for, and why the tool that is supposed to tell you what needs restarting stays silent about the processes it could not name
- The Life of a DNS Zone — the six stages between a change you made and a change that is over, and why four of the six clocks that decide when it is finished belong to somebody else
- Building a Container Image — the seven stages between the file you wrote and an image somebody else has to run, and why a green build log is a statement about the builder rather than about the image
- Restoring a Linux Server — the seven stages between the archive you kept and a working machine, and why almost everything a restore loses was in the backup all along
- The Life of an Outbound Email — the nine stages between an application calling
sendmailand a person deciding they wanted it, and why the one address you set is the only one nothing checks
If you only read one, read the one whose subject has been costing you time. They are deliberately independent, and each links to the others where they meet.
If you are here for something specific
| What you are trying to do | Go to |
|---|---|
| Set up a new server so it is not immediately compromised | Securing a new server |
| Choose a distribution | Distros |
| Search files or output for something | grep · ripgrep |
| Work out why a service will not start | journalctl · systemd beyond services |
| Work out whether a log line is telling you the truth, or why the one you needed is missing | The Life of a Log Line |
| Find out where the disk space went | Disk space · Filesystems |
| Work out which physical disk a mount point is actually reaching, or why a backup disk mounted cleanly and the data is stale | The Life of a Block Device |
| Set up backups you have actually tested | Automated backups · restic |
| Restore a backup, and find out what did not come back | Restoring a Linux Server |
| Work out why an email your application sent never arrived, and who received the bounce | The Life of an Outbound Email |
| Put a site or app behind a proper web server | nginx · Reverse proxy |
| Work out why a DNS change has not taken effect, or move a domain without an outage | The Life of a DNS Zone |
| Get an HTTPS certificate, and keep it renewing | The Life of a Certificate |
| Understand containers rather than copy commands | Containers · Docker basics |
| Build a container image of your own, and check it before you push it | Building a Container Image |
| Find out what your image actually publishes, or why a pinned digest stopped working | What Ships in Your Container Image |
| Work out why a program fails identically on a new host with nothing changed | The Life of a System Call |
| Understand — or safely restore — the database under a control plane | etcd, Honestly |
| Install software safely, or find out what an install changed | Package management · The Life of a Package |
| Find out whether a security update actually reached the running processes | The Half of Patching That Happens After the File Is Correct |
| Fix SSH access, keys or the changed-host-key warning | SSH keys · ssh |
| Work out why a login does not behave the same over SSH | The Life of a Login |
| Schedule something to run regularly | cron · systemd timers |
| Work out why a scheduled job runs every night and produces nothing, or why a timer has never fired | The Life of a Scheduled Job |
| Stop losing long jobs when your connection drops | tmux · Terminals and TTYs |
| Work out why a machine ran out of memory | Memory, swap and the OOM killer |
| Diagnose something that only fails over the network | The Life of a Packet |
| Work out why a local service on a socket cannot be reached | The Life of a Unix Socket |
| Fix a machine that will not boot | From Power-On to a Login Prompt |
| Work out why the clock is wrong, or why something refused a timestamp your machine produced | How Time Works on a Linux Machine |
| Understand a “permission denied” that makes no sense | Permissions and Privilege |
| Make your shell considerably nicer to use | fzf · Shell history |
How these pages are written
Three things are worth knowing before you rely on anything here.
Version-sensitive claims are checked against primary sources — kernel documentation, project release notes, man pages and specifications — not against other articles. Where something could not be confirmed, the page says so plainly rather than asserting it anyway. That is deliberate: a confident wrong version number costs you more than an admitted gap.
Where a tool is the wrong choice, that is stated. Every comparison includes a section on where the older tool is still right, every guide says what it does not achieve, and every distribution page says who should not run it. Nothing here is being sold to you.
Anything that can destroy data is flagged where it appears, not buried in a footnote — rm, dd, --delete, a bad fstab, chmod 777, usermod without -a, and the rest. If a command on this site can ruin your afternoon, the page says so next to the command.
