Как узнать, какое ядро загружено в Linux?

«Как узнать, какое ядро загружено в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Базовые команды для определения загруженного ядра:

# Основная информация о ядре
uname -r
# Пример вывода: 5.15.0-91-generic

# Полная информация
uname -a
# Вывод: Linux hostname 5.15.0-91-generic #102-Ubuntu SMP Fri Nov 10 16:16:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

# Только версия сборки
uname -v
# Вывод: #102-Ubuntu SMP Fri Nov 10 16:16:02 UTC 2023

Дополнительные методы для DevOps:

# Через виртуальную файловую систему
cat /proc/version

# Проверить, какое ядро использовалось при загрузке
cat /proc/cmdline | grep -o "BOOT_IMAGE=[^ ]*"

# Список всех установленных ядер
ls -la /boot/vmlinuz-*
dpkg -l | grep linux-image  # для Debian/Ubuntu
rpm -qa kernel*             # для RHEL/CentOS

Практическое применение в DevOps:

  1. Проверка обновлений безопасности:

    # Сравнить текущее ядро с последними обновлениями
    current=$(uname -r)
    latest=$(ls -t /boot/vmlinuz-* | head -1 | sed 's|/boot/vmlinuz-||')
    if [ "$current" != "$latest" ]; then
    echo "Требуется перезагрузка для применения ядра $latest"
    fi
  2. Аудит уязвимостей:

    # Проверка на наличие известных уязвимостей
    uname -r | grep -E "4.19.|5.4." && 
    echo "Проверить CVE-2023-XXX"
  3. Автоматизация в скриптах развертывания:

    
    #!/bin/bash
    KERNEL_REQUIRED="5.15"
    CURRENT_KERNEL=$(uname -r | cut -d. -f1,2)

if [[ "$(printf '%sn' "$KERNEL_REQUIRED" "$CURRENT_KERNEL" | sort -V | head -1)" != "$KERNEL_REQUIRED" ]]; then echo "Ошибка: требуется ядро $KERNEL_REQUIRED или новее, текущее: $CURRENT_KERNEL" exit 1 fi


4. **Для контейнерных сред:**
```bash
# Ядро хоста используется всеми контейнерами
docker run --rm alpine uname -r
# Вывод будет таким же, как на хосте