Hands-On Linux and DevOps Challenges.
Fix real Linux servers.
Practice your troubleshooting skills.
Learn By Fixing is a platform where you practice Linux, Docker, and DevOps troubleshooting through hands-on challenges.
Each scenario gives you a broken Linux server and a terminal.
Your goal is simple: Fix it.
These scenarios are built for engineers who want real-world troubleshooting practice:
- Engineers preparing for DevOps or SRE interviews.
- Developers moving into DevOps roles.
- Engineers who want to get better at debugging production issues.
All scenarios run in a browser-based terminal. No installation required.
- Start a scenario.
- Investigate the problem from the terminal.
- Fix the issue.
- Click on "Check Solution" to verify your fix.
Stuck? You can reveal hints or view the full walkthrough anytime.
Here are some of the troubleshooting scenarios available on the platform:
| Scenario | Tags | Skill level | Try |
|---|---|---|---|
| Reloading without restarting | Linux | Beginner | Link |
| Where is it logging? | Linux | Beginner | Link |
| What is writing to this file? | Linux | Beginner | Link |
| My app's port is already taken | Linux | Beginner | Link |
| Too much logging | Linux | Beginner | Link |
| Wrong version | Linux | Beginner | Link |
| Program not found | Linux | Beginner | Link |
| Errors only | Linux | Beginner | Link |
| Don't overwrite previous reports | Linux | Beginner | Link |
| That Kubernetes secret is wrong | Linux | Beginner | Link |
| Exiting vi the wrong way | Linux | Beginner | Link |
| Where shall I put the config file? | Linux | Beginner | Link |
| Port already used, but which one? | Linux | Intermediate | Link |
| A verbose Docker container | Docker | Beginner | Link |
| Reloading without restarting the Docker container | Linux | Intermediate | Link |
| Docker image is too big | Docker | Intermediate | Link |
| Containerized app does not start | Docker | Intermediate | Link |
| Broken Docker Compose file | Docker | Intermediate | Link |
These guides cover the core concepts used in the scenarios:
| Guide | Description |
|---|---|
| Signals | Learn about signals, the most common ones, and how to send them in Linux. |
| File descriptors | Learn about file descriptors, the three standard ones, and what tools you can use to work with them. |
| Environment variables | Learn about env vars, the most common ones, and how to work with them in Linux. |
| Shell redirection | Learn how to redirect input and output when running a program from the shell. |
| Pipes | Learn how pipes work and how to connect commands using them. |
| System calls and strace | Learn how to inspect system calls using strace. |
After years of running mentoring sessions and technical interviews, one thing kept bothering me:
Creating realistic troubleshooting scenarios is too much work.
To simulate a simple issue, you need to:
- Provision infrastructure with Terraform.
- Configure everything with Ansible.
- Break things on purpose.
- Write validation scripts.
- Tear everything down to avoid cloud costs.
That's a lot of overhead for a 30-minute debugging exercise.
What I actually wanted was troubleshooting practice, not building something from scratch.
So I built Learn By Fixing: a platform with ready-to-use scenarios where you can immediately practice your troubleshooting skills.
