rpmコマンドでインストール済みパッケージの名前だけ表示したい

オプションの --queryformat (--qf) の書式文字列で %{NAME} を指定するとできる。

一番やりたかったこと。
インストール済みの全パッケージの名前だけリストアップする。
改行を入れるために \n も書いている。

$ rpm -qa --queryformat '%{NAME}\n'
libidn-devel
at-spi-devel
gd
cairo
ctags
xorg-x11-drv-aiptek
ed
libXi
nspluginwrapper
perl-IO-Socket-INET6
...


普通にパッケージを指定して rpm -q を実行するとバージョンとリリースも表示される。

$ rpm -q httpd
httpd-2.2.3-91.el5.centos

次の --queryformat を指定するとパッケージ名だけが表示される。

$ rpm -q httpd --queryformat '%{NAME}\n'
httpd

2.2.3 は %{VERSION} 、91.el5.centos は %{RELEASE} で表示できることがわかる。

$ rpm -q httpd --queryformat '%{NAME} %{VERSION} %{RELEASE}\n'
httpd 2.2.3 91.el5.centos

NAME、VERSION、RELEASE などはタグ(情報の項目)で、rpm -qi の結果の Name 、Version、Relese 等に対応しているっぽい。

$ rpm -qi httpd
Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.3                             Vendor: CentOS
Release     : 91.el5.centos                 Build Date: 2014年09月17日 00時33分59秒
Install Date: 2014年10月01日 14時08分58秒      Build Host: builder17.centos.org
Group       : System Environment/Daemons    Source RPM: httpd-2.2.3-91.el5.centos.src.rpm
Size        : 3155496                          License: Apache Software License
Signature   : DSA/SHA1, 2014年09月19日 20時48分32秒, Key ID a8a447dce8562897
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

Summary とか Description も表示できる。

$ rpm -q httpd --queryformat '%{SUMMARY}\n'
Apache HTTP Server
$ rpm -q httpd --queryformat '%{DESCRIPTION}\n'
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

しかし Install Date に対応するタグがない?

$ rpm -q httpd --queryformat '%{INSTALL DATE}\n'
エラー: 不正なフォーマット: 不明なタグ
$ rpm -q httpd --queryformat '%{INSTALLDATE}\n'
エラー: 不正なフォーマット: 不明なタグ

オプション --querytags で利用可能なタグを列挙できる。

$ rpm --querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE
HEADERREGIONS
HEADERI18NTABLE
...

INSTALLTIME はあった。

$ rpm --querytags | grep INSTALL
INSTALLTIME
INSTALLCOLOR
INSTALLTID
INSTALLPREFIX

rpm -qi の表示上名前はDateだが内部ではTimeとして持っているということか。

$ rpm -q httpd --queryformat '%{INSTALLTIME}\n'
1412140138
$ date -d '@1412140138'
2014年 10月  1日 水曜日 14:08:58 JST


オプションの --queryformat (--qf) については、man rpm に次のように書いてある。
初見では(中略)の部分のせいか、何をいっているのかよくわからなかった。
「検索結果のパッケージ名だけを表示したければ、書式文字列として %{NAME} を使えばよい 。」に気がつくのに時間がかかった。

   検索オプション
       rpm 検索の一般的な形式は:

       rpm {-q|--query} [select-options] [query-options]

       表示されるパッケージ情報の書式を指定することができる。そうするためには、

         --qf|--queryformat QUERYFMT

       オプションを使う。 QUERYFMT が書式文字列である。検索の書式は、標準的な printf(3) の
       書 式の修正である。書式は静的な文字列 (改行・タブ・その他の特殊文字の、C 言語の標準
       的な文字エスケープを含む)と、 printf(3) 型の書式文字列からなる。しかし rpm は表示す
       る 型を既に知っているので、型指定は省略されるべきである。代わりに {} で囲まれた、表
       示されるへッダーのタグ名が使用される。タグ名に大文字/小文字の区別はなく、タグ名の先
       頭の RPMTAG_ 部分も省略することができる。

...(中略)

       例えば、検索結果のパッケージ名だけを表示したければ、書式文字列として %{NAME} を使え
       ば よ い 。  2   カ ラ ムでパッケージ名とディストリビューション情報を表示したければ
       %-30{NAME}%{DISTRIBUTUIN} を使えばよい。 (訳注: 端末によっては末尾に \n が必要で あ
       る)。引数 --querytags をつけて rpm を実行すれば、使用できるタグすべてを表示すること
       ができる。