如何取得舊包的名稱?

如何取得舊包的名稱?

我有一台 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 -Vto(嘗試)對版本號進行排序,然後透過管道傳送到awk僅列印第一行,剝離附加的 VERSION 字段,從而產生rpm -qa預設輸出。

這使得您可以安全地假設您正在具有-V排序標誌的 RHEL 系統上執行它。

答案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 降級軟體包名稱。有時新的軟體包會出現錯誤。我確實降級到舊包。

相關內容