Quelle version de RHEL est-ce que j'utilise?

151

À 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 les versions majeure et mineure, par exemple RHEL 4.0 ou RHEL 5.1, etc.

Arthur Ulfeldt
la source

Réponses:

154

Vous pouvez utiliser la lsb_releasecommande sur différentes 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 modifiés ou non par l’administrateur ou un progiciel. En plus de travailler sur plusieurs distributions.

Pour RHEL, vous devez utiliser:

cat /etc/redhat-release
Zypher
la source
5
commande introuvable sur ma boîte CentOS 5.4 :(
gbjbaanb
@gbjbaanb: C'est étrange, je l'ai testé sur une nouvelle installation minimale de 5.4 et tout a bien fonctionné ...
Zypher
26
lsb_release -i -r-bash: lsb_release: commande introuvable. Toutefois, cat /etc/redhat-releasela version 5.6 de Red Hat Enterprise Linux Server (Tikanga)
Tom,
7
À titre d'information: ne fonctionne pas sur l'installation minimale de RHEL 6.5. La commande lsb_release est introuvable.
Sborsky
4
lsb_release n'est pas un boîtier léger, il tire dans CUPS de fournir « / usr / bin / lp », qui tire dans une Goop de traduction pdf, qui tire dans certaines bibliothèques de rendu ...
Jens Timmerman
142

Vous pouvez consulter 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.

alsacs
la source
14
C'est la réponse la plus appropriée à la question.
Fsoppelsa
lsb_releaseest la première chose à essayer, mais depuis que cela peut ne pas être installé en regardant les fichiers est un bon plan B.
poussins
1
@chicks Etant donné que la question demande un test pour les systèmes Redhat, et que lsb_release n'est pas installé par défaut sur les systèmes redhat et que / etc / redhat-release est activé, alors lsb_release n'est évidemment pas la première chose à essayer!
revoir
@bye C'est la première chose à essayer (du moins à mon avis), vous essayez toujours les choses qui devraient être communes sur toutes les distributions en premier, puis vous passez uniquement aux solutions spécifiques à la distribution.
Dennis Nolte
25

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 (agents de gestion Dell ou HP, par exemple).

ewwhite
la source
1
/etc/issuefonctionne également sur d’autres systèmes d’exploitation, tels que Debian et Ubuntu, et fonctionne avec les systèmes d’exploitation Linux qui ne sont pas conformes à la base de normalisation Linux et avec les systèmes d’exploitation légers ne disposant pas des utilitaires lsb *.
Stefan Lasiewski
5
Ce n'est pas fiable. Apparemment, il /etc/issueest censé être analysé par agetty , qui remplace les séquences d'échappement par des informations appropriées. Si vous venez juste cat, le résultat peut être décevant. Sur Fedora, on obtient Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), ce qui vous dit quelque chose, mais sur RHEL7, on obtient juste \S Kernel \r on an \m.
David Tonhofer le
Notez que cela /etc/issuepeut être remplacé par l’administrateur local et n’est donc pas une source d’information fiable.
larsks
13

Le moyen le plus fiable quand lsb_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, il lsb_releasemanque.

Pour que cela fonctionne aussi avec les clones Red Hat (le crédit revient aux commentaires):

# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')

Ou, en tant que commande unique (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/ cutet d’autres outils de manipulation de texte UNIX pour obtenir ce que vous voulez.

lzap
la source
2
Cela semble fonctionner, plus génériquement: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl est pour Scientific Linux; Si vous connaissez le bon nom pour les autres reconstructions RHEL, commentez ci-dessous. Attention - pas testé de manière approfondie.
Dan Pritts
1
Oui merci, une remarque: ne fonctionne pas avec RHEL Worstation.
Lzap
Une remarque - cela s'exécute beaucoup plus lentement que l'analyse / etc / foo-release.
Dan Pritts
1
ou rpm -qa | grep releaseest encore plus facile
warren
6

En supposant que ce soit vraiment une version de Red Hat (pas Centos):

rpm -q redhat-release

Ou tout simplement courir:

uname -r

Et mappez la sortie. Les noyaux 2.6.9 sont RHEL4, les noyaux 2.6.18 sont RHEL5. Si nécessaire, vous pouvez mapper la version complète sur les versions de mise à jour spécifiques de Red Hat (par exemple, la version 2.6.9-89 correspond à RHEL5 U4).

TCampbell
la source
1
rpm -q redhat-releaserevient juste package redhat-release is not installedpour moi, et uname -rme dit juste la version du noyau.
Mark Booth
Oh! Et maintenant que le temps est passé, que serait RHEL6? RHEL7? Hum ... Voici les réponses: access.redhat.com/articles/3078#RHEL7
mika
3

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
Wernfried Domscheit
la source
2

J'aime bien utiliser le /etc/os-releasefichier, 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 être recherché dans des scripts, tels que:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Andrew
la source
Intéressant, utile. Malheureusement, non présent sur RHEL6, donc d’une valeur limitée pour le moment.
Dan Pritts
1

Si vous voulez simplement obtenir les numéros de version, voici ce qui suit est aussi simple et rapide 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, supposons que vous souhaitiez tester les versions majeure et mineure de la distribution et que vous utilisiez ces fonctions:

#!/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
aseq
la source
1

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 rapide et sale pour vérifier la version de RedHat:

Créer un script d'attente

vim server-version.sh

Attendez-vous à ce qu'un 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 ~]#

...
Lefty G Balogh
la source
Si vous envisagez d'effectuer des tâches à distance sur de nombreuses machines, je vous recommande fortement d'utiliser Ansible plutôt que des scripts bash roulés à la main.
Neil Mayhew le
Je recommande également de ne pas activer la connexion root sur ssh
Neil Mayhew le