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.
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.
Respostas:
Você pode usar o lsb_release
comando 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
lsb_release -i -r
-bash: lsb_release: comando não encontrado. No entanto, o cat /etc/redhat-release
Red Hat Enterprise Linux Server versão 5.6 (Tikanga)
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.
lsb_release
é a primeira coisa a fazer, mas uma vez que não pode ser instalado olha arquivos é um bom plano B.
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).
/etc/issue
també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.
/etc/issue
deve 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
.
/etc/issue
pode ser substituído pelo administrador local e, portanto, não é uma fonte confiável de informações.
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_release
está 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
/ cut
e outras ferramentas de manipulação de texto do UNIX para obter o que deseja.
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.
rpm -qa | grep release
é ainda mais fácil
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).
rpm -q redhat-release
apenas retorna package redhat-release is not installed
para mim e uname -r
apenas me diz o lançamento do kernel.
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
Eu gosto bastante de usar o /etc/os-release
arquivo, 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)
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
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 ~]#
...