GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je obtenir le nom de la distribution et le numéro de version dans un simple script shell ?

Pour obtenir OS et VER , la dernière norme semble être /etc/os-release .Avant cela, il y avait lsb_release et /etc/lsb-release . Avant cela, vous deviez rechercher des fichiers différents pour chaque distribution.

Voici ce que je suggérerais

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

Je pense uname pour obtenir ARCH est encore le meilleur moyen. Mais l'exemple que vous avez donné ne concerne évidemment que les systèmes Intel. Je l'appellerais soit BITS comme ceci :

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

Ou changez ARCH être les versions les plus courantes, mais sans ambiguïté :x86 et x64 ou similaire :

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

mais bien sûr, c'est à vous de décider.


J'irais avec ceci comme première étape :

ls /etc/*release

Gentoo, RedHat, Arch &SuSE ont un fichier appelé par ex. /etc/gentoo-release . Semble être populaire, consultez ce site sur les fichiers de version.

Debian et Ubuntu devraient avoir un /etc/lsb-release qui contient également des informations sur la version et s'affichera avec la commande précédente.

Un autre rapide est uname -rv . Si le noyau installé est le noyau de distribution stock, vous allez habituellement trouve parfois le nom dedans.


lsb_release -a . Fonctionne sur Debian et je suppose Ubuntu, mais je ne suis pas sûr du reste. Normalement, il devrait exister dans toutes les distributions GNU/Linux puisqu'il est lié à LSB (Linux Standard Base).


Linux
  1. Comment comparer des nombres et des chaînes dans le script shell Linux

  2. Comment obtenir la propre adresse IP et l'enregistrer dans une variable dans un script shell ?

  3. Comment puis-je ftp et télécharger des fichiers à partir d'un script shell UNIX

  4. Comment obtenir le nom de la branche git actuelle dans une variable dans un script shell ?

  5. Comment puis-je trouver ma version de shell à l'aide d'une commande Linux ?

Comment créer et exécuter un script shell dans Debian 10

Comment créer et exécuter un script Shell dans CentOS 8

Comment trouver le nom et la version de la distribution Linux

Comment créer et exécuter un script shell dans Ubuntu 22.04

Comment puis-je obtenir de manière fiable le nom du système d'exploitation ?

Comment obtenir le pid d'un processus et invoquer kill -9 dessus dans le script shell ?