Как получить подробную информацию об операционной системе в Linux?

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

Ответ

Комплексный подход для сбора информации об ОС в DevOps-практике:

1. Основные команды для идентификации дистрибутива

# Стандартный метод (работает на большинстве систем)
cat /etc/os-release

# Альтернатива с красивым выводом
lsb_release -a

# Для старых систем
cat /etc/issue
cat /etc/*release
cat /etc/*version

2. Полный сбор информации (скрипт для инвентаризации)

#!/bin/bash
echo "=== System Information ==="

# Дистрибутив и версия
if [ -f /etc/os-release ]; then
    . /etc/os-release
    echo "Distribution: $NAME"
    echo "Version: $VERSION"
    echo "ID: $ID"
    echo "ID_LIKE: $ID_LIKE"
fi

# Ядро
echo "Kernel: $(uname -r)"
echo "Architecture: $(uname -m)"

# Информация о сборке
if command -v hostnamectl &> /dev/null; then
    hostnamectl
fi

# Время работы системы
uptime -p

3. DevOps-ориентированные методы

Для автоматизации и мониторинга:

# JSON-вывод для парсинга в скриптах
cat /etc/os-release | grep -E '^(NAME|VERSION|ID)=' | 
    awk -F= '{print """$1"": ""$2"""}' | 
    tr 'n' ',' | sed 's/,$/n/' | 
    awk '{print "{" $0 "}"}' | jq .

# Сбор метрик для Prometheus
echo "node_os_info{id="$(cat /etc/os-release | grep ^ID= | cut -d= -f2 | tr -d '"')", 
       version="$(cat /etc/os-release | grep ^VERSION_ID= | cut -d= -f2 | tr -d '"')"} 1"

4. Глубокий анализ системы

# Информация о менеджере пакетов
which apt && echo "Package manager: APT"
which yum && echo "Package manager: YUM"
which dnf && echo "Package manager: DNF"
which apk && echo "Package manager: APK"

# Версия systemd (если используется)
systemctl --version | head -1

# Информация о загрузчике
[[ -f /boot/grub/grub.cfg ]] && echo "Bootloader: GRUB2"
[[ -f /boot/efi/EFI/redhat/grub.cfg ]] && echo "Bootloader: GRUB2 (UEFI)"

# Проверка виртуализации
if systemd-detect-virt; then
    echo "Virtualization: $(systemd-detect-virt)"
elif [[ -f /proc/cpuinfo ]] && grep -q hypervisor /proc/cpuinfo; then
    echo "Virtualization: Detected (likely KVM/Xen/VMware)"
fi

5. Практическое применение:

  • Инфраструктура как код: определение дистрибутива для conditional execution в Ansible
  • Сборка пакетов: выбор правильных зависимостей в CI/CD пайплайнах
  • Мониторинг: отслеживание версий ОС для своевременного обновления безопасности
  • Миграция: проверка совместимости при переносе приложений между дистрибутивами