What Is Linux and Why Developers Should Learn It

K
Kai··4 min read

In this series we learn Linux through the command line, with a practical bent for developers and DevOps. Before typing the first command, this article answers: what Linux is, why you should learn it, and where you'll practice when your machine is a Mac or Windows.

What Linux is: kernel and distro

"Linux" in the strict sense is only the kernel — the core that manages hardware, processes, memory, and the filesystem. The kernel alone isn't usable directly; it needs tools, a shell, a package manager, and so on around it.

A distro (distribution) is the Linux kernel packaged together with all of that into a complete operating system. You hear a lot of names — Ubuntu, Debian, Fedora, Alpine, Arch — those are distros. They share the same Linux kernel but differ in the bundled tools, the package manager, and the release schedule.

For a beginner, the thing to remember: the command-line skills you learn are almost the same across distros. The main difference is how you install software (Article 8). Master one distro and switching to another is quick.

Why developers and DevOps must know Linux

The reason is very practical: almost everywhere your code runs is Linux.

  • Servers: most web servers, databases, and cloud services run on Linux.
  • Containers: as we saw in the Docker series — Linux containers run on the Linux kernel. The common base images (Ubuntu, Alpine) are all Linux.
  • Cloud: EC2 instances and VMs on every provider default to Linux, and it's the cheapest option.
  • CI/CD: build/test runners (like GitHub Actions ubuntu-latest) run Linux.

You can write code on a Mac or Windows, but when you deploy, debug production, or SSH into a server to handle an incident — you face a Linux command prompt. Without Linux you're stuck right at that step.

The Unix philosophy: why the Linux command line is powerful

Linux inherits its philosophy from Unix, and understanding it lets you use the command line effectively instead of memorizing commands by rote:

  • Each tool does one thing well. grep only searches, sort only sorts, wc only counts. There's no "does everything" tool.
  • Combine small tools to solve big problems. You feed one command's output into another's input (a pipe, Article 5) to build complex operations from simple pieces.
  • Everything is a file. Text, devices, even process and hardware information are represented as files that you read/write with ordinary commands (Article 2).

So learning Linux isn't about memorizing a few hundred commands — it's about grasping a small set of core tools and how to combine them. The series follows that approach.

Where to practice: a Linux container

On a Mac or Windows? No problem. The simplest way to get a real Linux to play with is to run it in a Docker container — the very tool we already learned. A container gives you a full Ubuntu in seconds; mess around freely, and if you break it, delete and recreate, touching nothing on your real machine.

If you don't have Docker yet, revisit Article 3 of the Docker series to install it. Once you have it, open an Ubuntu to try right away:

docker run -it --name linuxlab ubuntu:24.04 bash

You've just entered a Linux shell. Try:

cat /etc/os-release | grep PRETTY_NAME
uname -sr
PRETTY_NAME="Ubuntu 24.04 LTS"
Linux 6.12... 

Type exit to leave. Article 1 sets up this lab more properly (keeping data, installing tools) and gets you comfortable with the shell.

A few topics near the end of the series — like systemd (Article 15) and cron (Article 17) — are background services that don't run by default in an ordinary container. When we get there I'll show how to enable them inside a container, or suggest using a Linux VM if you want a full environment. Most of the series runs fine in a container.

Series roadmap

  1. Set up a Linux environment and get comfortable with the shell — the practice container, the prompt, your first commands.
  2. The filesystem and FHS — the Linux directory tree, "everything is a file," moving around.
  3. File and directory operations — create, copy, move, delete, find files.
  4. Editors: nano and vim — edit files right in the terminal.
  5. Reading and processing text — cat, less, grep, sed, awk, sort...
  6. Pipes, redirection, and data streams — chaining commands, stdin/stdout/stderr.
  7. Permissions — user/group, chmod, chown, and the rwx mechanism.
  8. Processes and signals — ps, top, kill, signals, background jobs.
  9. Compression and decompression — tar, gzip, zip; backups and packing files.
  10. Disks and capacity — df, du, lsblk, mount.
  11. Package management — apt, dnf, apk; installing and removing software.
  12. Users, groups, and sudo — managing users and admin privileges.
  13. Basic networking on Linux — ip, ss, ports, DNS, checking connectivity.
  14. SSH and file transfer — connecting to remote servers, keys, scp, rsync.
  15. systemd and services — managing services, logs with journalctl.
  16. Shell scripting — writing bash scripts: variables, conditionals, loops, functions.
  17. Cron and scheduled tasks — running commands on a schedule, plus a wrap-up.

What you need

  • Docker installed (as your Linux environment). Or, if you already have a Linux machine/VPS, use that directly.
  • Comfortable opening a terminal and typing commands at a basic level.
  • No prior Linux knowledge required.

Nothing to do after this article. In Article 1 we set up the practice environment and get comfortable with the shell — where everything else in the series happens.