How to Check the Linux Distribution, Version, Kernel, and Architecture

The best first step for identifying a Linux distribution and its version is to read /etc/os-release. Its PRETTY_NAME field provides a human-readable name, while ID and VERSION_ID provide identifiers that are easier to use in scripts.

Use hostnamectl when you want a convenient summary of the distribution, kernel, and architecture. Use uname -r for the currently running Linux kernel version, not the distribution version. These values describe different parts of the system and should not be treated as interchangeable.

Commands to run first

To check only the distribution name and version, start with:

cat /etc/os-release

To show only the most useful fields:

grep -E '^(PRETTY_NAME|ID|VERSION_ID|ID_LIKE)=' /etc/os-release

Run the following commands when you also need the kernel release and CPU architecture.

cat /etc/os-release
hostnamectl
uname -r
uname -m

What is a Linux distribution?

Strictly speaking, Linux is the operating-system kernel. A Linux distribution combines that kernel with system tools, libraries, a package manager, an installer, and default configuration to form a usable operating system.

Ubuntu, Debian, Fedora, Rocky Linux, openSUSE, and Arch Linux all use the Linux kernel, but their package formats, update policies, and administration commands differ. Check the distribution family and version before applying installation or server-configuration instructions.

Distribution family Common distributions Package format and tools Values to check
Debian family Debian, Ubuntu, Linux Mint DEB, APT ID and ID_LIKE=debian
Red Hat family RHEL, Fedora, Rocky Linux, AlmaLinux RPM, DNF ID and RHEL- or Fedora-related values in ID_LIKE
SUSE family openSUSE, SUSE Linux Enterprise RPM, Zypper ID and ID_LIKE=suse
Arch family Arch Linux, Manjaro pkg.tar.zst, Pacman ID and ID_LIKE=arch
Independent Alpine Linux and others Distribution-specific ID and the distribution's official documentation

ID_LIKE is supporting information that describes a related or upstream family. It may be absent. Use ID as the primary distribution identifier and consult ID_LIKE only when family compatibility matters.

Check the distribution and version in /etc/os-release

/etc/os-release stores operating-system identification data as KEY=value entries. According to the official systemd os-release specification, software should prefer /etc/os-release and fall back to /usr/lib/os-release when the former is unavailable.

Display all identification fields

cat /etc/os-release

The exact fields vary by distribution, but output commonly resembles:

PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian

This example identifies Ubuntu 24.04 in the Debian family. Patch-level text and other details can vary with the distribution and update state.

Understand the main os-release fields

Field Meaning Typical use
PRETTY_NAME Human-readable distribution name and version Display and manual inspection
NAME Operating-system name without the version Descriptive labels
ID Lowercase distribution identifier Distribution branches in scripts
VERSION_ID Distribution version intended for machine comparison Supported-version checks
ID_LIKE Related or upstream distribution families Determining likely package and configuration conventions
VERSION_CODENAME Code name for the distribution release Repository configuration and documentation

A rolling-release distribution may not have a fixed major version and can omit VERSION_ID. An absent optional field does not mean that the file is invalid.

Use hostnamectl for a system summary

On distributions that use systemd, hostnamectl can show the host name, operating system, kernel, and CPU architecture together.

hostnamectl

The most useful fields are:

  • Operating System: distribution name and version
  • Kernel: currently running kernel release
  • Architecture: system architecture
  • Virtualization: detected virtual-machine or container environment

hostnamectl is a convenient summary, but it may be unavailable in minimal installations, some containers, or distributions that do not use systemd. Use /etc/os-release and uname in those environments.

Distinguish the distribution version from the kernel version

The values reported by uname are not distribution releases such as Ubuntu 24.04 or Rocky Linux 10. They describe the currently running kernel and the hardware architecture.

uname -r
uname -m
uname -a
Command Information returned Example use
uname -r Kernel release Checking driver and kernel-module compatibility
uname -m Hardware architecture Selecting x86_64 or aarch64 packages
uname -a Several kernel-related values on one line Providing a compact troubleshooting summary

A system can keep the same distribution release while receiving a newer kernel. Systems on the same distribution version can also run different kernels. After a kernel package update, uname -r can continue to show the older kernel until the system reboots. The GNU Coreutils uname documentation defines each option.

Use alternative methods on older systems

Check with lsb_release

If lsb_release is installed, it can display the distributor, description, release, and code name.

lsb_release -a

The command is not included in every minimal installation. Check for it first with command -v lsb_release. The Linux Standard Base lsb_release specification describes its output fields.

Read distribution-specific release files

On older systems without /etc/os-release, use a distribution-specific file as a fallback.

cat /etc/redhat-release
cat /etc/debian_version
cat /etc/alpine-release

The availability and format of these files differ by distribution. In automation, prefer /etc/os-release and check only the explicit fallback files that your supported distributions use. Avoid blindly combining every file that matches /etc/*release.

Detect a distribution in a shell script

For installation scripts and operations automation, use ID and VERSION_ID instead of parsing the human-readable PRETTY_NAME.

if [ -r /etc/os-release ]; then
    . /etc/os-release
    printf 'distribution=%s\n' "$ID"
    printf 'version=%s\n' "${VERSION_ID:-unknown}"
    printf 'family=%s\n' "${ID_LIKE:-unknown}"
else
    printf 'distribution=unknown\n'
    uname -srm
fi

The ${VERSION_ID:-unknown} expression uses unknown when the value is unset or empty. Because many os-release fields are optional and distributions can add their own fields, scripts must not assume that every value exists.

When selecting package-management commands, compare ID first and use ID_LIKE only as a supporting condition. Even distributions in the same family can use different repository configurations and package names, so family similarity does not guarantee that every command is interchangeable.

Interpret results in containers, WSL, and chroot

Containers

Inside a container, /etc/os-release normally identifies the user-space distribution in the container image, not the host. In contrast, uname -r can display the kernel shared with the host. It can be normal for these commands to appear to describe different distribution families.

Windows Subsystem for Linux

In Windows Subsystem for Linux (WSL), /etc/os-release identifies the installed Ubuntu, Debian, or other distribution. The output of uname -r can include a string that identifies a WSL kernel. Continue to use /etc/os-release for the distribution version.

chroot environments

Inside a chroot, /etc/os-release identifies the distribution in the chroot file system, while uname describes the kernel shared with the running host. Account for this difference during recovery work and cross-distribution build processes.

Frequently asked questions

What is the most reliable command for checking the Linux version?

To identify the distribution and its release, start with cat /etc/os-release. Check the kernel separately with uname -r and the CPU architecture with uname -m.

Is something wrong if hostnamectl is missing or does not run?

Not necessarily. Minimal environments and distributions that do not use systemd may not provide hostnamectl. Use /etc/os-release and uname to retrieve the information separately.

How can I distinguish CentOS, Rocky Linux, and AlmaLinux?

Check ID in /etc/os-release. These distributions share parts of the same administration model, but their support policies and repositories are separate. Do not treat them as the same distribution based only on ID_LIKE.

Are x86_64 and aarch64 Linux distribution versions?

No. They identify hardware architectures. A distribution release can provide separate x86_64 and aarch64 images, so check the architecture when selecting software packages or installation media.

Summary

Use /etc/os-release for the Linux distribution name and version, hostnamectl for a convenient system summary, uname -r for the running kernel, and uname -m for the architecture.

In scripts, use ID, VERSION_ID, and, when necessary, ID_LIKE instead of parsing PRETTY_NAME. In containers, WSL, and chroot environments, remember that the user-space distribution and running kernel can come from different layers.

More in This Category
Linux gzip Command: Compress a File in gzip Format

Linux gzip Command: Compress a File in gzip Format

Learn how to compress a File in gzip Format with the Linux gzip command, including practical examples, key options, and important precautions.

Linux umask Command: Control Default File Permissions

Linux umask Command: Control Default File Permissions

Learn how to control Default File Permissions with the Linux umask command, including practical examples, key options, and important precautions.

Linux diff Command: Compare Text Files and Directories

Linux diff Command: Compare Text Files and Directories

Learn how Linux diff compares text files and directories, produces unified patches, ignores selected whitespace changes, and reports differences through exit status.

Linux Tutorial / File Types and Metadata: ls, file, stat, and readlink

Linux Tutorial / File Types and Metadata: ls, file, stat, and readlink

Learn what ls, file, stat, and readlink each reveal about a Linux file, including type, size, timestamps, and symbolic-link targets.

Linux file Command: Identify File Types and Formats

Linux file Command: Identify File Types and Formats

Learn how to use the Linux file command to identify file formats from their contents instead of filename extensions, with essential options, practical examples, output interpretation, and common troubleshooting tips.

Linux xargs Command: Pass Standard Input as Command Arguments

Linux xargs Command: Pass Standard Input as Command Arguments

Learn how to pass Standard Input as Command Arguments with the Linux xargs command, including practical examples, key options, and important precautions.

Linux apk Command: Manage Packages on Alpine Linux

Linux apk Command: Manage Packages on Alpine Linux

Learn how to manage Packages on Alpine Linux with the Linux apk command, including practical examples, key options, and important precautions.

Linux Tutorial / Understand Users, Groups, and File Ownership

Linux Tutorial / Understand Users, Groups, and File Ownership

Understand UIDs, GIDs, primary and supplementary groups, and file ownership, then inspect them safely with id, groups, getent, ls, and stat.

Linux chgrp Command: Change a File's Group

Linux chgrp Command: Change a File's Group

Learn how to change a File's Group with the Linux chgrp command, including practical examples, key options, and important precautions.

Linux machine-id: How to Check and Reset It for Cloned Systems

Linux machine-id: How to Check and Reset It for Cloned Systems

Learn what the Linux machine-id identifies, how to check it, and how to prepare cloned system images for unique IDs. Understand the difference between an empty file and first-boot initialization.