lsb_release -a
va probablement être votre meilleure option pour trouver cette information, et être capable de le faire de manière cohérente.
Histoire de LSB
La lsb
commande dans cette commande correspond au projet Linux Standards Base, un projet parapluie parrainé par la Linux Foundation, qui fournit des méthodes génériques permettant d’effectuer des opérations de base sur diverses distributions Linux.
Le projet est volontaire et les fournisseurs peuvent participer au projet en tant qu'utilisateur mais également en tant que facilitateurs des différentes spécifications relatives aux différents modules permettant de normaliser les différentes distributions Linux.
extrait de la charte
Le groupe de travail LSB a pour objectif principal de répondre à ces deux préoccupations. Nous publions une norme décrivant l'ensemble minimal d'API qu'une distribution doit prendre en charge, en consultation avec les principaux fournisseurs de distribution. Nous fournissons également des tests et des outils qui mesurent la prise en charge de la norme et permettent aux développeurs d'applications de cibler l'ensemble commun. Enfin, grâce à nos tests, nous cherchons à éviter les divergences inutiles entre les distributions.
Liens utiles relatifs à LSB
des reproches
LSB présente un certain nombre de problèmes qui le rendent problématique pour des distributions telles que Debian. L'utilisation forcée de RPM étant un. Voir l'article Wikipedia pour plus d'informations à ce sujet .
Novell
Si vous effectuez une recherche, vous rencontrerez peut-être une page assez datée, intitulée: Détecter la distro sous-jacente Linux de Novell. C’est l’un des rares endroits où j’ai vu une liste qui montre plusieurs des principales distributions et comment vous pouvez détecter celle sous-jacente que vous utilisez.
extrait
Novell SUSE /etc/SUSE-release
Red Hat /etc/redhat-release, /etc/redhat_version
Fedora /etc/fedora-release
Slackware /etc/slackware-release, /etc/slackware-version
Debian /etc/debian_release, /etc/debian_version,
Mandrake /etc/mandrake-release
Yellow dog /etc/yellowdog-release
Sun JDS /etc/sun-release
Solaris/Sparc /etc/release
Gentoo /etc/gentoo-release
UnitedLinux /etc/UnitedLinux-release
ubuntu /etc/lsb-release
Cette même page inclut également un script pratique qui tente de codifier ce qui précède à l’aide de uname
commandes simplement vanilla et de la présence de l’un des fichiers ci-dessus.
REMARQUE: cette liste est datée, mais vous pouvez facilement supprimer les distributions datées telles que Mandrake de la liste et les remplacer par des alternatives. Ce type de script peut constituer une approche si vous essayez de prendre en charge un grand nombre de variantes de Solaris et Linux.
Mafia Linux
Une recherche plus poussée fera apparaître la page suivante maintenue sur Linuxmafia.com, intitulée: / etc / release équivalents pour diverses distributions Linux (et autres Unix) . C’est probablement la liste la plus exhaustive à ce jour que j’ai vue. Vous pouvez codifier cette liste avec une instruction case / switch et l'inclure dans votre distribution de logiciel.
En fait, il y a un script au bas de cette page qui fait exactement cela. Ainsi, vous pouvez simplement télécharger et utiliser le script en tant que tierce partie de votre distribution de logiciels.
scénario
#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`
GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ] ; then
DIST='RedHat'
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DIST='Mandrake'
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi
OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
echo ${OSSTR}
NOTE: Ce script doit avoir l’air familier, c’est une version à jour de celle de Novell!
Script de legroom
Une autre méthode que j'ai employée consiste à lancer votre propre script, similaire à la méthode Novell ci-dessus, mais utilisant plutôt LSB. Cet article intitulé: Méthode générique pour déterminer le nom de la distribution Linux (ou UNIX) illustre l'une de ces méthodes.
# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
# If available, use LSB to identify distribution
if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
# Otherwise, use release info file
else
export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME
Ce morceau de code pourrait être inclus dans un système /etc/bashrc
ou un fichier de ce type, qui définirait ensuite la variable d'environnement $DISTRO
.
gcc
Croyez-le ou non, une autre méthode consiste à utiliser gcc
. Si vous interrogez la commande, gcc --version
vous obtiendrez la distribution pour laquelle gcc a été construit, qui est invariablement identique à celle du système sur lequel il est exécuté.
Fedora 14
$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.
CentOS 5.x
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
CentOS 6.x
$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
Ubuntu 12.04
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
TL; DR;
Alors, lequel devrais-je utiliser? J'aurais tendance à choisir lsb_release -a
n'importe quelle distribution Linux que je fréquenterais (RedHat, Debian, Ubuntu, etc.). Dans les cas où vous soutenez des systèmes qui ne sont pas fournis, lsb_release
je créerais mon propre logiciel dans le cadre de la distribution des logiciels que je fournis, similaire à l'un des scripts ci-dessus.
MISE À JOUR N ° 1: Suivi avec SuSE
En parlant avec @Nils dans les commentaires ci-dessous, il a été déterminé que, pour une raison quelconque, SLES11 semblait empêcher l'installation de LSB par défaut. Il ne s’agissait que d’une installation facultative, qui semblait un compteur pour un paquet fournissant ce type de fonctionnalité clé.
J'ai donc profité de l'occasion pour contacter une personne du projet OpenSuSE afin de comprendre pourquoi.
extrait d'email
Hi Rob,
I hope you don't mind me contacting you directly but I found your info here:
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange
sites, Unix & Linux and a question recently came up regarding the best option
for determining the underlying OS.
http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218
In my answer I suggested using lsb_release, but one of the other users mentioned
that this command wasn't installed as part of SLES11 which kind of surprised me.
Anyway we were looking for some way to confirm whether this was intentionally
dropped from SLES or it was accidental.
Would you know how we could go about confirming this one way or another?
Thanks for reading this, appreciate any help and/or guidance on this.
-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm
Voici la réponse de Rob
Hi,
On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -
lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.
At present almost every distribution has an entry in /etc such as
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and
others there is a standardization effort going on driven by the convergence to
systemd. The standard location for distribution information in the future will
be /etc/os-release, although Ubuntu will probably do something different.
HTH,
Robert
-- Robert Schweikert MAY THE SOURCE BE WITH YOU
SUSE-IBM Software Integration Center LINUX
Tech Lead
Public Cloud Architect
uname -s
devrait être suffisant en dehors de Linux (peut-être pour les BSD).