저는 RHEL을 가지고 있고 서버 중 하나에 동일한 RPM 패키지의 두 가지 다른 버전을 설치했습니다.
[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64
기존 패키지 이름만 그대로 받을 수 있는지 궁금합니다. 기본적으로 나는 다음과 같은 것을 성취하고 싶습니다:
[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package
어떻게 해야 합니까?
답변1
동일한 패키지의 두 가지 버전을 어떻게 설치하는지 잘 모르겠지만 이렇게 하면 작업이 완료됩니다.
rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
sort -V | \
awk 'NR==1 { print $2 }'
첫 번째 줄은 RPM 데이터베이스에 my-package-name을 쿼리하여 RPM에 특정 형식(VERSION 뒤에 기본 "rpm -qa" 필드)으로 결과를 제공하도록 요청합니다. 버전 번호를 정렬하기 위해 파이프된 sort -V
다음 awk
첫 번째 줄만 인쇄하도록 파이프되어 추가 VERSION 필드를 제거하여 rpm -qa
기본 출력이 생성됩니다.
-V
이렇게 하면 정렬 플래그를 사용하여 RHEL 시스템에서 실행하고 있다고 가정하는 것이 안전해집니다 .
답변2
나는 항상 버전 문자열 해석에 의존하는 프로그램에 대해 편집증적이므로 Jeff의 솔루션 대신 다음을 수행할 수도 있습니다.
[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64
( kernel
패키지 이름을 바꾸세요)
rpm -qa
기본적으로 --queryformat
동일한 명령을 실행하고 각 줄 앞에 설치의 Unix 타임스탬프(레이블에 있음)를 붙여 전체 패키지 이름을 인쇄합니다 %{INSTALLTIME}
. 그런 다음 sort -n
출력을 가장 오래된 것부터 최신 것까지 정렬하고 출력의 첫 번째 줄만 가져온 다음 전체 패키지 이름이 될 마지막 열을 인쇄하는 데 사용됩니다 .
하지만 Jeff의 작업은 꽤 좋습니다. 이는 개인 취향의 문제일 수 있습니다.
답변3
yum을 사용하여 패키지 이름을 다운그레이드할 수 있습니다. 때때로 새 패키지에 오류가 있습니다. 이전 패키지로 다운그레이드했습니다.