- Home /
- System Design /
- Learn Linux Like a DevOps Engineer: The Complete Beginner’s Guide
Learn Linux Like a DevOps Engineer: The Complete Beginner’s Guide
You don’t need to memorize hundreds of Linux commands. You need to understand how Linux thinks.
Introduction
Imagine it’s 2:13 AM.
Your phone suddenly starts ringing.
A production alert pops up on your screen.
Production Down: Website Not Reachable
Half asleep, you grab your laptop, connect to the VPN, and SSH into the production server.
ssh ubuntu@production-server
Within seconds, your fingers start typing commands almost instinctively.
top
df -h
systemctl status nginx
journalctl -xe
If your application runs on Kubernetes, you’ll probably type:
kubectl get pods
Every DevOps engineer has been in a situation like this. We use these commands almost every day. But have you ever stopped for a second and asked yourself one simple question
How does Linux actually understand these commands?
When you type:
ls
how does Linux know which files to display?
When you execute:
systemctl restart nginx
how does it know where the NGINX service is running?
When you start a Docker container,
docker run nginx
how does Docker isolate one container from another?
Or when Kubernetes schedules a Pod, who decides how much CPU and memory that Pod receives?
Most engineers know what command to run.
Very few understand what actually happens after pressing Enter.
That’s exactly what this article is about.
Instead of teaching you dozens of Linux commands, we’ll learn how Linux thinks.
By the end of this guide, you’ll understand the journey every command takes-from your keyboard all the way to the CPU, memory, storage, and back to your terminal.
Once you understand this journey, Linux will stop feeling like magic.
Why Every DevOps Engineer Should Learn Linux
If you’re learning DevOps, Kubernetes, Docker, Cloud, or Site Reliability Engineering (SRE), Linux isn’t just another technology on your resume.
It is the foundation on which almost everything runs.
Think about the technologies you work with every day.
- Docker
- Kubernetes
- Jenkins
- NGINX
- MySQL
- PostgreSQL
- GitLab Runner
- AWS EC2
- Azure Virtual Machines
- Google Compute Engine
What do they all have in common?
Most of them run on Linux.
Even Android, the world’s most popular mobile operating system, is built on the Linux kernel.
Today, Linux powers cloud platforms, data centers, supercomputers, IoT devices, and millions of production servers around the world.
That’s why every DevOps engineer spends a significant part of their day working on Linux systems.
Understanding Linux isn’t just about passing interviews.
It helps you troubleshoot production issues faster, understand how containers actually work, and makes technologies like Docker and Kubernetes much easier to learn.
So... What Exactly Is Linux?
When someone asks,
“What is Linux?”
the most common answer is:
"Linux is an operating system."
While that’s technically correct, it doesn’t explain what Linux actually does.
Let’s understand it with a simple example.
Imagine you open Google Chrome on your laptop.
Chrome needs to perform several tasks at the same time.
It has to:
- Read files from your SSD
- Allocate memory (RAM)
- Use the CPU to render web pages
- Send requests over the internet
- Display everything on your screen
Now ask yourself:
Does Chrome know how to communicate directly with your CPU?
No.
Does it know how to read data from your SSD?
Again, no.
Instead, Chrome requests the Operating System to perform these tasks.
The operating system acts as a bridge between applications and the underlying hardware.
Rather than every application learning how to communicate with every CPU, hard disk, network card, or graphics card, they simply ask the operating system to do it on their behalf.
Linux is one such operating system.
Whether it’s a web browser, a database, Docker, Kubernetes, or even a simple command like ls, every request eventually passes through Linux before reaching the hardware.
Without an operating system, applications would have to know how every hardware component works, a nearly impossible task.
Linux hides that complexity and provides a consistent way for applications to use the hardware.
Linux Is More Than Just an Operating System
Another common misconception is that Linux is a single piece of software.
It isn’t.
When people say,
“I use Ubuntu.”
or
“Our production servers run on Red Hat.”
they’re referring to Linux distributions, not Linux itself.
A Linux distribution (often called a Linux distro) is a complete operating system built around the Linux kernel.
Some of the most popular Linux distributions are:
- Ubuntu
- Debian
- Red Hat Enterprise Linux (RHEL)
- Rocky Linux
- Fedora
- Alpine Linux
Although they look different and may use different package managers or release cycles, they all share the same core, the Linux kernel.
Think of it like buying a car.
Toyota, Honda, Hyundai, and Tata all manufacture cars.
They may differ in design, features, and pricing, but they all serve the same purpose: getting you from one place to another.
Linux distributions work in a similar way.
Each one is designed for a different use case, but they’re all powered by the same Linux kernel.
How Linux Works
Now that we know what Linux is, let’s understand what happens when you run a command.
Every command you execute follows a similar path.
You type a command into the terminal.
The terminal passes it to the shell.
The shell interprets what you typed and forwards the request to the Linux kernel.
The kernel then communicates with the hardware, whether it’s the CPU, memory, storage, or network, and finally sends the result back to your terminal.
It all happens within milliseconds.
At first glance, this flow may seem simple.
Understanding these components is the key to understanding how Linux really works.
And the best way to learn them isn’t by reading definitions.
It’s by following a single command from start to finish.
In the next section, we’ll take one of the simplest Linux commands:
ls
and trace its complete journey, from the moment you press Enter until the list of files appears on your screen.
Along the way, you’ll naturally learn about the Terminal, Shell, Linux Kernel, system calls, processes, memory, and the filesystem, making Linux much easier to understand than simply memorizing commands.
What Actually Happens When You Type ls?
Let’s perform a simple experiment.
Open your terminal and type:
ls
Within a fraction of a second, Linux displays all the files and directories in your current location.
Simple, right?
But behind those two letters-ls-Linux performs a surprising amount of work.
Let’s follow that journey.
Step 1: The Terminal Receives Your Input
The first thing to understand is that the Terminal doesn’t actually execute commands.
It is simply an application that lets you interact with Linux.
Think of it like a chat window.
Just as WhatsApp doesn’t answer your messages, the terminal doesn’t understand Linux commands. It simply passes whatever you type to another program.
That program is called the Shell.
Step 2: The Shell Understands Your Command
The Shell acts as an interpreter between you and Linux.
When you press Enter, the shell reads the command.
ls
It first checks whether ls is:
- A built-in shell command
- An alias
- Or an executable program installed on your system
If it’s an executable, the shell searches for it using the PATH environment variable.
You can see where Linux found it by running:
which ls
Output:
/usr/bin/ls
Now the shell knows exactly which program needs to run.
But here’s something interesting.
The shell still doesn’t execute the program directly.
Instead, it asks the Linux kernel to create a new process for it.
Step 3: The Linux Kernel Takes Control
This is where the Linux kernel enters the picture.
The kernel is the heart of the operating system.
Every application-from Chrome and Docker to Kubernetes and NGINX-depends on the kernel whenever it needs access to hardware.
When the shell requests to run ls, the kernel performs several tasks almost instantly.
It creates a new process.
It allocates memory.
It schedules CPU time.
It loads the ls executable into memory.
Finally, it starts executing the program.
All of this happens in milliseconds.
Step 4: ls Needs Information
At this point, the ls program has started running.
But it still doesn’t know which files exist in the current directory.
Remember, applications are not allowed to access the disk directly.
Instead, they ask the Linux kernel for the information they need.
The ls program makes a request saying something like:
“Please tell me what files are present in this directory.”
This request is known as a System Call.
A system call is simply the way an application requests services from the Linux kernel.
Think of it as placing an order at a restaurant.
You don’t walk into the kitchen and cook your own food.
Instead, you tell the waiter what you want.
The waiter communicates with the kitchen and brings the result back to you.
Similarly, applications don’t communicate with the hardware directly.
They always go through the Linux kernel.
Step 5: The Filesystem Does the Rest
Once the kernel receives the request, it checks the filesystem.
The filesystem knows:
- Which files exist
- Their names
- Their permissions
- Their size
- Their location on disk
The kernel reads this information from storage and sends it back to the ls process.
The ls program formats the output.
Finally, the terminal displays it on your screen.
app.py
Dockerfile
README.md
kubernetes.yaml
logs
What looked like a simple command actually involved multiple components working together.
The Complete Journey of a Linux Command
From the moment you press Enter, the flow looks something like this:
Everything happens within a few milliseconds.
Yet during that short time, Linux has:
- Interpreted your command
- Located the executable
- Created a new process
- Allocated memory
- Scheduled CPU time
- Accessed the filesystem
- Read data from storage
- Returned the result to your terminal
And this isn’t unique to ls.
Whether you run:
docker run nginx
or
kubectl get pods
or
systemctl restart nginx
the same fundamental flow applies.
The command eventually reaches the Linux kernel, which performs the required work and communicates with the underlying hardware.
Why This Matters for DevOps Engineers
Many engineers think Docker, Kubernetes, and cloud platforms are completely different technologies.
In reality, they’re all built on Linux.
When Docker starts a container, it relies on Linux features like namespaces and cgroups to isolate processes and manage resources.
When Kubernetes schedules a Pod, the container runtime uses those same Linux capabilities underneath.
Even service managers like systemd, networking tools, and monitoring agents ultimately depend on the Linux kernel.
That’s why experienced DevOps engineers spend time understanding Linux first.
Once you understand how Linux executes a simple command like ls, concepts such as processes, containers, resource limits, and orchestration become much easier to grasp.
What's Next?
So far, we’ve followed a command from your keyboard to the Linux kernel.
But Linux is much more than command execution.
To troubleshoot production issues effectively, every DevOps engineer should also understand a few core Linux concepts, processes, services, permissions, memory, networking, logs, and filesystems.
Let’s explore those next, and see how they appear in everyday DevOps work.
Linux Concepts Every DevOps Engineer Should Know
By now, you’ve seen how a simple command travels through Linux before producing an output.
But Linux is much more than executing commands.
As a DevOps engineer, there are a few core concepts you’ll encounter almost every day. Understanding them will make troubleshooting production issues much easier.
Let’s look at the most important ones.
1. Processes – Every Running Program
Whenever you execute a command or launch an application, Linux creates a process.
A process is simply a running instance of a program.
For example, when you run:
python app.py
Linux creates a process for the Python interpreter.
Similarly, when you start NGINX, MySQL, or Docker, each of them runs as one or more processes.
You can view all running processes using:
ps -ef
or
top
When a production server becomes slow, checking running processes is usually one of the first troubleshooting steps.
2. Services – Applications That Keep Running
Not every application starts and stops when you execute a command.
Some applications are designed to run continuously in the background, waiting for requests.
These are called services (or daemons).
Examples include:
- NGINX
- Docker Engine
- MySQL
- SSH Server
- Jenkins
On most modern Linux distributions, services are managed using systemd.
That’s why you’ll often use commands like:
systemctl status nginx
systemctl restart docker
systemctl enable sshd
As a DevOps engineer, you’ll spend a lot of time checking whether a service is running, restarting it after configuration changes, or enabling it to start automatically after a reboot.
3. Users, Groups, and Permissions
Linux is a multi-user operating system.
Every file and directory belongs to a user and a group, and permissions determine who can read, write, or execute it.
That’s why you sometimes see errors like:
Permission denied
or need to prefix commands with:
sudo
Permissions are one of Linux’s strongest security features, preventing unauthorized users from accessing or modifying critical files.
4. The Filesystem
One of Linux’s most famous philosophies is:
Everything is a file.
Configuration files, log files, disks, partitions, and even hardware devices are represented through the filesystem.
Some directories you’ll frequently encounter include:
- /etc – Configuration files
- /var/log – Application and system logs
- /home – User home directories
- /tmp – Temporary files
- /bin and /usr/bin – Executable programs
Knowing where Linux stores files can save hours during troubleshooting.
For example, if NGINX isn’t starting, checking its configuration under /etc/nginx or its logs under /var/log is often the quickest way to identify the problem.
5. Memory Management
Every running process requires memory.
Linux continuously manages RAM, allocating memory to processes and reclaiming it when it’s no longer needed.
If the system runs out of available memory, Linux may invoke the Out-Of-Memory (OOM) Killer, which terminates one or more processes to protect the operating system from becoming completely unresponsive.
This is why monitoring memory usage is an essential part of production operations.
Commands like:
free -h
and
top
help engineers quickly understand how memory is being used.
6. Networking
Whether users are accessing your website, calling an API, or connecting to a database, every request eventually passes through the Linux networking stack.
As a DevOps engineer, you’ll frequently troubleshoot networking issues by checking:
- Open ports
- Listening services
- Network connectivity
- DNS resolution
- Firewall rules
Commands such as ss, ping, curl, and traceroute become part of your everyday toolkit.
Many application issues that initially appear to be software bugs are actually caused by networking problems.
7. Logs
Imagine trying to solve a production incident without any logs.
Almost impossible.
Logs record what applications and the operating system are doing, making them one of the most valuable troubleshooting resources.
Linux stores logs for services, applications, authentication events, and the kernel itself.
Some commonly used commands include:
journalctl
dmesg
or simply viewing log files under:
/var/log
Whenever something breaks in production, logs are usually the first place engineers look.
8. Package Managers
Installing software on Linux is different from downloading .exe files on Windows.
Instead, Linux distributions use package managers.
Depending on the distribution, you might use:
- apt (Ubuntu, Debian)
- yum or dnf (RHEL, Rocky Linux, Fedora)
Package managers don’t just install software-they also resolve dependencies, apply updates, and simplify software management across thousands of servers.
For DevOps teams managing large environments, this consistency is invaluable.
Bringing It All Together
At first glance, Linux may seem like a collection of commands that engineers memorize.
But as you’ve seen throughout this article, every command follows a carefully designed workflow.
When you type:
ls
Linux doesn’t simply display a list of files.
The terminal forwards your input to the shell.
The shell locates the executable and asks the Linux kernel to run it.
The kernel creates a process, allocates CPU time and memory, accesses the filesystem, retrieves the requested information, and sends the result back to your terminal.
All of this happens in just a few milliseconds.
The same principles power Docker containers, Kubernetes Pods, databases, web servers, and countless cloud applications.
Understanding Linux isn’t about memorizing commands, it’s about understanding the operating system that powers modern infrastructure.
Whether you’re deploying applications on AWS, managing Kubernetes clusters, troubleshooting production incidents, or building CI/CD pipelines, Linux is always working behind the scenes.
The stronger your Linux fundamentals, the easier it becomes to learn Docker, Kubernetes, cloud platforms, and every other technology built on top of it.
So, the next time you SSH into a server, don’t just type commands out of habit.
Take a moment to appreciate the incredible journey each command takes before the output appears on your screen.
Because once you understand how Linux thinks, you’re no longer just using Linux; you’ve started thinking like a DevOps engineer.
Learning Linux is the first step toward becoming a successful DevOps engineer. Once you understand how Linux works, technologies like Docker, Kubernetes, CI/CD, AWS, and Infrastructure Automation become much easier to master.
At CodeKerdos, we don’t just teach commands-we help you build real-world DevOps skills through hands-on projects, production scenarios, and expert mentorship.
👉 Explore our DevOps Course to start building production-ready skills:
https://codekerdos.in/course/devops