GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je savoir quelle version de Linux est en cours d'exécution ?

Solution 1 :

Il n'y a pas de moyen de distribution croisée. Cependant :

  • Redhat et ses amis :test pour /etc/redhat-release , vérifier le contenu
  • Debian :tester /etc/debian_version , vérifier le contenu
  • Mandriva et ses amis :test pour /etc/version , vérifier le contenu
  • Slackware :testez /etc/slackware-version , vérifier le contenu

Etc. De manière générale, vérifiez /etc/*-release et /etc/*-version .

Edit:J'ai trouvé un vieux script bash (plus d'un an) que j'ai dû bricoler au fil des ans (il a un journal CVS impressionnant remontant à 6 ans.) Il se peut qu'il ne fonctionne plus correctement tel quel et je peux ne vous embêtez pas à trouver des distributions installées pour tester, mais cela devrait vous fournir un bon point de départ. Cela fonctionne bien sur CentOS, Fedora et Gentoo. gyaresu l'a testé avec succès sur Debian Lenny.

#!/bin/bash

get_distribution_type()
{
    local dtype
    # Assume unknown
    dtype="unknown"

    # First test against Fedora / RHEL / CentOS / generic Redhat derivative
    if [ -r /etc/rc.d/init.d/functions ]; then
        source /etc/rc.d/init.d/functions
        [ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"

    # Then test against SUSE (must be after Redhat,
    # I've seen rc.status on Ubuntu I think? TODO: Recheck that)
    elif [ -r /etc/rc.status ]; then
        source /etc/rc.status
        [ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"

    # Then test against Debian, Ubuntu and friends
    elif [ -r /lib/lsb/init-functions ]; then
        source /lib/lsb/init-functions
        [ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"

    # Then test against Gentoo
    elif [ -r /etc/init.d/functions.sh ]; then
        source /etc/init.d/functions.sh
        [ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"

    # For Slackware we currently just test if /etc/slackware-version exists
    # and isn't empty (TODO: Find a better way :)
    elif [ -s /etc/slackware-version ]; then
        dtype="slackware"
    fi
    echo $dtype
}

Notez que cela ne fonctionnera probablement correctement que dans Bash. Vous pouvez le réécrire pour d'autres shells.

Cela étant dit, vous voudrez peut-être tester les fonctionnalités, pas les distributions. Je ne l'utilise plus simplement parce que c'est devenu un fardeau de maintenance. Il est plus facile de s'appuyer sur des outils et des solutions de distribution croisée.

Conceptuellement, ce qu'il fait est, dans l'ordre :

  • Insérez un type de fichier connu, "fonction de script d'initialisation commune". Ceux-ci sont spécifiques à la distribution. S'il n'existe pas, passez à la vérification de distribution suivante.
  • Vérifier l'existence d'une fonction spécifique, connue pour exister, souvent utilisée et peu susceptible d'être renommée à partir de ce script principal. Nous le faisons en utilisant le type Bash intégré. type -t renvoie function si ce symbole est une fonction. On ajoute zz à la sortie de type -t 2>/dev/null car si le nom n'est pas défini, la chaîne de sortie serait vide et nous aurions une erreur de syntaxe à propos d'une main gauche manquante au == opérateur. Si le nom que nous venons de vérifier n'est pas une fonction, passez à la prochaine vérification de distribution, sinon nous avons trouvé le type de distribution.
  • Enfin, faites écho au type de distribution afin que la sortie de la fonction puisse être facilement utilisée dans un bloc case .. esac.

Modifiez au cas où vous essaieriez de l'exécuter en tant que script simple :ce script est censé provenir ou être inclus à partir d'autres scripts. Il ne produit rien par lui-même si vous l'exécutez tel quel. Pour le tester, sourcez-le puis appelez la fonction, par exemple :

source /path/to/this/script.sh
get_distribution_type

à l'invite bash.

Edit :Veuillez noter que ce script ne nécessite pas les privilèges root. Je vous conseille vivement de ne pas l'exécuter en tant que root. Cela ne devrait rien nuire, mais ce n'est pas nécessaire.

Trouvé un lien vers une liste de diffusion pertinente dans le journal CVS. Devrait être utile pour déballer les spaghettis de script d'initialisation.

Solution 2 :

N'essayez pas de faire des suppositions basées sur la distribution quant à ce que vous pouvez et ne pouvez pas faire, car c'est la folie (voir aussi "Détection de l'agent utilisateur"). Au lieu de cela, détectez si ce que vous voulez faire est pris en charge et comment cela est fait par la commande ou l'emplacement de fichier que vous souhaitez utiliser.

Par exemple, si vous vouliez installer un paquet, vous pouvez détecter si vous êtes sur un système de type Debian ou un système de type RedHat en vérifiant l'existence de dpkg ou rpm (vérifiez d'abord dpkg, car les machines Debian peuvent avoir la commande rpm dessus...). Prenez votre décision quant à ce qu'il faut faire en fonction de cela, pas seulement en fonction du fait qu'il s'agisse d'un système Debian ou RedHat. De cette façon, vous prendrez automatiquement en charge toutes les distributions dérivées que vous n'avez pas explicitement programmées. Oh, et si votre paquet nécessite des dépendances spécifiques, testez-les également et faites savoir à l'utilisateur ce qu'il manque.

Un autre exemple est de jouer avec les interfaces réseau. Déterminez ce qu'il faut faire en fonction de l'existence d'un fichier /etc/network/interfaces ou d'un répertoire /etc/sysconfig/network-scripts, et partez de là.

Oui, c'est plus de travail, mais à moins que vous ne vouliez refaire toutes les erreurs que les développeurs Web ont commises au cours de la dernière décennie ou plus, vous le ferez de manière intelligente dès le début.

Solution 3 :

Vous pouvez trouver la version du noyau en exécutant uname -a , trouver la version de la distribution dépend de la distribution.

Sur Ubuntu et certains autres systèmes d'exploitation, vous pouvez exécuter lsb_release -a ou lisez /etc/lsb_release

Debian stocke la version dans /etc/debian_version

Solution 4 :

La plupart des distributions ont une méthode unique pour déterminer la distribution particulière.

Par exemple :

Redhat (And derivatives): /etc/redhat-release

SUSE: /etc/SUSE-release

Il existe une norme connue sous le nom de Linux Standard Base ou LSB. Elle définit qu'il devrait y avoir un fichier appelé /etc/lsb-release ou un programme appelé lsb_release qui renverra des informations sur votre distribution Linux.

lsb_release -a

Solution 5 :

python -c 'import platform ; print platform.dist()[0]'

code :http://hg.python.org/cpython/file/2.7/Lib/platform.py


Linux
  1. Comment savoir ce que fait une commande Linux

  2. Comment vérifier la version du noyau sous Linux

  3. Comment vérifier la version de MySQL sous Linux

  4. Comment vérifier la version de votre système d'exploitation Linux

  5. Comment savoir quelle version de Linux j'utilise ?

Comment vérifier la version du noyau sous Linux

Comment trouver la version du noyau Linux en cours d'exécution sur votre PC

Comment savoir depuis combien de temps un processus s'exécute sous Linux

Comment vérifier quelle version du noyau Linux suis-je en cours d'exécution

Comment trouver la version de Linux que vous utilisez

Comment vérifier la version de PHP sous Linux