Existe-t-il un moyen de déterminer quelle version (distribution et version du noyau, je suppose) de Linux est en cours d’exécution (à partir de la ligne de commande), qui fonctionne sur n’importe quel système Linux?
Le noyau est universellement détecté avec uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
Il n'y a pas vraiment de moyen de distribution croisée pour déterminer quelle distribution et quelle version vous êtes. Il y a eu des tentatives pour rendre cela cohérent, mais finalement cela varie, malheureusement. Les outils LSB fournissent ces informations, mais paradoxalement, ils ne sont pas installés par défaut partout. Exemple sur un système Ubuntu 9.04 avec le paquet lsb-release
installé:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
Sinon, la méthode largement disponible la plus proche consiste à vérifier les fichiers /etc/something-release
. Ceux-ci existent sur la plupart des plates-formes communes et sur leurs dérivés (c'est-à-dire Red Hat et CentOS).
Voici quelques exemples.
Ubuntu a /etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Mais Debian a /etc/debian_version
:
$ cat /etc/debian_version
5.0.2
Fedora, Red Hat et CentOS ont:
Fedora: $ cat /etc/Fedora-release
Fedora release 10 (Cambridge)
Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)
newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Gentoo:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
Je n'ai pas de système SUSE disponible pour le moment, mais je crois qu'il s'agit de /etc/SuSE-release
.
Slackware a /etc/slackware-release
et/ou /etc/slackware-version
.
Mandriva a /etc/mandriva-release
.
Pour la plupart des distributions populaires alors,
$ cat /etc/*{release,version}
travaillera le plus souvent. Les installations "serveur" dépouillées et nues ne disposent peut-être pas du package "release" pour la distribution.
En outre, deux programmes tiers que vous pouvez utiliser pour obtenir automatiquement ces informations sont Ohai et Facter .
Notez que de nombreuses distributions ont ce type d'informations dans /etc/issue
ou /etc/motd
, mais certaines politiques de sécurité et meilleures pratiques indiquent que ces fichiers doivent contenir des bannières de notification d'accès.
Connexes: Comment connaître la version du logiciel installé sur le nœud? , marionnette .
Vous pouvez aussi essayer:
$ cat /etc/issue
Il vous indiquera généralement (pas toujours) la distribution que vous utilisez. /etc/issue
est le fichier utilisé pour l'écran de connexion.
Noyau: uname -a
cat /etc/os-release
au minimum pour Ubuntu, Fedora et OpenSUSE.
Ne fonctionne pas pour OS X au moins jusqu’à 10.9 (Mavericks). Utilisez sw_vers à la place.
OpenSUSE avait cat/etc/SuSE-release jusqu’à 13.1 mais est déconseillé en faveur de os-release.
Redhat 6.1 a cat/etc/redhat-release
lsb_release -a
, lorsqu'il est disponible, est utile.
cat /proc/version
m'a trouvé Red Hat sur un serveur virtuel partagé.
Noyau: uname -r
Distro: lsb_release -a
Ceux-ci fonctionneront sur la plupart des systèmes Linux
lsb_release -a && uname -r
Ce problème peut également être résolu en utilisantPython avec le module platform
:
Utilisation de la fonction platform()
:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-AMD64-x86_64-with-debian-9.6
La commande ci-dessus renvoie une chaîne unique identifiant la plate-forme sous-jacente avec autant d'informations utiles que possible.
Ou en utilisant la fonction uname()
:
python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-AMD64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')
La commande ci-dessus renvoie une namedtuple()
contenant six attributs: system
, node
, release
, version
, machine
et processor
.
Ou en utilisant la fonction dist()
:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
La dernière commande tente de déterminer le nom du nom de la distribution du système d'exploitation Linux, mais il s'agit deobsolète depuis Python 3.5} _ et sera supprimé) en Python 3.8 .