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
최선의 선택이라고 생각합니다.
6.
7.
or로 시작하는 첫 번째 단어를 찾아8.
값([678]\.
)을 얻습니다. 아마도 이것이 가장 안전할 것입니다.아니면 붙잡은 후 첫 번째 단어
release
.
sed
awk
다른 도구를 사용하여 이 작업을 수행하는 좋고 쉬운 방법에 대한 제안이 궁금합니다 .
답변1
다음 중 하나 release
를 구문 분석할 수 있습니다.
/etc/os-release
RHEL은 단순히 변수를 가져와서 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