Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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 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

Затем создайте Хосты файл /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

справочная страница / etc / issue