hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

rpmコマンドの使い方(query-options編)



1 はじめに

rpmコマンドの--query-optionsオプションは、パッケージに関する様々な情報を表示するためのオプションです。ここでは、--query-optionsオプションを使用してパッケージに関するさまざまな情報を表示してみます。

2 検証環境

AlmaLinux版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
4.18.0-372.9.1.el8.x86_64

rpmの版数は以下のとおりです。

[root@server ~]# rpm --version
RPM バージョン 4.14.3

3 オプション一覧

query-optionsの一覧は以下のとおりです。

[root@server ~]# man rpm
-snip-
   query-options(検索オプション)
       [--changelog] [-c,--configfiles] [-d,--docfiles] [--dump]
       [--filesbypkg] [-i,--info] [--last] [-l,--list]
       [--provides] [--qf,--queryformat QUERYFMT] [-R,--requires]
       [--scripts] [-s,--state] [--triggers,--triggerscripts]

4 変更履歴を表示する方法(--changelog)

--changelogは、パッケージの変更履歴を表示するオプションです。ここでは、httpdパッケージの変更履歴を確認してみます。左端に*印の行が変更日付と変更者名を表しています。-印は変更内容を表しています。

[root@server ~]# rpm -q --changelog httpd
* 土  3月 18 2023 Lubo? Uhliarik <luhliari@redhat.com> - 2.4.37-51.5
- Resolves: #2177747 - CVE-2023-25690 httpd:2.4/httpd: HTTP request splitting
  with mod_rewrite and mod_proxy

* 火  1月 31 2023 Lubo? Uhliarik <luhliari@redhat.com> - 2.4.37-51.1
- Resolves: #2165967 - prevent sscg creating /dhparams.pem
- Resolves: #2165976 - CVE-2006-20001 httpd: mod_dav: out-of-bounds read/write
  of zero byte
- Resolves: #2165977 - CVE-2022-37436 httpd: mod_proxy: HTTP response splitting
- Resolves: #2165978 - CVE-2022-36760 httpd: mod_proxy_ajp: Possible request
  smuggling
-snip-

5 パッケージに含まれる設定ファイルを表示する方法(-c)

-cは、パッケージに含まれる設定ファイルの一覧を表示するオプションです。ここでは、httpdパッケージに含まれる設定ファイルの一覧を表示してみます。

[root@server ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
-snip-

6 パッケージに含まれるドキュメントファイルを表示する方法(--docfiles )

--docfilesは、パッケージに含まれるドキュメントファイル一覧を表示するオプションです。ここでは、httpdパッケージに含まれるドキュメントファイル一覧を表示してみます。

[root@server ~]# rpm -q --docfiles httpd
/usr/share/doc/httpd/ABOUT_APACHE
/usr/share/doc/httpd/CHANGES
/usr/share/doc/httpd/LICENSE
/usr/share/doc/httpd/NOTICE
/usr/share/doc/httpd/README
-snip-

7 パッケージの情報を表示する方法(-i)

-iは、パッケージの情報を表示するオプションです。ここでは、httpdパッケージの情報を表示してみます。

[root@server ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.37
Release     : 51.module_el8.7.0+3405+9516b832.1
Architecture: x86_64
Install Date: 2023年03月31日 21時26分04秒
Group       : System Environment/Daemons
Size        : 4500255
License     : ASL 2.0
Signature   : RSA/SHA256, 2023年02月21日 20時19分50秒, Key ID 51d6647ec21ad6ea
Source RPM  : httpd-2.4.37-51.module_el8.7.0+3405+9516b832.1.src.rpm
Build Date  : 2023年02月21日 19時24分32秒
Build Host  : x64-builder01.almalinux.org
Relocations : (not relocatable)
Packager    : AlmaLinux Packaging Team <packager@almalinux.org>
Vendor      : AlmaLinux
URL         : https://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

8 パッケージのインストール履歴を表示する方法(--last)

--lastは、パッケージのインストール履歴を表示するオプションです。インストール履歴を確認すると、最後にbcパッケージがインストールされたことがわかります。

[root@server ~]# rpm -qa --last |head -n 3
bc-1.07.1-5.el8.x86_64                        2023年05月22日 21時56分53秒
bind-9.11.36-5.el8_7.2.x86_64                 2023年05月05日 20時36分33秒
mailx-12.5-29.el8.x86_64                      2023年04月22日 20時50分07秒
-snip-

9 パッケージに含まれるファイル一覧を表示する方法(-l)

-lは、パッケージに含まれるファイル一覧を表示するオプションです。ここはで、httpdパッケージに含まれるファイル一覧を表示してみます。

[root@server ~]# rpm -ql httpd 
/etc/httpd/conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
-snip-

10 パッケージの特定の情報を取り出す方法(--queryformat)

--queryformatは、パッケージ情報(名前やサイズ等)のフォーマットを指定するためのオプションです。

httpdパッケージの名前を表示してみます。

[root@server ~]# rpm -q httpd --queryformat '%{NAME}\n'
httpd

httpdパッケージの名前、バージョンを表示してみます。

[root@server ~]# rpm -q httpd --queryformat '%{NAME}-%{VERSION}\n'
httpd-2.4.37

httpdパッケージの名前とパッケージ提供元のURLを表示してみます。

[root@server ~]# rpm -q httpd --queryformat '%{NAME}:%{URL}\n'
httpd:https://httpd.apache.org/

httpdパッケージの名前とライセンスを表示してみます。

[root@server ~]# rpm -q httpd --queryformat '%{NAME}:%{LICENSE}\n'
httpd:ASL 2.0

httpdパッケージの名前とパッケージ提供元を表示してみます。

[root@server ~]# rpm -q httpd --queryformat '%{NAME}:%{VENDOR}\n'
httpd:AlmaLinux

最後にシステムにインスールされている全てのパッケージ名とサイズを表示してみます。

[root@server ~]# rpm -qa --queryformat "%{NAME} %{SIZE}\n" 
ghc-mtl 222647
libXxf86vm 26424
tzdata 1891990
-snip

11 パッケージのインストール/アンインストール時に実行するスクリプトを表示する方法(--scripts)

--scriptsは、パッケージに含まれるインストールやアンインストール時に実行するスクリプトを表示するオプションです。ここでは、chronyパッケージに含まれるスクリプトを表示してみます。以下の実行結果より、4種類のスクリプトが実行されることがわかります。

  • preinstall :インストール前に実行
  • postinstall :インストール完了後に実行
  • preuninstall:アンインストール前に実行
  • postuninstall :アンインストール完了後に実行
[root@server ~]# rpm -q --scripts chrony
preinstall scriptlet (using /bin/sh):
getent group chrony > /dev/null || /usr/sbin/groupadd -r chrony
getent passwd chrony > /dev/null || /usr/sbin/useradd -r -g chrony \
       -d /var/lib/chrony -s /sbin/nologin chrony
:
postinstall scriptlet (using /bin/sh):
# fix PIDFile in local chronyd.service on upgrades from chrony < 3.3-2
if grep -q 'PIDFile=/var/run/chronyd.pid' \
                /etc/systemd/system/chronyd.service 2> /dev/null && \
        ! grep -qi '^[ '$'\t'']*pidfile' /etc/chrony.conf 2> /dev/null
then
        sed -i '/PIDFile=/s|/run/|/run/chrony/|' \
                /etc/systemd/system/chronyd.service
fi
# workaround for late reload of unit file (#1614751)
/usr/bin/systemctl daemon-reload

if [ $1 -eq 1 ] ; then
        # Initial installation
        systemctl --no-reload preset chronyd.service chrony-wait.service &>/dev/null || :
fi
preuninstall scriptlet (using /bin/sh):

if [ $1 -eq 0 ] ; then
        # Package removal, not upgrade
        systemctl --no-reload disable --now chronyd.service chrony-wait.service &>/dev/null || :
fi
postuninstall scriptlet (using /bin/sh):

if [ $1 -ge 1 ] ; then
        # Package upgrade, not uninstall
        systemctl try-restart chronyd.service &>/dev/null || :
fi

12 パッケージに含まれる全てのファイルを表示する方法

--filesbypkgは、パッケージに含まれる全てのファイルを表示するオプションです。

[root@server ~]# rpm -q --filesbypkg httpd
httpd                     /etc/httpd/conf
httpd                     /etc/httpd/conf.d/autoindex.conf
httpd                     /etc/httpd/conf.d/userdir.conf
httpd                     /etc/httpd/conf.d/welcome.conf
httpd                     /etc/httpd/conf.modules.d
-snip-

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ

rpm: Query formats