Qual versão do RHEL eu estou usando?

151

No shell e sem privilégios de root, como posso determinar qual versão do Red Hat Enterprise Linux estou executando?

Idealmente, eu gostaria de obter a versão principal e secundária, por exemplo, RHEL 4.0 ou RHEL 5.1, etc.

Arthur Ulfeldt
fonte

Respostas:

154

Você pode usar o lsb_releasecomando em várias distribuições Linux:

lsb_release -i -r 

Isso informará a distribuição e a versão e é um pouco mais preciso do que acessar arquivos que podem ou não ter sido modificados pelo administrador ou por um pacote de software. Além de trabalhar em várias distribuições.

Para RHEL, você deve usar:

cat /etc/redhat-release
Zypher
fonte
5
comando não encontrado na minha caixa do CentOS 5.4 :(
gbjbaanb
@gbjbaanb: Isso é estranho que eu testei em um novo 5,4 instalação mínima e funcionou muito bem ...
Zypher
26
lsb_release -i -r-bash: lsb_release: comando não encontrado. No entanto, o cat /etc/redhat-releaseRed Hat Enterprise Linux Server versão 5.6 (Tikanga)
Tom
7
Apenas para constar: Não funciona na instalação mínima do RHEL 6.5. O comando lsb_release não está em nenhum lugar.
sborsky
4
lsb_release não é um pacote leve, Ele puxa CUPS para fornecer '/ usr / bin / lp', que puxa em alguns goop tradução pdf, que puxa em algumas bibliotecas de renderização ...
Jens Timmerman
142

Você pode olhar o conteúdo de / etc / redhat-release, que será algo como isto:

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

O conteúdo é diferente para um sistema RHEL real. Esta técnica funciona em todos os derivados RedHat, incluindo CentOS, Fedora e outros.

larsks
fonte
14
Esta é a resposta mais apropriada para a pergunta.
Fev1
lsb_releaseé a primeira coisa a fazer, mas uma vez que não pode ser instalado olha arquivos é um bom plano B.
pintos
1
@chicks Dado que a pergunta pede um teste para os sistemas Redhat, e lsb_release não é instalado por padrão nos sistemas redhat e / etc / redhat-release, então lsb_release obviamente não é a primeira coisa a tentar!
bye
@bye É a primeira coisa a tentar (pelo menos na minha opinião), você sempre tenta as coisas que devem ser comuns em todas as distribuições primeiro, depois apenas muda para soluções específicas de distribuição.
Dennis Nolte
25

Eu prefiro usar o arquivo / etc / issue.

$ cat /etc/issue

Eu já vi muitas situações em que o / etc / redhat-release foi modificado para atender aos requisitos de compatibilidade de software (agentes de gerenciamento da Dell ou da HP, por exemplo).

ewwhite
fonte
1
/etc/issuetambém funciona em outros sistemas operacionais, como Debian e Ubuntu, e sistemas operacionais Linux que não estão em conformidade com a Linux Standards Base e sistemas operacionais leves que não têm os utilitários lsb * instalados.
Stefan Lasiewski
5
Isso não é confiável. Aparentemente, ele /etc/issuedeve ser analisado com agetty , que substitui as seqüências de escape por informações apropriadas. Se você apenas cat, o resultado pode ser abaixo do esperado. No Fedora, um recebe Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), o que lhe diz algo, mas no RHEL7, um recebe \S Kernel \r on an \m.
David Tonhofer
Observe que /etc/issuepode ser substituído pelo administrador local e, portanto, não é uma fonte confiável de informações.
Larsks # 04/18
13

A maneira mais confiável quando lsb_release não está instalado é:

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

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

Em instalações mínimas, lsb_releaseestá faltando.

Para que isso funcione também com os clones da Red Hat (o crédito vai para os comentários):

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

Ou, como um único comando (em vez de dois "rpm" serem executados):

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

Use sed/ cute outras ferramentas de manipulação de texto do UNIX para obter o que deseja.

lzap
fonte
2
Isso parece funcionar de maneira mais genérica: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl é para o Scientific Linux; se você souber o nome certo para outras reconstruções do RHEL, talvez comente abaixo. Aviso - não extensivamente testado.
Dan Pritts
1
Sim, obrigado, uma observação: não funciona com o RHEL Worstation.
Lzap 6/02
Uma observação - isso é muito mais lento que analisar / etc / foo-release.
Dan Pritts 11/03/2015
1
ou rpm -qa | grep releaseé ainda mais fácil
Warren
6

Supondo que seja realmente um lançamento da Red Hat (não o Centos):

rpm -q redhat-release

Ou apenas execute:

uname -r

E mapeie a saída. 2.6.9 kernels são RHEL4, 2.6.18 kernels são RHEL5. Se necessário, você pode mapear a versão completa para os lançamentos de atualização específicos da Red Hat (por exemplo, 2.6.9-89 é RHEL5 U4).

TCampbell
fonte
1
rpm -q redhat-releaseapenas retorna package redhat-release is not installedpara mim e uname -rapenas me diz o lançamento do kernel.
Mark Booth
Oh! E agora que o tempo passou, qual seria o RHEL6? RHEL7? Hum ... Aqui estão as respostas: access.redhat.com/articles/3078#RHEL7
mika
3

Eu prefiro 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
fonte
2

Eu gosto bastante de usar o /etc/os-releasearquivo, que está no release 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 arquivo pode ser originado em scripts, como:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Andrew
fonte
Interessante, útil. Infelizmente, não está presente no RHEL6, de valor limitado no momento.
Dan Pritts
1

Se você quiser apenas obter os números de versão, o seguinte é o mais curto e simples possível.

Testado no rhel 6.7, rhel 7.2, debian 8.3 e ubuntu 14.04:

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

Para um exemplo prático, diga que deseja testar a versão principal e secundária da distribuição e faça as coisas com base nisso:

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

Cheguei atrasado, mas me diverti tentando descobrir a versão RHEL em vários nós remotos. Portanto, se você tiver um lote de servidores que usam a mesma senha (eu sei, eu sei ...), aqui está uma rápida e suja verificação da versão do RedHat:

Crie um script esperado

vim server-version.sh

Espere que o script verifique a versão principal do RedHat em vários 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"

Execute o script para todos os seus nós

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

Resultado

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
fonte
Se você for fazer coisas remotas em muitas máquinas, recomendo usar o Ansible em vez de scripts bash rolados manualmente.
Neil Mayhew
Eu também recomendo não permitindo login root via ssh
Neil Mayhew