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 を実行すれば、使用できるタグすべてを表示すること ができる。