Comment get un nom de package plus ancien?

J'ai un RHEL et sur l'un des servers j'ai installé le même package RPM dans deux versions différentes.

[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 

Je me request s'il est possible de recevoir seulement le nom de package plus ancien? Fondamentalement, je veux accomplir quelque chose comme ceci:

 [root ~]# rpm -qa | grep my-package-name | get-the-oldest-package 

Comment puis-je le faire?

Je ne suis pas sûr de savoir comment vous avez réussi à installer deux versions du même package, mais cela devrait faire le travail:

 rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \ sort -V | \ awk 'NR==1 { print $2 }' 

La première ligne interroge la database RPM pour mon-nom-package, demandant à RPM de fournir les résultats dans un format spécifique – la VERSION suivie des champs "rpm -qa" par défaut. Ceci est conduit pour sort -V pour (tenter) de sortinger les numéros de version, suivi d'un tube pour awk pour imprimer seulement la première ligne, supprimant le champ VERSION supplémentaire, résultant en la sortie par défaut rpm -qa .

Cela fait l'hypothèse, avec un peu de chance, que vous exécutez ceci sur un système RHEL avec un drapeau -V pour le sorting.

Je suis toujours paranoïaque en ce qui concerne les programmes qui interprètent les strings de version, donc comme alternative à la solution de Jeff, vous pourriez aussi le faire:

 [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 

(en substituant le kernel au nom de votre package)

Cela imprime essentiellement le nom complet du package en --queryformat la même command rpm -qa et en utilisant simplement --queryformat pour préfixer chaque ligne avec l'horodatage Unix de son installation (qui se trouve dans la balise %{INSTALLTIME} ). Il utilise ensuite sort -n pour sortinger la sortie du plus ancien au plus récent et prend juste la première ligne de sortie et imprime la dernière colonne qui sera le nom complet du package.

Jeff fonctionne très bien, cependant. C'est probablement plus une question de preference personnelle.

Vous pouvez utiliser yum downgrade nom-package. Parfois, de nouveaux packages ont un bug. J'ai rétrogradé à l'ancien package.