이전 패키지의 이름을 얻는 방법은 무엇입니까?

이전 패키지의 이름을 얻는 방법은 무엇입니까?

저는 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 필드를 제거하여 기본 출력이 생성됩니다.awkrpm -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 다운그레이드 패키지 이름을 사용할 수 있습니다. 때때로 새로운 패키지에 버그가 있습니다. 이전 패키지로 다운그레이드했습니다.

관련 정보