À 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.
À 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.
Réponses:
Vous pouvez utiliser la lsb_release
commande 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
lsb_release -i -r
-bash: lsb_release: commande introuvable. Toutefois, cat /etc/redhat-release
la version 5.6 de Red Hat Enterprise Linux Server (Tikanga)
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.
lsb_release
est la première chose à essayer, mais depuis que cela peut ne pas être installé en regardant les fichiers est un bon plan B.
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).
/etc/issue
fonctionne é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 *.
/etc/issue
est 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
.
/etc/issue
peut être remplacé par l’administrateur local et n’est donc pas une source d’information fiable.
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_release
manque.
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
/ cut
et d’autres outils de manipulation de texte UNIX pour obtenir ce que vous voulez.
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.
rpm -qa | grep release
est encore plus facile
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).
rpm -q redhat-release
revient juste package redhat-release is not installed
pour moi, et uname -r
me dit juste la version du noyau.
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 être recherché dans des scripts, tels que:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
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
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 ~]#
...