Real errors, real fixes — the gotchas that eat hours, solved in minutes.
You installed the tool, but the shell insists it doesn't exist. Nine times out of ten it's a PATH problem — here's how to confirm it and fix it.
A container or binary dies instantly with 'exec format error'. It almost always means the wrong CPU architecture — an amd64 image on an ARM machine, or vice versa. Here's how to spot and fix it.
Git warns you're in 'detached HEAD' state and it sounds alarming. It just means you're looking at a commit directly instead of a branch. Here's what it is and how to keep any work you do there.
Python raises a KeyError with a key name attached — you asked a dictionary for a key it doesn't have. Here's why it happens (often with JSON or config) and the clean ways to handle a missing key.
SSH refuses to connect with 'Host key verification failed' and a scary warning about the remote identity changing. It's a security check doing its job. Here's how to tell a rebuilt server from a real problem.
Python throws 'list index out of range' — you asked for an item that isn't there. Usually it's an off-by-one, an empty list, or a hard-coded position. Here's how to find and fix each.
Python throws 'NoneType object has no attribute...' and points at a line that looks fine. The real cause is one step earlier: something you expected to hold a value is actually None. Here's how to find it.
You run sudo and Linux says you're 'not in the sudoers file' — with an ominous note about being reported. It just means your account lacks admin rights. Here's how to grant them (from an account that has them).
Nginx refuses to start with 'bind() to 0.0.0.0:80 failed (Address already in use)'. Something else already owns port 80 — often Apache, or another Nginx. Here's how to find and clear it.
Nginx serves a 403 Forbidden. Unlike a 404, the file is found — Nginx just won't hand it over. It's almost always file permissions or a missing index. Here's the short list to check.
apt refuses to install with 'Could not get lock /var/lib/dpkg/lock'. Another package process is already running. Usually you just wait a minute — here's how to confirm that, and what to do if it's truly stuck.
Docker greets you with 'Cannot connect to the Docker daemon. Is the docker daemon running?' Usually it isn't. This is about the engine being stopped — not permissions. Here's how to start it.
Your very first commit fails with 'Please tell me who you are.' Git just needs a name and email to stamp on commits — you haven't set them yet. Two commands and you're done, for good.
apt install fails with 'E: Unable to locate package' for something you know exists. Usually your package list is just stale, or the package lives in a repo you haven't enabled. Here's the fix order.
Your container keeps dying with exit code 137 and 'OOMKilled'. That's the Linux out-of-memory killer, not a crash in your code. Here's how to confirm it and give the container the memory it needs.
Git stopped mid-merge with 'CONFLICT' and strange <<<<<<< markers in your files. It's not broken — Git is asking you to choose. Here's how to read the markers and finish the merge calmly.
A build or pull dies with 'no space left on device', but df says you have room. Docker hoards old images, stopped containers, and volumes. Here's how to find and reclaim the space safely.
Fresh Docker install, and every command says permission denied on the daemon socket. It's not a bug — your user just isn't in the docker group yet. Here's the fix and why it works.
Your git push fails with 'Authentication failed' even though the password is right. GitHub stopped accepting passwords over HTTPS years ago. Here's how to use a token or SSH key instead.
Your push is rejected with 'failed to push some refs' and a note about non-fast-forward. It means the remote has commits you don't. Here's how to pull them in safely and push again.
Every git command answers with 'fatal: not a git repository'. Git isn't broken — you're just standing in a directory it doesn't track. Here's how to tell where the boundary is and fix it.
An upload fails with '413 Request Entity Too Large'. Nginx has a size limit on request bodies, and your file blew past it. Here's the one directive to change — and why the app never even saw the request.
A 504 from Nginx means your app was reached but took too long to answer. Unlike a 502, the app is alive — just slow. Here's how to tell a real timeout from a config that's too impatient.
pip install now refuses with 'externally-managed-environment' on modern Linux. It's a deliberate guardrail, not a bug — it's stopping you from breaking your system Python. Here's the right way around it.
Python throws IndentationError or TabError and the code looks perfectly lined up. The culprit is invisible: tabs and spaces mixed together. Here's how to see it and stop it for good.
systemctl says your service is 'failed' but not why. The answer is in the journal. Here's how to read systemd logs with journalctl and find the exact line that killed your service.
"No space left on device" can take a server down. Here's how to quickly find the culprit and reclaim space safely.
"Connection refused" is precise, not mysterious. It tells you something specific — here's how to read it and act on it.
That "Not Secure" label scares users away. Here's what triggers it and the usual fixes to get the padlock back.
You pip-installed it, but Python swears the module doesn't exist. The cause is almost always which Python you're actually running.
The most common Linux error there is. Here's how to read it, fix it properly, and avoid the lazy 'just use sudo on everything' trap.
A 502 from Nginx almost always means one thing: it couldn't reach your app. Here's the short list of why, in the order to check them.
You run a container and it's gone a second later. Here's the systematic way to find out why, instead of guessing.
"Address already in use" means something is already sitting on your port. Here's how to find exactly what — and free it up safely.
The single most demoralising error for anyone new to servers. It's almost never random — here's the checklist that fixes it 95% of the time.