rpmでパッケージのバージョンとか

rpmで,パッケージのバージョンを知る方法は無いかと,これまたid:hakobe932と悩んでた.で,rpmの--helpを見たらそれとなくわかって,ググったらその通りだった.

$ rpm -q --qf="%{VERSION}-%{RELEASE}\n" rpm
4.8.5-1vl8

こんなかんじ.まず-qでクエリオプションを渡してやるところがポイント?qfはqueryformatの略.--qfが気に食わなければ*1--queryformatでも良い.


そこで,Rubyのリハビリがてら,入ってる全部のパッケージのバージョンをサクッと求めるスクリプトでも書くかーと.

pkgs = Hash.new

`rpm -qa`.each_line do |pkg|
  name, ver = `rpm -q --qf="%{NAME} %{VERSION}-%{RELEASE}" #{pkg}`.split(/\s/) # "rpm 4.8.5-1vl8"みたいになる
  pkgs[name] = ver
end

あとはもう,煮るなり焼くなり.うちのFMVでやってみたところ,終わる気配がなかったので10個だけやった.ちゃんと動いた.

追記

id:znzさんにコメントを頂き,上の方法では効率が悪いっちゅーことがわかりました.書き直すとすれば,こんな感じなのかな?

pkgs = Hash.new

`rpm -qa --qf="%{NAME} %{VERSION}-%{RELEASE}"`.each_line do |pkg|
  name, ver = pkg.split(/\s/)
  pkgs[name] = ver
end

動かしてないので確証はありませんが,動くとは思う.

*1:なんか,qオプションとfオプションの合わせ技に見える