/etc/redhat-relase에서 Red Hat 버전 수준 추출

/etc/redhat-relase에서 Red Hat 버전 수준 추출

Red Hat 박스의 실제 버전 수준을 변수로 끌어오는 방법을 작성해야 합니다.

/etc/redhat-release파일 에 집중하고 있어요 . 저는 이것이 간단한 것이라고 생각했는데 awk '{ print $7 }', RH8은 값을 6번째 단어로 변경했기 때문에 간단한 해결책은 사라졌습니다. (비슷한 질문으로 이 사이트를 검색했는데 답변은 모두 값의 안정적인 위치와 관련이 있었습니다. 이 경우 OS 버전이 어느 필드 번호에 위치할지 알 수 없습니다.)

예:

Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)

나는 사용하는 것이 sed최선의 선택이라고 생각합니다.

  1. 6.7.or로 시작하는 첫 번째 단어를 찾아 8.값( [678]\.)을 얻습니다. 아마도 이것이 가장 안전할 것입니다.

  2. 아니면 붙잡은 후 첫 번째 단어 release.

sedawk다른 도구를 사용하여 이 작업을 수행하는 좋고 쉬운 방법에 대한 제안이 궁금합니다 .

답변1

다음 중 하나 release를 구문 분석할 수 있습니다.

/etc/os-releaseRHEL은 단순히 변수를 가져와서 OS 버전을 제공할 수 있다고 생각합니다 .

source /etc/os-release; echo $VERSION_ID

또한 다른 편리한 운영 체제 관련 변수도 많이 포함되어 있습니다.

답변2

다음을 위해 사용할 수 있습니다 lsb_release:

$ lsb_release -rs
8.6

lsb_release또 다른 방법은 구문 분석할 필요가 없습니다./etc/os-release(이것은 제안입니다RHEL 9 이상):

awk -F'[="]' '/VERSION_ID/ { print $3 }' /etc/os-release

답변3

다음을 수행하여 문자열의 마지막 필드 앞의 필드를 격리할 수 있습니다.

... awk '{print $(NF-1)}'

예를 들어:

echo "Red Hat Enterprise Linux Server release 6.10 (Santiago)"|awk '{print $(NF-1)}'
6.10

echo "Red Hat Enterprise Linux release 8.5 (Ootpa)"|awk '{print $(NF-1)}'
8.5

답변4

cat file.txt
Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)

산출

awk '{for(i=1;i<=NF;i++){if($i ~ /[0-9]/){print $i}}}' file.txt
6.10
7.9
8.6
8.5

관련 정보