¿Qué versión de RHEL estoy usando?

151

Desde el shell y sin privilegios de root, ¿cómo puedo determinar qué versión de Red Hat Enterprise Linux estoy ejecutando?

Idealmente, me gustaría obtener la versión de lanzamiento principal y secundaria, por ejemplo RHEL 4.0 o RHEL 5.1, etc.

Arthur Ulfeldt
fuente

Respuestas:

154

Puede usar el lsb_releasecomando en varias distribuciones de Linux:

lsb_release -i -r 

Esto le indicará la Distribución y la Versión y es un poco más preciso que acceder a archivos que pueden haber sido modificados o no por el administrador o un paquete de software. Además de trabajar en múltiples distribuciones.

Para RHEL, debe usar:

cat /etc/redhat-release
Zypher
fuente
55
comando no encontrado en mi caja CentOS 5.4 :(
gbjbaanb
@gbjbaanb: Eso es extraño. Lo probé en una nueva instalación mínima de 5.4 y funcionó bien ...
Zypher
26
lsb_release -i -r-bash: lsb_release: comando no encontrado. Sin embargo, cat /etc/redhat-releaseRed Hat Enterprise Linux Server versión 5.6 (Tikanga)
Tom
77
Solo para el registro: no funciona en la instalación mínima de RHEL 6.5. El comando lsb_release no se encuentra en ninguna parte.
sborsky
44
lsb_release no es un paquete liviano, extrae CUPS para proporcionar '/ usr / bin / lp', que extrae un poco de traducción de pdf, que extrae algunas bibliotecas de renderizado ...
Jens Timmerman
142

Puede ver el contenido de / etc / redhat-release, que se verá así:

$ cat /etc/redhat-release 
CentOS release 5.4 (Final)

Los contenidos son diferentes para un sistema RHEL real. Esta técnica funciona en todos los derivados de RedHat, incluidos CentOS, Fedora y otros.

larsks
fuente
14
Esta es la respuesta más apropiada a la pregunta.
fsoppelsa
lsb_releasees el primero que hay que tratar, pero ya que no se haya instalado mirando archivos es un buen plan B.
pollitos
1
@chicks Dado que la pregunta solicita una prueba para los sistemas Redhat, y lsb_release no está instalado de forma predeterminada en los sistemas redhat y / etc / redhat-release, entonces lsb_release obviamente no es lo primero que hay que intentar.
adiós
@bye Es lo primero que debes probar (al menos en mi opinión), siempre intentas primero las cosas que deberían ser comunes en todas las distribuciones, luego solo cambias a soluciones específicas de distribución.
Dennis Nolte
25

Prefiero usar el archivo / etc / issue.

$ cat /etc/issue

He visto muchas situaciones en las que / etc / redhat-release se ha modificado para cumplir con los requisitos de compatibilidad de software (por ejemplo, los agentes de administración de Dell o HP).

ewwhite
fuente
1
/etc/issuetambién funciona en otros sistemas operativos, como Debian y Ubuntu, y funciona con sistemas operativos Linux que no se ajustan a la base de estándares de Linux y sistemas operativos livianos que no tienen instaladas las utilidades lsb *.
Stefan Lasiewski
55
Esto no es confiable. Aparentemente /etc/issueestá destinado a ser analizado por agetty , que reemplaza las secuencias de escape con la información adecuada. Si lo cathace, el resultado puede ser decepcionante. En Fedora, uno obtiene Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), que le dice algo, pero en RHEL7, uno simplemente obtiene \S Kernel \r on an \m.
David Tonhofer
Tenga en cuenta que /etc/issuepuede ser reemplazado por el administrador local y, por lo tanto, no es una fuente confiable de información.
larsks
13

La forma más confiable cuando lsb_release no está instalado es:

# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server

# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6

En instalaciones mínimas, lsb_releasefalta.

Para que esto funcione también con clones de Red Hat (el crédito va a los comentarios):

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

O, como un solo comando (en lugar de ejecutar dos "rpm"):

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

Utilice sed/ cuty otras herramientas de UNIX para manipular texto para obtener lo que desea.

lzap
fuente
2
Esto parece funcionar, más genéricamente: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl es para Scientific Linux; si conoce el nombre correcto para otras reconstrucciones de RHEL, tal vez comente a continuación. Advertencia: no se ha probado exhaustivamente.
Dan Pritts
1
Sí, gracias, una nota: no funciona con RHEL Worstation.
lzap
Una nota: esto es mucho más lento que analizar / etc / foo-release.
Dan Pritts
1
o rpm -qa | grep releasees aún más fácil
warren
6

Asumiendo que realmente es un lanzamiento de Red Hat (no Centos):

rpm -q redhat-release

O simplemente ejecuta:

uname -r

Y mapear la salida. 2.6.9 los núcleos son RHEL4, 2.6.18 los núcleos son RHEL5. Si es necesario, puede asignar la versión completa a las versiones de actualización específicas de Red Hat (es decir, 2.6.9-89 es RHEL5 U4).

TCampbell
fuente
1
rpm -q redhat-releasesolo regresa package redhat-release is not installedpor mí y uname -rme dice la versión del kernel.
Mark Booth
Oh ! Y ahora que ha pasado el tiempo, ¿cuál sería RHEL6? RHEL7? Hum ... Aquí están las respuestas: access.redhat.com/articles/3078#RHEL7
mika
3

Yo prefiero 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
fuente
2

Me gusta mucho usar el /etc/os-releasearchivo, que está en la versión 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

Este archivo puede obtenerse en scripts, como:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Andrés
fuente
Interesante, útil. Desafortunadamente, no está presente en RHEL6, por lo que tiene un valor limitado en este momento.
Dan Pritts
1

Si desea obtener los números de versión, lo siguiente es lo más breve y simple posible.

Probado en rhel 6.7, rhel 7.2, debian 8.3 y ubuntu 14.04:

lsb_release -s -r | cut -d '.' -f 1

Para un ejemplo práctico, digamos que desea probar la distribución de la versión mayor y menor y hacer cosas basadas en eso:

#!/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
fuente
1

Llegué tarde a esto, pero me divertí tratando de descubrir la versión RHEL en varios nodos remotos. Entonces, si tiene un lote de servidores que usan la misma contraseña (lo sé, lo sé ...) aquí hay una rápida y sucia para verificar la versión de RedHat:

Crear un script de espera

vim server-version.sh

Espere que el script verifique la versión principal de RedHat en varios hosts remotos

#!/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"

Ejecute el script para todos sus nodos

[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;

Salida

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 ~]#

...
Zurdo G Balogh
fuente
Si va a hacer cosas remotas en muchas máquinas, le recomiendo usar Ansible en lugar de scripts de bash enrollados a mano.
Neil Mayhew
También recomiendo no habilitar el inicio de sesión raíz a través de ssh
Neil Mayhew