55 votes

Comment savoir si la plateforme en cours d'exécution est Ubuntu ou CentOS à l'aide d'un script de Bash ?

Je connais les commandes pour vérifier le nom de la machine Linux qui tourne sur ma machine. Par exemple :

Ubuntu

cat /etc/version

CentOS

cat /etc/issue

Comment puis-je obtenir la sortie du terminal et comparer pour voir si c'est UBUNTU ou CENTOS et exécuter les commandes suivantes ?

apt-get install updates 

o

yum update

Ubuntu 14.04

cat /etc/issue

77voto

Stewart Points 1385

Malheureusement, il n'existe pas de moyen simple et infaillible d'obtenir le nom de distribution. La plupart des principales distributions s'orientent vers un système où ils utilisent /etc/os-release pour stocker ces informations. La plupart des distributions modernes incluent également le lsb_release mais ceux-ci ne sont pas toujours installés par défaut. Voici donc quelques approches que vous pouvez utiliser :

  1. Utilisez /etc/os-release

    awk -F= '/^NAME/{print $2}' /etc/os-release
  2. Utilisez le lsb_release outils si disponibles

    lsb_release -d | awk -F"\t" '{print $2}'
  3. Utiliser un script plus complexe qui devrait fonctionner pour la grande majorité des distros :

    # 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
  4. Analyse l'information sur la version de gcc si elle est installée :

    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.

    Ubuntu 14.04

    $ gcc --version
    gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
    Copyright (C) 2013 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ceci a été directement copié de l'excellent article de @slm. réponse à ma question aquí .

26voto

Sylvain Pineau Points 59212

Vous n'avez pas besoin de bash pour effectuer une telle tâche, et je vous suggère d'utiliser une approche de haut niveau pour éviter d'avoir à traiter des fichiers tels que /etc/version y /etc/issue (Je n'ai pas /etc/version sur 13.10).

Je vous recommande donc d'utiliser cette commande à la place :

python -mplatform | grep -qi Ubuntu && sudo apt-get update || sudo yum update

Python plateforme fonctionnera sur les deux systèmes, le reste de la commande vérifiera si Ubuntu est retourné par Python et exécutera apt-get sinon yum .

9voto

Adam Points 99

Voici une réponse simple qui fonctionne sur toutes les versions d'Ubuntu / CentOS / RHEL par la simple présence des fichiers (ce qui n'est pas sans risque bien sûr si quelqu'un dépose aléatoirement /etc/redhat-release sur vos boîtes Ubuntu, etc) :

if [ -f /etc/redhat-release ]; then
  yum update
fi

if [ -f /etc/lsb-release ]; then
  apt-get update
fi

9voto

Harris Points 2548

Vérifiez la présence d'Ubuntu dans le nom du noyau :

if [  -n "$(uname -a | grep Ubuntu)" ]; then
    sudo apt-get update && sudo apt-get upgrade 
else
    yum update
fi

6voto

Chang Land Points 61
 apt-get -v &> /dev/null && apt-get update
 which yum &> /dev/null && yum update

s'il n'y a que deux distros, alors vous pouvez faire plus court :

apt-get -v &> /dev/null && apt-get update || yum update

en quelque sorte yum -v renvoient des valeurs non nulles sous CentOS ; utilisez donc which à la place,
bien sûr, vous devez envisager le scénario s'il n'y a pas de which installé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X