Как определить дистрибутив и версию Linux?

Я хочу определить дистрибутив и версию Linux.

Я искал с моей любимой поисковой системой и обнаружил lsb_release,

К сожалению, этот инструмент не установлен по умолчанию.

Я хотел бы избежать установки lsb_release первый.

Нет ли более простого способа определить дистрибутив и версию linux переносимым способом?

Под "переносимым" я подразумеваю различные дистрибутивы Linux. Не *BSD или Windows.

7 ответов

Решение

cat /etc/*-release должен сделать трюк

Документы: https://www.freedesktop.org/software/systemd/man/os-release.html

Выбери один...

cat /etc/issue
source /etc/os-release && echo "$NAME $VERSION"
cat /etc/os-release
uname -a

Я думаю, что большинство современных и LSB-совместимых дистрибутивов должны предоставлять / etc / os-release, но, как обычно: это сложно!;-)

Некоторые дополнительные материалы для чтения:

https://en.wikipedia.org/wiki/Linux_Standard_Base

http://0pointer.de/blog/projects/os-release.html

Твоя задача сложная, и у тебя есть мое сочувствие.

Я бы порекомендовал вам использовать библиотеку, а не повторять работу других. Python поставляется с библиотекой с названием "платформа", в которой есть функция для этого:

python -c 'import platform; print(platform.linux_distribution())'

Однако это еще не полное решение, просто слишком много дистрибутивов.

Если в вашей системе установлен ruby ​​gem, вы можете установить facter, используя gem install facter или если у вас установлена ​​марионетка, вы можете использовать facter

facter os
{
  architecture => "x86_64",
  family => "RedHat",
  hardware => "x86_64",
  name => "CentOS",
  release => {
    full => "7.2.1511",
    major => "7",
    minor => "2"
  },
  selinux => {
    config_mode => "enforcing",
    config_policy => "targeted",
    current_mode => "permissive",
    enabled => true,
    enforced => false,
    policy_version => "28"
  }
}

Установите Ansible на хосте, который может охватить все хосты, которые вы хотите сканировать. Следуйте инструкциям: http://docs.ansible.com/ansible/latest/intro_installation.html

Затем настройте файл Hosts /etc/ansible/hosts

[all]
overlord
10.10.10.2

[all:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
ansible_user=root
ansible_ssh_pass=RootPassword
#ansible_become=True
#ansible_become_method='sudo'
#ansible_become_pass=sudopassword

Это может быть IP-адрес или DNS-имена, если это разрешимо. Если вам нужно использовать sudo, раскомментируйте и измените ansible_user / ansible_ssh_pass

Запустите модуль установки, чтобы извлечь информацию из хостов

# ansible -i hosts all -m setup 

для всех фактов, и вы можете отфильтровать факты, используя

# ansible -i hosts overlord -m setup -a 'filter=ansible_distribution*'
overlord | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "OracleLinux",
        "ansible_distribution_major_version": "7",
        "ansible_distribution_release": "NA",
        "ansible_distribution_version": "7.3"
    },
    "changed": false
}

Помимо...

cat /etc/*-release 

... это скажет вам версию ядра и архитектуру машины.

$ uname -a

В дополнение к опциям, доступным сuname Вы также можете проверить /etc/issue

man-страница /etc/issue

Другие вопросы по тегам