How To Find Kernel Version In Linux

How To Find Kernel Version In Linux

Reading time1 min
#Linux#Kernel#Sysadmin#KernelVersion#LinuxCommands#SystemAdministration

Mastering Kernel Version Detection in Linux: Beyond uname

Kernel versioning isn’t just about trivia—whether you’re troubleshooting a kernel panic, auditing for CVE remediation, or prepping a production upgrade, precise version awareness is table stakes. Miss it, and your incident timeline might not align with reality.


Direct Version Check: uname

Common and fast:

uname -r

Typical output:

5.15.0-60-generic

Expanding scope with -a:

Linux db02 5.15.0-60-generic #66-Ubuntu SMP Wed Sep 14 13:17:12 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Here, kernel release and architecture are available at a glance. Build number (#66-Ubuntu SMP), compile timestamp, and architecture repeat for clarity, sometimes to excess.

Note: On stripped-down containers or minimized kernels, these fields may be blank or misleading. Once saw a custom IoT distro report “unknown” for uname -a—harder to debug than expected.


Kernel Provenance and Build Info: /proc/version

For validation—checking build host or compiler toolchain—interrogate /proc/version:

cat /proc/version

Sample:

Linux version 5.15.0-60-generic (buildd@lcy02-amd64-014) (gcc (Ubuntu 11.3.0-1ubuntu1) 11.3.0) #66-Ubuntu SMP Wed Sep 14 13:17:12 UTC 2023

Compiler version, build account, and patch level—if you suspect miscompiled modules or CI tag drift, this is where to confirm.


Distribution Inventory: Which Kernels Are Actually Installed?

Debian/Ubuntu/Derivatives

Audit what’s on disk (vs. running):

dpkg -l | grep linux-image

Yields:

ii  linux-image-5.15.0-60-generic    5.15.0-60.66   amd64   Signed kernel image generic
ii  linux-image-generic              5.15.0.60.62   amd64   Generic Linux kernel image

Critical when preparing for a kernel regression test—what’s bootable versus what’s installed? They aren’t always the same.

RHEL, Fedora, CentOS (RPM rels)

rpm -qa | grep kernel-core

For example:

kernel-core-5.14.0-362.18.1.el9_3.x86_64
kernel-core-5.14.0-284.25.1.el9_2.x86_64

Gotcha: Stale kernel installs can falsely indicate patch levels—always cross-check with uname -r.


What’s Set to Boot Next? Examining Bootloader State

Multiple kernels laying around—only one is active at boot. For GRUB2 (the default on most distros):

grep menuentry /boot/grub/grub.cfg | cut -d"'" -f2 | grep -i linux

Output:

Ubuntu, with Linux 5.15.0-60-generic
Ubuntu, with Linux 5.13.0-44-generic (recovery mode)

Don’t assume the running kernel is the one you’ll get after a reboot—production post-mortems have found surprises here.


System Metadata Aggregation: hostnamectl

Systemd-based machines can yield a quick kernel fingerprint with:

hostnamectl | grep Kernel

Sample:

Kernel: Linux 5.15.0-60-generic

Not detailed, but useful in scripts or troubleshooting remote hosts.


Module Directory: /lib/modules/

When verifying module compat, list installed kernel trees:

ls /lib/modules/

Output:

5.15.0-60-generic/
5.13.0-44-generic/

Each directory aligns with a built kernel version; missing modules here explain why modprobe fails.

Non-obvious: To match running kernel, expect:

uname -r

to exactly match one /lib/modules entry. If not, you’re possibly running a kernel without module support—a common cause of initramfs boot failures.


Summary Table

GoalCommand/LocationNotes
Check running kerneluname -rFastest, often accurate
Full kernel build detailscat /proc/versionCompiler, build host, patch number
Installed kernels (Deb)`dpkg -lgrep linux-image`
Installed kernels (RPM)`rpm -qagrep kernel-core`
Bootable kernelsgrep menuentry /boot/grub/grub.cfgConfirms bootloader entries
Kernel via systemd`hostnamectlgrep Kernel`
Module directoriesls /lib/modules/Reveals kernels with installed modules

Field Reality

Running an automated fleet? Validate both the running kernel and what’s bootable. During patch cycles, stale entries under /lib/modules and GRUB can result in panics after reboot—teams have lost hours here.

If in doubt or chasing a reproducible bug, compare uname -r, /proc/version, and the module dir to spot misaligned upgrades. Sometimes, missing debug symbols or mismatched compiler versions show up here first.

Known Issue: Custom kernels built outside standard packaging systems (e.g., hand-rolled with make install) may not be visible in dpkg/rpm lists—diagnosis must pivot back to bootloader config and /proc/version.


Example: Diagnosing a Kernel Mismatch After Unplanned Reboot

Observed after a dist-upgrade:

uname -r
5.13.0-44-generic
ls /lib/modules/
5.15.0-60-generic/
5.13.0-44-generic/

Userland running on 5.13, modules available for both. Cause: /boot/grub/grub.cfg still pointed to 5.13 after install. Solution was to set GRUB default and re-run update-grub.

Not perfect, but robust. Periodic audit scripts cut downtime.


For next-level diagnostics: Consider writing safeguards into CI—or chronicling dmesg | grep Linux for boot historicity. Kernel provenance issues may only surface intermittently; leave breadcrumbs.

discuss real kernel debugging headaches, or suggest edge case handling, in the comments if you want deeper coverage.