skip to content

Linux & distributions

17 roadmaps169 questionsupdated

The Linux kernel is one thing; a distribution is that kernel plus a packaging system, an init, a release cadence, and a support policy. This area covers the families you meet in production and what genuinely separates them.

on this pageshow

guide

overview

~1 min

Linux interviews test two things at once. The first is the machine every distribution shares: processes and signals, files and permissions, the boot path, the network stack, and the services that run on top. The second is the set of choices a distribution layers over that kernel — how software is packaged and patched, how long a release is supported, which libc and security module ship by default — and what those choices do to a fleet you have to run for years. Interviewers probe both because production problems rarely announce which layer they live in. The hub splits the same way. [Linux](/topics/os-linux) is the shared ground and the bulk of the material: [kernel and boot](/topics/os-linux-kernel-boot), [the filesystem hierarchy](/topics/os-linux-filesystem), [permissions and users](/topics/os-linux-permissions), [processes and signals](/topics/os-linux-processes-signals), [the networking stack](/topics/os-linux-networking-stack) and [services and packages](/topics/os-linux-service-package-mgmt). The distribution sections then cover the families you meet in production: [Debian](/topics/os-debian) as the conservative upstream, [Ubuntu](/topics/os-ubuntu) as its most common derivative, [RHEL](/topics/os-rhel) and its rebuilds, [SUSE](/topics/os-suse) in enterprise estates, and [Alpine](/topics/os-alpine) in container images. Junior rounds stay on the shared ground: read a mode string, explain a zombie, tell a hard link from a symlink. Senior and principal rounds move to the distribution layer and turn into judgement calls — what a subscription buys, what happens when support ends, why a service that worked on one host fails on another with identical files. Learn the Linux fundamentals first; the distribution sections assume them and mostly explain where a family departs from the common model.

primer

### The kernel is shared; the distribution is a set of choices Every distribution in this hub runs the Linux kernel and exposes its system-call interface, so processes, signals, file permissions, sockets and routing behave alike across them, whatever kernel version each ships. A distribution is what sits around that kernel: a package format and resolver, an init system, a C library, a default security module, a release cadence and a support promise. Most "Linux" answers are about the kernel; most "which distro" answers are about those choices. ### Families follow the package lineage Distributions cluster by the package database they share: | Family | Low-level tool | Resolver | Members in this hub | |---|---|---|---| | Debian | `dpkg` | `apt` | Debian, Ubuntu | | Red Hat | `rpm` | `dnf` | RHEL and its rebuilds | | SUSE | `rpm` | `zypper` | SLES, openSUSE | | Alpine | `apk` | `apk` | Alpine | Knowing the family tells you where configuration lands, how a package is queried and which update commands are safe, before you have read a single man page. ### The release model is the product Two distributions can ship identical code and still be different products because of how releases move. Fixed releases freeze upstream versions and patch them in place for years; rolling releases follow upstream continuously. Around that sit support windows, upstream and downstream relationships, and what "end of support" actually stops. Senior questions in this hub are mostly about this layer, because it decides how much change a fleet absorbs and when. ### Defaults decide where the surprises are The same service can behave differently on two hosts because of what each distribution turns on out of the box: mandatory access control enforcing or not, `musl` instead of `glibc`, a BusyBox userland instead of GNU tools, snaps that update themselves, a Btrfs root with automatic snapshots. A strong answer names the default before reaching for a fix. ### Live state is not configuration A recurring trap across the Linux sections: many commands change the running kernel or a running process and write nothing to disk. Starting a service, setting a kernel parameter, adding an address, switching a security mode or adding a user to a group each has a runtime half and a persistent half. Interviewers listen for whether you know which half you just changed, and who owns the file that survives a reboot.

Distribution
A kernel packaged with a userland, package manager, init system, default configuration, release cadence and support policy, maintained as one installable operating system.
Package manager
Two layers: a low-level tool that installs single package files and tracks them, and a resolver above it that reads repository metadata and plans complete transactions.
Fixed release
A release model that freezes upstream versions at release time and then ships only targeted fixes for the life of that release.
Rolling release
A release model with no major versions: packages move forward continuously, so the system is always the newest tested state of the archive.
LTS
Long-term support: a release designated for an extended maintenance window, the one production fleets usually standardise on.
Backport
A fix taken from a newer upstream version and applied to the older version a stable release ships, leaving the upstream version number unchanged.
Upstream and downstream
Upstream is the project a distribution takes code from; downstream builds on it. Fixes and releases flow from upstream to downstream, not the other way.
Rebuild
A distribution compiled from another vendor's published sources to be binary-compatible with it, without that vendor's subscription or support.
Subscription
A commercial agreement that grants access to a vendor's update repositories, advisories, certifications and support, rather than the right to run the software.
init system
The first user-space process, PID 1, which starts and supervises services. Most mainstream distributions use systemd; Alpine uses OpenRC.
C library (libc)
The library that wraps system calls and provides standard functions to nearly every binary. glibc is the common default; Alpine ships musl instead.
Mandatory access control
A policy layer enforced by the kernel on top of owner and mode checks, such as SELinux on RHEL. Passing owner and mode checks, even as root, does not get past it.
End of support
The date after which a release's maintainers stop publishing fixes. Installed systems keep running unchanged, accumulating unpatched vulnerabilities.

Picture one server from the moment it boots. Firmware and a bootloader hand control to the kernel, the kernel starts PID 1, and PID 1 brings up services from unit files that packages installed. Every file on disk belongs to a package in the local package database or to local configuration, and the repositories the host trusts decide what the next update brings. The distribution decided each of those links: which init, which package tools, which repositories, which defaults for SELinux or AppArmor, which libc every binary was linked against. The sections map onto that picture: - **Linux fundamentals** own the kernel-side behaviour that holds on any distribution: how processes, files, permissions and packets work. - **Services and packages** is the seam, where the common model (units, packages, dependency resolution) meets family-specific tools. - **Debian, Ubuntu, RHEL, SUSE and Alpine** own the release model, support terms and defaults of each family, and the questions that only make sense on one of them. Upstream and downstream relationships connect the distribution sections to each other. Ubuntu builds from Debian's archive; CentOS Stream runs ahead of RHEL, and AlmaLinux and Rocky Linux rebuild RHEL from behind; openSUSE Leap shares its base with SUSE Linux Enterprise. A question about one member of a family often has its answer in its upstream. The first minutes on an unfamiliar host are the same moves in miniature — identify the family, ask the package database who owns a file, and check which libc a binary expects: ```bash . /etc/os-release && echo "$ID (like: ${ID_LIKE:-none}) $VERSION_ID" dpkg -S /usr/sbin/sshd # Debian family: which package owns this file rpm -qf /usr/sbin/sshd # Red Hat and SUSE families: same question readelf -l ./server | grep -i interpreter # glibc or musl loader? ``` Usually only one of the two ownership queries answers on a given host. The interpreter line names the loader a dynamically linked binary needs, which is exactly what goes missing when it lands on a host with a different libc.

  1. Linux →

    The shared ground every distribution section assumes: processes, files, permissions, boot and networking as the kernel implements them.

  2. Services and Packages →

    Where the common model meets family tools: services under systemd, and the split between package installer and dependency resolver.

  3. Debian →

    The upstream of the Debian family; its branch model and frozen stable releases explain much of how Ubuntu behaves.

  4. Ubuntu →

    The most common server distribution: LTS cadence, end-of-support consequences, snaps and PPAs.

  5. RHEL →

    The RPM side: subscriptions, SELinux enforcing by default, long lifecycles, and where CentOS Stream and the rebuilds fit.

  6. Alpine →

    The container case, where musl and BusyBox trade image size for compatibility and debugging comfort.

  • Calling CentOS Stream a free copy of RHEL: it sits upstream of the next RHEL minor release, and the downstream rebuilds are AlmaLinux and Rocky Linux.

  • Reading an old upstream version number on Debian stable or RHEL as proof a package is unpatched; fixes are backported, so check the distribution's revision and advisories instead.

  • Answering an SELinux denial with setenforce 0 or disabling it, instead of reading the denial and fixing the label or policy — see Permissions and Users.

  • Treating Alpine as a drop-in base image for glibc-built binaries; a not found on a file that plainly exists usually means the dynamic loader is missing.

  • Making a change with sysctl -w, ip addr or systemctl start and calling it done, without the persistent half that survives a reboot.

  • Adding a PPA, an edge repository or another third-party source to production for one newer package, without owning the trust and upgrade cost it brings.

  • Reading near-zero free memory as a shortage; Linux fills idle RAM with page cache, and the available figure is the one to judge.

  • Reaching for kill -9 first: it skips all cleanup, so it belongs after a polite signal has been given time to work.

  • Treating a subscription as a licence to run the code; it buys update access, certification and support, which is what a migration decision must weigh.

This guide assumes current mainstream releases: systemd as init everywhere except Alpine, `dnf` as the RPM resolver on the Red Hat family, and cgroup v2 as the default resource-control hierarchy. A few changes still shape interview questions, because many fleets are older than the distributions they are compared against: - **CentOS Linux ended.** CentOS used to be a free downstream rebuild of RHEL; CentOS Linux 8 reached end of life at the end of 2021 and CentOS Linux 7 in mid-2024. CentOS Stream now sits upstream of RHEL, and "we run CentOS" needs a follow-up question about which one. - **RHEL 8** replaced `yum` with `dnf` (the `yum` command remains as a compatibility name) and split content into BaseOS and Application Streams, so runtimes carry their own, shorter lifecycles. - **Debian 12** added the non-free-firmware archive area and includes it in the installer, which changes the answer to "is firmware in Debian". - **Ubuntu 20.04 LTS** has left standard support; fleets still on it depend on Ubuntu Pro's extended security maintenance or an upgrade. When an answer depends on a release — package tool names, archive areas, whether a resolver or firewall backend is the old or new one — say which release you mean.

Linux is placed against other operating systems less often than distributions are placed against each other, but both come up. On servers, the main alternatives are the BSDs, which ship kernel and userland as one project rather than assembled from parts, and Windows Server where the software stack demands it; most backend and cloud workloads default to Linux because the tooling, container runtimes and managed services assume it. Among distributions, the choice is usually framed by support model rather than features. Debian and Ubuntu suit teams that want a free, widely documented base; RHEL suits estates that need certified software, long lifecycles and a vendor escalation path, with AlmaLinux and Rocky Linux as compatible options without the subscription; SUSE Linux Enterprise appears where its enterprise partners, notably SAP workloads, set the platform. Fedora sits upstream of the Red Hat family as its fast-moving community distribution. In containers the comparison shifts to image size and debuggability: Alpine for small images, slim Debian or Ubuntu bases for glibc compatibility, and distroless images that ship no shell or package manager at all. The container still uses the host's kernel, so only the userland is being chosen.

explore

report an issue with this guide →

questions

169 · 6 sections

You are handed a shell on an unfamiliar Linux server. Where do you expect a service's configuration, its persistent state and its log files to live, and what is the rule that puts those three things in different top-level directories?

level: juniorimportance: must knowfreq 70%
basics
~20 s

Configuration lives under /etc, persistent state under /var/lib and logs under /var/log. The split is by mutability and ownership: /usr holds static package-owned code, /etc holds locally editable configuration, /var holds data the machine writes while it runs.

open as a page

An /etc/fstab entry names a disk as /dev/sdb1. Why is that fragile on a Linux server, and how do UUID=, LABEL= and PARTUUID= differ as replacements?

level: juniorimportance: must knowfreq 70%
basics
~20 s

Kernel names like /dev/sdb1 depend on device discovery order, so a new disk or a slow controller can renumber them and mount the wrong filesystem. Prefer UUID= from the filesystem superblock, or PARTUUID= from the partition table.

open as a page

On Linux, what is a loadable kernel module, and how does a driver compiled as a module (=m) differ at runtime from the same driver built into the kernel image (=y)?

level: juniorimportance: must knowfreq 68%
basics
~20 s

A loadable kernel module is kernel code — typically a driver or filesystem — shipped as a separate .ko file and inserted into the running kernel on demand. Code built in with =y is part of the kernel image itself and can never be unloaded.

open as a page

On Linux, `ls -l /proc/meminfo` reports a size of 0 bytes, yet reading the file returns pages of text. What kind of filesystem is /proc, and where does that content come from?

level: juniorimportance: must knowfreq 70%
basics
~20 s

/proc is procfs, a virtual filesystem with no storage behind it. The kernel generates each file's contents at the moment a process reads it, so the reported size is 0 while the data returned is a live snapshot of kernel state.

open as a page

Ubuntu releases are numbered like 23.10 and 24.04 LTS. What does that number encode, how often does each kind of release ship, and how long is each one supported?

level: juniorimportance: must knowfreq 72%
basics
~20 s

An Ubuntu version number is its release date in YY.MM form, so 24.04 means April 2024. A release ships every April and October; the April release of each even-numbered year is an LTS supported five years, while interim releases get nine months.

open as a page

On Ubuntu, some software installs as a snap instead of coming from the distribution archive. What is a snap, and what changes for you as an administrator when a program arrives as one?

level: middleimportance: must knowfreq 58%
basics
~20 s

A snap is a self-contained, read-only squashfs image that the snapd daemon mounts under /snap and runs under confinement. It bundles its own dependencies, is versioned by revision rather than by the archive, updates itself automatically, and reaches the rest of the system only through declared interfaces.

open as a page

On Ubuntu, a colleague proposes adding a PPA to get a newer version of a package onto your production servers. What is a PPA, and what risks does adding one to a fleet carry?

level: middleimportance: should knowfreq 36%
basics
~20 s

A PPA is a Personal Package Archive: packages built and published on Launchpad by an individual or team, per Ubuntu series. Adding one means trusting that person's signing key with root on your machines, outside Canonical's security process, and it complicates every future release upgrade.

open as a page

Your fleet still runs Ubuntu 20.04 LTS, whose five-year standard support window has ended. What concretely stops happening on those machines, and what are your options?

level: seniorimportance: should knowfreq 46%
basics
~20 s

Nothing breaks on the day support ends, which is the danger: the release's security pocket simply goes quiet, so newly disclosed vulnerabilities in installed packages are never patched. The options are upgrading one LTS at a time, rebuilding on a current image, or buying Ubuntu Pro's ESM.

open as a page

A service on your Ubuntu servers was installed as a snap, and its version changed overnight with no deploy from your team. Why did that happen, and what control do you actually have over when snaps update?

level: seniorimportance: should knowfreq 36%
basics
~20 s

The snapd daemon auto-refreshes installed snaps from the Snap Store several times a day by default, so a snap can change version without any deploy. You can shift the schedule, hold refreshes, choose a slower channel or track, and revert a bad revision, but you cannot simply switch updating off forever.

open as a page

Debian's archive is organised into stable, testing and unstable (sid). What is each suite for, and by what rule does a package move from unstable into testing and eventually into a stable release?

level: juniorimportance: must knowfreq 70%
basics
~20 s

Debian uploads always land in unstable (sid) and migrate automatically into testing after a few days without new release-critical bugs and with builds on every release architecture. Testing is periodically frozen and published as the next stable.

open as a page

On Debian stable, a package's upstream version number stays the same for the entire life of the release, sometimes years after upstream has moved on. Does that mean the package stops receiving fixes, and what are your options when you genuinely need something newer?

level: middleimportance: should knowfreq 55%
basics
~20 s

No. Debian freezes the upstream version deliberately and backports security and critical fixes into it, bumping only the Debian revision. When you truly need newer software, the sanctioned route is the backports suite, opted into one package at a time.

open as a page

An automated provisioning run installing Debian packages with apt-get hangs indefinitely on a full-screen configuration dialog with nobody at the keyboard. Which part of the Debian packaging system produced that prompt, and how do you make such installs run unattended without just accepting whatever defaults you get?

level: seniorimportance: should knowfreq 40%
basics
~20 s

The prompt comes from debconf, driven by the package's config maintainer script. Set DEBIAN_FRONTEND=noninteractive to stop it asking, and preseed the answers you actually want with debconf-set-selections before the install so defaults are not silently chosen for you.

open as a page

Your team is standardising its servers on the Debian family. What does Debian's own release engineering give you as a baseline, what does a downstream derivative actually inherit from Debian, and how would you decide between running Debian itself and running a derivative?

level: principalimportance: should knowfreq 35%
basics
~20 s

Debian gives you a freeze-based, released-when-ready platform with roughly two-year cycles, frozen package versions, community governance and no vendor subscription. Derivatives import Debian's source packages and rebuild them with their own patches, cadence and support terms. Choose on support obligations, release predictability and currency.

open as a page

Debian splits its archive into main, contrib and non-free (and, on recent releases, non-free-firmware). What distinguishes these areas, and why does the split matter to a company deciding whether it can redistribute a Debian-based system?

level: middleimportance: nice to knowfreq 28%
basics
~20 s

Only main is Debian proper: everything in it meets the Debian Free Software Guidelines and depends on nothing outside main. contrib holds free software that needs non-free components; non-free holds software failing the guidelines; non-free-firmware carves hardware firmware out of non-free. Redistribution terms differ per area.

open as a page

A freshly installed Red Hat Enterprise Linux server refuses to install any package, reporting that the system is not registered with an entitlement server. Given that RHEL's source code is open, what does a Red Hat subscription actually gate, and what are your options if the project will not buy one?

level: juniorimportance: must knowfreq 62%
basics
~20 s

A RHEL subscription gates access to Red Hat's package repositories, security errata and support — not the right to run the code. An unregistered host boots and runs normally, but has no update source until it is registered to an account.

open as a page

Your team has deployed on CentOS Linux for years and now has to choose a platform for the next five. Explain what CentOS Stream is in relation to Red Hat Enterprise Linux, and where AlmaLinux and Rocky Linux fit in that picture.

level: middleimportance: must knowfreq 58%
basics
~20 s

CentOS Stream sits upstream of RHEL, not downstream: it is the rolling preview of the next RHEL minor release rather than a free rebuild of the current one. The downstream rebuilds are now AlmaLinux and Rocky Linux.

open as a page

A validated application is certified only against Red Hat Enterprise Linux 9.4, and the vendor will not support any other minor release. How does RHEL's release lifecycle let you hold a fleet on one minor release, and what do you give up by doing it?

level: seniorimportance: should knowfreq 42%
basics
~20 s

RHEL hosts can be pinned to a minor release with subscription-manager release --set, so updates come from that minor's content path. Without an Extended Update Support entitlement, that stream stops receiving fixes once the next minor ships, freezing you on known-vulnerable packages.

open as a page

A service that runs fine on an Ubuntu host fails with permission denied after being deployed onto a Red Hat Enterprise Linux host, even though file ownership and mode bits are identical on both machines. What about RHEL's default configuration explains this, and how do you confirm it before changing anything?

level: seniorimportance: should knowfreq 52%
basics
~20 s

RHEL ships SELinux in enforcing mode with its targeted policy by default, so access is checked against policy as well as against ownership and mode bits. Ubuntu leaves most custom services unconfined, which is why the same file permissions behave differently on the two hosts.

open as a page

You run roughly 400 servers on paid Red Hat Enterprise Linux subscriptions, and finance asks whether they could all move to a free RHEL-compatible rebuild such as AlmaLinux or Rocky Linux. How do you make that call?

level: principalimportance: should knowfreq 34%
basics
~20 s

Decide per workload, not per fleet. Segment the estate by what actually requires the vendor relationship — ISV certification, validated cryptography, an escalation path, life-extension options — keep those on RHEL, and move the rest, weighing the standing cost of operating two platforms.

open as a page

On a SUSE system, what is the difference between `zypper patch`, `zypper update` and `zypper dup`, and which one is the supported way to keep openSUSE Tumbleweed current?

level: middleimportance: must knowfreq 60%
basics
~20 s

zypper patch installs only issued advisories, zypper update moves installed packages to their newest versions, and zypper dup realigns the whole system with the enabled repositories, allowing downgrades and removals — it is the required update path on rolling Tumbleweed.

open as a page

SUSE ships openSUSE Tumbleweed, openSUSE Leap and SUSE Linux Enterprise Server (SLES). How do these three differ in release model and support, and how would you choose between them for a server?

level: juniorimportance: should knowfreq 45%
basics
~20 s

Tumbleweed is a rolling release carrying the newest tested packages, Leap is a fixed-release distribution built from SUSE Linux Enterprise sources, and SLES is the subscription product that adds certification and long-term maintenance on the same core.

open as a page

A SUSE Linux Enterprise 15 server installed with the default Btrfs root layout misbehaves after a routine package update. What does SUSE's default snapper integration give you, how do you use it to recover, and what does it not protect?

level: seniorimportance: should knowfreq 42%
basics
~20 s

SUSE's default Btrfs root has snapper take pre- and post-snapshots around every zypper transaction. The GRUB menu can boot the pre-update snapshot, and snapper rollback makes it permanent — reverting system state, not application data.

open as a page

You are handed a headless SUSE Linux Enterprise 15 server and told to configure it with YaST. What is YaST, how do you drive it without a graphical desktop, and how does it relate to editing configuration files by hand?

level: middleimportance: nice to knowfreq 33%
basics
~20 s

YaST is SUSE's integrated administration framework: modules for partitioning, network, users, services, bootloader and software behind one menu. On a headless server it runs as a text-mode interface over SSH, and its modules write the normal system configuration files.

open as a page

You copy a dynamically linked binary that was built on Ubuntu onto an Alpine Linux machine. The file is present, owned correctly and executable, but running it prints `./server: not found`. Why does Alpine refuse to run it, and what are your options?

level: middleimportance: must knowfreq 70%
basics
~20 s

Alpine ships musl libc, so the glibc dynamic loader the binary names in its ELF interpreter field is absent. The kernel's ENOENT refers to that missing loader, not to your file. Rebuild against musl, link statically, or install gcompat.

open as a page

You get a shell on an Alpine Linux machine and find there is no `bash`, `ps` rejects most of the flags you are used to, and `/bin/ls` turns out to be a symlink. What is BusyBox, and what does Alpine's use of it change for you in practice?

level: juniorimportance: should knowfreq 58%
basics
~20 s

BusyBox is a single small binary that implements dozens of standard Unix commands as built-in applets, reached through symlinks named after each command. Alpine's userland is BusyBox, so the tools exist but support only a subset of GNU options.

open as a page

A service resolves hostnames correctly on a Debian host but misbehaves on Alpine Linux: an entry added to `/etc/nsswitch.conf` has no effect, and a lookup returning a large answer fails. How does musl's resolver differ from glibc's, and what does that mean operationally?

level: seniorimportance: should knowfreq 40%
basics
~20 s

musl implements its own built-in stub resolver instead of glibc's Name Service Switch. It ignores /etc/nsswitch.conf entirely, so NSS plugins never load, and it queries every nameserver in /etc/resolv.conf in parallel rather than in order.

open as a page

A multithreaded service shows noticeably worse throughput on Alpine Linux than on a glibc-based distribution, and a deeply recursive worker thread crashes with a segmentation fault that never happened before. Which musl defaults explain the two symptoms, and what would you do?

level: seniorimportance: should knowfreq 32%
basics
~20 s

Two musl defaults: its allocator is designed for small size and low fragmentation rather than multithreaded scalability, so allocation-heavy threads contend; and its default thread stack is far smaller than glibc's 8 MiB, so deep recursion in a spawned thread overruns it.

open as a page

An Alpine Linux system's `/etc/apk/repositories` points at `v3.20/main` and `v3.20/community`, and a colleague wants to add an `edge` line to get a newer version of one package. What are Alpine's branches and repositories, and what are you agreeing to if you mix edge into a stable system?

level: middleimportance: nice to knowfreq 34%
basics
~20 s

Alpine ships stable branches (v3.20 and friends) and one rolling branch called edge, each split into repositories: main, community, and testing which exists only on edge. Mixing edge into a stable system drags dependencies along and effectively converts it to a rolling system.

open as a page