À partir du shell et sans privilèges root, comment puis-je déterminer la version de Red Hat Enterprise Linux que j'utilise?
Idéalement, j'aimerais obtenir la version majeure et la version mineure, par exemple RHEL 4.0 ou RHEL 5.1, etc.
Vous pouvez utiliser le lsb_release
commande sur diverses distributions Linux:
lsb_release -i -r
Cela vous indiquera la distribution et la version et est un peu plus précis que l'accès à des fichiers qui peuvent ou non avoir été modifiés par l'administrateur ou un progiciel. En plus de travailler sur plusieurs distributions.
Pour RHEL, vous devez utiliser:
cat /etc/redhat-release
Vous pouvez regarder le contenu de/etc/redhat-release, qui ressemblera à ceci:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
Le contenu est différent pour un système RHEL réel. Cette technique fonctionne sur tous les dérivés RedHat, y compris CentOS, Fedora et autres.
Je préfère utiliser le fichier/etc/issue.
$ cat /etc/issue
J'ai vu de nombreuses situations où/etc/redhat-release a été modifié pour répondre aux exigences de compatibilité logicielle (Dell ou les agents de gestion HP, par exemple).
Le moyen le plus fiable quandlsb_release
n'est pas installé est:
# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server
# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6
Sur les installations minimales, lsb_release
est manquant.
Pour que cela fonctionne également avec les clones Red Hat (le mérite revient aux commentaires):
# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')
Ou, comme une seule commande (plutôt que deux "rpm" en cours d'exécution):
# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'
Utilisez sed
/cut
et d'autres outils de manipulation de texte UNIX pour obtenir ce que vous voulez.
En supposant que c'est vraiment une version de Red Hat (pas Centos):
rpm -q redhat-release
Ou lancez simplement:
uname -r
Et mappez la sortie. 2.6.9 les noyaux sont RHEL4, 2.6.18 les noyaux sont RHEL5. Si nécessaire, vous pouvez mapper la version complète aux versions de mise à jour spécifiques de Red Hat (par exemple, 2.6.9-89 est RHEL5 U4).
Je préfère hostnamectl
:
$ hostnamectl
Static hostname: xxxxxx.xxx.xxx
Icon name: computer-server
Chassis: server
Machine ID: 3e3038756eaf4c5c954ec3d24f35b13f
Boot ID: 958452e0088b4191a4ea676ebc90403b
Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.5:GA:server
Kernel: Linux 3.10.0-862.3.3.el7.x86_64
Architecture: x86-64
J'aime bien utiliser le /etc/os-release
fichier, qui se trouve dans la version RPM:
# yum whatprovides /etc/os-release
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
* base: dl.za.jsdaav.net
* extras: dl.za.jsdaav.net
* updates: dl.za.jsdaav.net
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo : base
Matched from:
Filename : /etc/os-release
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo : @anaconda
Matched from:
Filename : /etc/os-release
Ce fichier peut provenir de scripts, comme:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Si vous souhaitez simplement obtenir les numéros de version, ce qui suit est à peu près aussi court et simple que possible.
Testé sur rhel 6.7, rhel 7.2, debian 8.3 et ubuntu 14.04:
lsb_release -s -r | cut -d '.' -f 1
Pour un exemple pratique, disons que vous voulez tester la version majeure et mineure de distribution et faire les choses en fonction de cela:
#!/bin/bash
major=$(lsb_release -s -r | cut -d '.' -f 1)
minor=$(lsb_release -s -r | cut -d '.' -f 2)
if (( "$major" >= 7 ))
then
echo "Do stuff, OS major version is $major"
echo "OS minor version is $minor"
else
echo "Do other things"
echo "Your version is $major.$minor"
fi
Une arrivée tardive à cela, mais je me suis amusé à essayer de comprendre la version RHEL sur plusieurs nœuds distants. Donc, si vous avez un lot de serveurs qui utilisent le même mot de passe (je sais, je sais ...) voici une vérification rapide et sale de la version RedHat:
Créer un script attend
vim server-version.sh
Attendez-vous à ce que le script vérifie la version principale de RedHat sur plusieurs hôtes distants
#!/usr/bin/expect
log_user 0
spawn ssh -l root [lindex $argv 0]
expect "assword:"
send "sUp3rS3cr3tP4ssW0rd^\r"
expect "# "
log_user 1
send "cat /etc/redhat-release\r"
expect "*#"
log_user 0
send "exit\n"
Exécutez le script pour tous vos nœuds
[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;
Sortie
server1: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server1 ~]#
server2: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server2 ~]#
...