
У меня 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
(попытка) сортировки номеров версий, за которым следует конвейер to awk
для печати только первой строки, удаляя дополнительное поле VERSION, что приводит к rpm -qa
выводу по умолчанию.
Это позволяет с уверенностью предположить, что вы запускаете это в системе RHEL, в которой есть -V
флаг для сортировки.
решение2
Я всегда с паранойей относился к зависимости от программ, интерпретирующих строки версий, поэтому в качестве альтернативы решению Джеффа вы также можете сделать это:
[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
сортирует вывод от самого старого к самому новому и просто берет первую строку вывода и печатает последний столбец, который будет полным именем пакета.
Хотя у Джеффа все отлично. Это, наверное, больше вопрос личных предпочтений.
решение3
Вы можете использовать yum downgrade package-name. Иногда в новых пакетах появляется ошибка. Я сделал downgrade на старый пакет.