
저는 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" 필드가 옴)으로 결과를 제공하도록 요청합니다. 이는 버전 번호를 정렬하기 위해 to(시도)로 파이프되고 , 첫 번째 줄만 인쇄하기 sort -V
위한 파이프가 이어지며 추가 VERSION 필드를 제거하여 기본 출력이 생성됩니다.awk
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
패키지 이름으로 대체)
이는 기본적으로 동일한 명령을 수행하고 설치 당시의 Unix 타임스탬프(태그에 있음 )를 각 줄의 접두사 rpm -qa
로 사용하여 전체 패키지 이름을 인쇄합니다 . 그런 다음 출력을 가장 오래된 것부터 최신 순으로 정렬하고 출력의 첫 번째 줄을 가져와서 전체 패키지 이름이 될 마지막 열을 인쇄합니다.--queryformat
%{INSTALLTIME}
sort -n
하지만 Jeff는 잘 작동합니다. 아마도 개인 취향의 문제일 것입니다.
답변3
yum 다운그레이드 패키지 이름을 사용할 수 있습니다. 때때로 새로운 패키지에 버그가 있습니다. 이전 패키지로 다운그레이드했습니다.