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

5voto

user1323 Points 96

Utilisez Chef pour ces tâches ;-)

Dans Chef, vous pouvez utiliser le platform? méthode :

if platform?("redhat", "centos", "fedora")
  # Code for only Red Hat Linux family systems.
end

Ou :

if platform?("ubuntu")
  # Code for only Ubuntu systems
end

Ou :

if platform?("ubuntu")
  # Do Ubuntu things
end

Ou :

if platform?("freebsd", "openbsd")
  # Do BSD things
end

5voto

Markus Kuhn Points 151

En lsb_release a été ajoutée à la base standard de Linux (ISO/IEC 23360) dans ce but :

$ lsb_release -si
Ubuntu
$ lsb_release -sd
Ubuntu 18.04.3 LTS
$ lsb_release -sr
18.04
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
Codename:       bionic

Par conséquent, une déclaration de cas du type

case "`/usr/bin/lsb_release -si`" in
  Ubuntu) echo 'This is Ubuntu Linux' ;;
       *) echo 'This is something else' ;; 
esac

devrait faire ce que vous voulez.

Sur les distributions Linux plus récentes basées sur systemd, il y a également /etc/os-release qui est destiné à être inclus dans Shell Shell avec la commande source (.), comme dans

. /etc/os-release

case "$ID" in
  ubuntu) echo 'This is Ubuntu Linux' ;;
       *) echo 'This is something else' ;; 
esac

Mais dans l'exemple de cas d'utilisation que vous avez donné, vous pouvez en fait être plus intéressé non pas par le nom de la distribution, mais par le fait de savoir si elle a apt-get ou yum . Vous pourriez simplement tester la présence des fichiers /usr/bin/apt-get ou /usr/bin/yum con if [ -x /usr/bin/apt-get ]; then ... ou pour la présence de répertoires d'infrastructure associés, tels que /var/lib/apt y /etc/apt/ .

1voto

jobwat Points 231

Exécuter /etc/os-release dans un sous Shell et echo sa valeur :

if [ "$(. /etc/os-release; echo $NAME)" = "Ubuntu" ]; then
  apt-get install updates 
else
  yum update
fi

1voto

jiali passion Points 659

La commande lsb_release ne fonctionne que sur la plateforme Ubuntu mais pas sur centos. Vous pouvez donc obtenir des détails à partir du fichier /etc/os-release.

La commande suivante vous donnera le nom et la version du système d'exploitation.

cat /etc/os-release | awk -F '=' '/^PRETTY_NAME/{print $2}' | tr -d '"'

# output :-
# for centos -> CentOS Linux 7 (Core)
# for ubuntu -> Ubuntu 18.04.1 LTS (version differ with different releases)

Vous pouvez également obtenir le nom et la version du système d'exploitation séparément. dans votre cas, pour exécuter la commande de mise à jour, vous pouvez utiliser le script- suivant

os_name=$(cat /etc/os-release | awk -F '=' '/^NAME/{print $2}' | awk '{print $1}' | tr -d '"')

if [ "$os_name" == "Ubuntu" ]
then
        echo "system is ubuntu"
        os_versionid=$(cat /etc/os-release | awk -F '=' '/^VERSION_ID/{print $2}' | awk '{print $1}' | tr -d '"')

        case $os_versionid in
                "14.04" )
                        echo "os version is 14.04"
                        sudo apt-get update
                        ;;

                "16.04" )
                        echo "os version is 16.04"
                        sudo apt-get update
                        ;;

                "18.04" )
                        echo "os version is 18.04"
                        sudo apt update
                        ;;
        esac
elif [ "$os_name" == "CentOS" ]
then
        echo "system is centos"
        sudo yum update
else
        echo "system is $os_name"
fi

0voto

Can Tecim Points 101

J'utiliserais Python

if ! python -c "exec(\"import platform\nexit ('centos' not in platform.linux_distribution()[0].lower())\")" ; then
   echo "It is not CentOS distribution, ignoring CentOS setup"
   exit 0
fi

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