사용중인 RHEL 버전을 확인하는 방법은 무엇입니까?


14

Red Hat Enterprise Linux 5에서 RHEL 6으로 머신을 천천히 전환하는 환경에서 일하고 있습니다.

RHEL6 컴퓨터에서 현재 RHEL5 컴퓨터에서 수행중인 작업과 미묘하게 다른 작업을 수행하려면 일부 스크립트가 필요합니다.

실용적인 솔루션은 런타임에 검사하고 RHEL5에서 일부 명령을 실행하고 다른 명령을 RHEL6에서 실행하고 일부는 둘 다 실행하는 것입니다.

이에 대한 실제 예는 환경 모듈과 내 .bashrc포함 module load git라인을 사용하고 있지만 RHEL6 시스템에서이 명령 오류는 다음과 같습니다.

RHEL6 system, git should be installed - not loading module

모듈 파일을 보면 다음 코드가 있습니다.

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

이것은 내가 원하는 것을하는 것처럼 보이지만 더 짧은 것을 원했습니다.

그렇다면 bash 스크립트로 RHEL6에서 RHEL5에게 가장 쉬운 방법은 무엇입니까?

이상적으로는 여러 주요 버전에서 강력해야하지만 마이너 릴리스 번호의 변형에 견딜 수 있어야합니다.


않는 lsb_release일을? ( -r숫자 만 제시해야하며 -a가능한 모든 것을 보려고 노력 하십시오) 그렇다면 공급 업체도 마찬가지입니다.
derobert

플랫폼이 아닌 기능을 테스트하십시오. RHEL7이 나오면 오늘 플랫폼 테스트가 중단되고 RHEL 6.next가 나오면 그 이전에 중단 될 수 있습니다. 아마 EL5 기능을 6.x로 포팅하여 제거에 대한 불만을 침묵시키기 때문일 것입니다. 따라서 스크립트에 gitBash 모듈이 필요한 경우 호출하기 전에 Bash 모듈이 있는지 확인하십시오. 나중에 표시되면 수표 결과가 변경되므로 추가 노력없이 갑자기 기능이 작동하기 시작합니다.
워렌 영

@WarrenYoung-감사합니다.하지만 여기서는 sysasmin이 아니며 중앙에서 관리되는 RHEL 배포 사용자입니다. 우리의 모든 RHEL5 머신은 본질적으로 동일한 이미지이므로 모든 RHEL6 머신을 분리했습니다. 현재 RHEL6으로 이전 할 계획 단계에 있기 때문에 RHEL7에 대해 걱정해야 할 시간이 있다고 생각합니다. * 8 ')
Mark Booth

RHEL5 & 6의 @derobert-No lsb_release -r는 다른 텍스트도 포함합니다 (예 :) Release: 5.8. 그러나 Dennis Kaarsemaker가 설명 하듯이 lsb_release -rs대신 사용 하면 숫자 만 얻을 수 있습니다.
마크 부스

serverfault.com/questions/89654/what-version-of-rhel-am-i-using 도 참조하십시오 . lsb가 설치되지 않은 경우 RPM으로이를 수행하기위한 팁이 있습니다.
Dan Pritts

답변:


10

lsb_release명령을 사용할 수도 있습니다 . 이미 확실하다면 RHEL의 주요 버전 번호는 다음과 같습니다.

majversion=$(lsb_release -rs | cut -f1 -d.)

Centos 및 Redhat에서 올바르게 작동하며 Redhat의 Oracle Linux 릴리스에서는 실패합니다. lsb_release를 찾을 수 없습니다.
user959690

이 답변은 이제 구식입니다. lsb_releaseRHEL / CentOS 5 컴퓨터 에서만 찾을 수 있습니다. 6 일이나 7 일에 찾을 수 없습니다.
Dale Anderson

redhat-lsb-core 패키지를 설치해야 할 수도 있습니다.
Dennis Kaarsemaker

15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

이것이 내가 생각할 수있는 가장 간단한 방법입니다.


CentOS 및 RHEL의 모든 변형에 대해 작동합니다. 5에서 7 lsb_release까지만
Dale Anderson

4

사용하다 rpm -q |grep redhat-release-server

/etc/redhat-release파일은 실제 OS 업그레이드를 수행없이 제 3 자 소프트웨어를 설치하고자하는 관리자에 의해 편집 될 수 있었다.


1
rpm -qa대신에 의미 했습니까 rpm -q? -q자체적으로 사용 하려면 쿼리 인수가 필요합니다.
데일 앤더슨

@ 데일 앤더슨, 감사합니다, 이것은 7.4에서 저를 위해 일한 유일한 사람이며, 내가 이것을 실행할 7.4때까지 그것을 알지 못했습니다-qa
Brian Thomas

2

/etc/issue파일 대신 파일 을 사용하여 여러 Linux 배포판에서이를 확장 할 수 /etc/redhat-release있습니다.


2
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpm와 같은 것을 인쇄합니다 25.el7. 그런 다음 마지막 숫자를 가져 가면됩니다. RHEL 5,6,7 및 Fedora 24에서 테스트되었습니다.

다른 사람들이 지적했듯이 lsb-version설치되지 않을 수 있습니다. 또한 redhat-release-server패키지가 설치 되지 않은 RHEL5 시스템이 하나 이상 있습니다.


감사합니다. 항상 작동하고 원하는 숫자를 정확하게 반환하기 때문에 upvoted해야합니다.
phiphi

1

이 결과를 얻는 또 다른 더 정확한 방법이 있습니다. RHEL의 커널 패키지에는 'elN'이라는 문자열이 포함되어 있으며 여기서 N은 OS의 주요 버전을 나타냅니다. 따라서 다음 명령을 실행하여 RHEL 버전을 식별 할 수 있습니다.

# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'

지정된 호스트에서 일치하는 문자열에 따라 "el5", "el6"또는 "el7"문자열을 반환합니다.


CentOS와 RedHat, 버전 5-7을 함께 사용하고 있으며 실제로 모든 버전에서 작동합니다. uname -r | sed 's /^.* (el [0-9] \ +). * $ / \ 1 /'
WallStProg

0

나는 jordanm 의 대답을 사용 했지만 결국 내 자신의 비틀기를 추가했습니다.

rhel6 명령과 rhel5 명령을 모두 함께 사용하고 싶지는 않았지만 자체 섹션 내에서 인터리브되었으므로 전환하려고 할 때 마다이 코드를 복제하고 싶지 않았기 때문에 대신 이것을했다 :

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

그렇게하면 다음과 같은 일을 할 수 있습니다.

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

기타



0

여기에 언급 된 모든 방법은 텍스트 파일에 의존하므로 오해의 소지가 있습니다. 올바른 액세스 권한이있는 일부 사용자는이 정보를 난독 처리하기 위해 / etc / redhat-release, / etc / issue 등의 내용을 변경할 수 있습니다. 보다 안정적인 방법은 각 RHEL 버전에서 일반적으로 Red Hat이 제공하는 커널 릴리즈를 아는 것입니다.

  • RHEL4는 커널 2.6.9-X를 사용합니다
  • RHEL5는 커널 2.6.18-X를 사용합니다
  • RHEL6은 커널 2.6.32-X를 사용합니다
  • RHEL7은 커널 3.10.0-X를 사용합니다

지금까지는 항상을 실행하여 실행중인 커널 릴리스를 찾을 수 있습니다 uname -r. 당신은 라인을 따라 뭔가를 실행하여 더 멋진 얻을 수 있습니다

uname -r | awk -F- '{print $1}'

위 표와 같이 커널에 대한 특정 정보를 제공합니다. 커널 배포판을 지속적으로 사용하는 다른 배포판에 대해서도 병렬로 구동 할 수 있습니다.


2
-1. 관리자는 커널을 쉽게 업데이트하기로 결정할 수 있습니다.
Oliver Gondža

0

RHEL 6은 / etc / system-release-cpe 파일을 추가했습니다. 여기에는 :다음과 같이 보일 수 있는 분리 된 문자열 이 포함됩니다

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

이제 RHEL 버전과 RHEL 변형을 얻기 위해 $ 5와 $ 7 필드를 가져 오는 것으로 충분합니다.

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')

0

RHEL 6부터 가장 간결한 방법은 다음과 같습니다.

cat /etc/system-release-cpe | cut -d ':' -f5

그것이 "가장 간결"해야한다면 cut -d: -f5 /etc/system-release-cpuUUOC를 피하고 피하십시오. 그러나 RHEL 5에서 6으로 전환하는 것에 대한 질문이었습니다. RHEL 6부터 만 작동하는 경우 질문 요구 사항을 충족시키지 못합니까?
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.