Je travaille sur un script bash simple qui devrait pouvoir fonctionner sur les distributions Ubuntu et CentOS (la prise en charge de Debian et de Fedora / RHEL serait un plus) et j'ai besoin de connaître le nom et la version de la distribution que le script exécute ( afin de déclencher des actions spécifiques, par exemple la création de référentiels). Jusqu'à présent, voici ce que j'ai:
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
Cela semble fonctionner, revenir ubuntu
ou centos
(je n'ai pas essayé d'autres) comme nom de version. Cependant, j’ai le sentiment qu’il doit exister un moyen plus facile et plus fiable de le savoir - est-ce vrai?
Cela ne fonctionne pas pour RedHat. / etc / redhat-release contient: Redhat Linux Entreprise version 5.5
Donc, la version n'est pas le troisième mot, vous feriez mieux d'utiliser:
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
+-release
marche? Effectivement, vous pensez que ce sera le cas/etc/lsb-release
, alors appelez simplement cela.*
par+
pour éviter les commentaires de formatage, cela devrait êtreetc/*-release
, cela semble fonctionner.uname -rv | grep -i "name_of_distro"
et utilise le code de sortie?Réponses:
Pour obtenir
OS
etVER
, le dernier standard semble être/etc/os-release
. Avant cela, il y avaitlsb_release
et/etc/lsb-release
. Avant cela, vous deviez rechercher différents fichiers pour chaque distribution.Voici ce que je suggère
Je pense
uname
queARCH
c'est toujours le meilleur moyen d'obtenir. Mais l'exemple que vous avez donné ne traite évidemment que des systèmes Intel. Je l'appellerais soitBITS
comme ça:Ou changer
ARCH
pour être les versions les plus courantes, mais sans ambiguïté:x86
etx64
ou similaire:mais bien sûr que ça vous regarde.
la source
-
et_
? Peut-être que c'est dans/lib/lsb
ou quelque part comme ça. Qu'est-ce que l'rpm -qa "lsb*"
impression?rpm -qa "lsb*
imprime rien. Selonyum provides */lsb_release
cela, il est contenu dans un paquet appelé redhat-lsb qui, je suppose, n’est pas installé par défaut. Cependant, je ne suis pas un expert de Fedora, ce ne sont que les résultats d'un ordinateur virtuel Fedora aléatoire que j'ai et pourraient être très erronés.lsb-release
, comme vous l’avez dit.$OS
,$VERSION
etc - par convention, nous capitalisons les variables d' environnement (PAGER, EDITEUR, SHELL, ...) et des variables shell internes (BASH_VERSION, RANDOM, ...). Tous les autres noms de variables doivent contenir au moins une lettre minuscule. Cette convention évite de passer outre aux variables environnementales et internes accidentellement.J'irais avec ceci dans un premier temps:
Gentoo, RedHat, Arch & SuSE ont un fichier appelé par exemple
/etc/gentoo-release
. Semble être populaire, consultez ce site sur les fichiers de version .Debian et Ubuntu devraient avoir un
/etc/lsb-release
fichier contenant les informations de publication et s'afficheront avec la commande précédente.Un autre rapide est
uname -rv
. Si le noyau installé est le noyau stock distro, voushabituellementtrouverez parfois le nom là - dedans.la source
uname -a
.uname -rv
contient pas l'information si?uname -a
affichera des éléments tels que le type de processeur et le nom d’hôte qui ne sont pas pertinents ici. (Mais la version du noyau (-r
) et la version (-v
) sont nécessaires, toutes les distributions ne le font pas de la même manière)2.6.32-5-686-bigmem
et uname -v donne#1 SMP Tue Mar 8 22:14:55 UTC 2011
sur Debian 6. uname -a OTOH donneLinux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
.uname -a
is-n
, c'est-à-dire nodename == hostname. donc je dirais queuname
cela ne sera pas intéressant pour Debian. À bien y penser, je ne suis pas sûr que ce soit si utile sur RedHat non plus.debian
.lsb_release -a
. Fonctionne sur Debian et Ubuntu, je suppose, mais je ne suis pas sûr du reste. Normalement, il devrait exister dans toutes les distributions GNU / Linux car il est lié à LSB (Linux Standard Base).la source
One-Liner, repli, une ligne de sortie, pas d'erreur.
la source
ou juste
la source
Prenez un conseil des développeurs javascript. Ne testez pas la version, testez la capacité. Ce n'est pas joli, mais ça marche. Développez si nécessaire.
la source
Par ordre de succès le plus probable, ceux-ci:
autant que je sache (AFAIK): Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD et peut-être d’autres.
la source
cat /etc/*version
ne fonctionne pas (il n'y a pas de fichier de ce type) sur CentOS (au moins le 6.4)Pour la plupart des systèmes d'exploitation Linux modernes, le fichier
/etc/os-release
devient vraiment standard et est inclus dans la plupart des systèmes d'exploitation. Donc, dans votre script Bash, vous pouvez simplement inclure le fichier et vous aurez accès à toutes les variables décrites ici (par exemple: NOM, VERSION, ...)Donc, je ne fais que l'utiliser dans mon script Bash:
la source
Si le fichier
/etc/debian_version
existe, la distribution est Debian ou un dérivé de Debian. Ce fichier peut avoir un numéro de version; sur ma machine c'est actuellement6.0.1
. S'il teste ou est instable, il peut dire test / unstable ou le numéro de la prochaine version. Mon impression est que sur Ubuntu au moins, ce fichier est toujours en cours de test / instable, et qu’il n’y met pas le numéro de version, mais que quelqu'un puisse me corriger si je me trompe.Fedora (au moins les versions récentes), ont un fichier similaire, à savoir
/etc/fedora-release
.la source
/etc/debian_version
et/etc/os-release
./etc/debian_version
fichier. Donc, la façon dont nous préparons une installation Debian pourrait affecter les fichiers de version disponibles, c'est intéressant.os-release
n'inclut pas le numéro de version complet dedebian_version
. Voir unix.stackexchange.com/questions/382531 .Si vous ne pouvez pas ou ne voulez pas utiliser le fichier de version LSB (en raison des dépendances apportées par le paquet), vous pouvez rechercher les fichiers de version spécifiques à la distribution. Bcfg2 a une sonde pour la distribution que vous pourriez utiliser: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt
la source
2 façons de beaucoup:
1) utiliser
Je l'ai testé sur CentOS 5.5 et Ubuntu 10.04
la sortie pour CentOS est:
et pour Ubuntu est:
2) entrez la commande suivante:
Je l'ai testé sur CentOS 5.5 et Ubuntu 10.04, et cela fonctionne bien.
la source
Ce script fonctionne sur Debian, (peut-être nécessiter quelques modifications sur Ubuntu)
la source
Voici ma version simple de chech_distro. ^^;
la source
Sans version, juste seulement dist:
la source
Ceci a été testé sur Ubuntu 14 et CentOS 7
la source
sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
Je trouve un bon scénario d'ici qui fonctionne pour la plupart dists linux communs:
la source
J'utilise l' utilitaire de script screenfetch :
la source
Il existe une gemme ruby de faction , qui fournit des informations sur le système d’exploitation, analyse les fichiers de versions de système d’exploitation et d’autres données, puis les affiche sur l’écran du terminal. Vous pouvez essayer comme suit, en commençant par l’installation de rubygems:
Veuillez utiliser le cas ci-dessus qui est éligible pour votre système d'exploitation. Ensuite, installez la gemme elle-même.
Alors utilisez:
REMARQUE: Voir les sources de gemmes du facteur pour obtenir plus d’informations lors de l’installation.
la source
Si quelqu'un a aussi besoin de la distribution:
Sortie:
Remplacez-le par: lsb_release -sc pour obtenir la distribution:
Sortie:
la source
Cette commande fonctionne pour les distributions basées sur Debian et Redhat: à l'aide d'un
tr
filtre, convertissez le document au format d'un mot par ligne, puis comptez la première ligne contenant le nom de la distribution.la source
/etc/issue
ne contenait pas de version ni de nom sur zenwalk. Il s’agit d’un fichier pouvant être modifié par l’ administrateur et contenant un message présenté à l’homme sans garantie de contenir quoi que ce soit pouvant être extrait par programme.