yum/rpmを使っていて、指定したファイル名がどのパッケージに含まれるのか、その逆に指定したパッケージにはどのようなファイルが含まれるのかを調べる必要があったので、備忘で残しておく。

1. 指定したファイル名がどのパッケージに含まれるかを調べる

指定したファイル名がどのパッケージに含まれるかを調べる場合、yumで行う場合は「yum provides」を利用する。 この時、ファイル名はフルPATHでなくても問題ない。

yum provides ファイル名
[root@BS-PUB-CENT7-01 ~]# yum provides */httpd.conf
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * epel: mirror.ehost.vn
 * extras: mirror.qoxy.com
 * updates: mirror.vodien.com
389-admin-1.1.46-1.el7.x86_64 : 389 Administration Server (admin)
リポジトリー        : epel
一致          :
ファイル名    : /etc/dirsrv/admin-serv/httpd.conf

erlang-examples-R16B-03.18.el7.x86_64 : Examples for some Erlang modules
リポジトリー        : epel
一致          :
ファイル名    : /usr/lib64/erlang/lib/inets-5.9.8/examples/server_root/conf/httpd.conf

httpd-2.4.6-88.el7.centos.x86_64 : Apache HTTP Server
リポジトリー        : base
一致          :
ファイル名    : /etc/httpd/conf/httpd.conf
ファイル名    : /usr/lib/tmpfiles.d/httpd.conf

python2-certbot-apache-0.29.1-1.el7.noarch : The apache plugin for certbot
リポジトリー        : epel
一致          :
ファイル名    : /usr/lib/python2.7/site-packages/certbot_apache/tests/testdata/centos7_apache/apache/httpd/conf/httpd.conf
ファイル名    : /usr/lib/python2.7/site-packages/certbot_apache/tests/testdata/gentoo_apache/apache/apache2/httpd.conf

httpd-2.4.6-88.el7.centos.x86_64 : Apache HTTP Server
リポジトリー        : @base
一致          :
ファイル名    : /etc/httpd/conf/httpd.conf
ファイル名    : /usr/lib/tmpfiles.d/httpd.conf

インストール済みのrpmパッケージから調べる場合は、以下のようにrpmコマンドから調べることもできる。 こちらはフルPATHで指定してやる必要があるので注意。

rpm -qf ファイルPATH
[root@BS-PUB-CENT7-01 ~]# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.4.6-88.el7.centos.x86_64

2. 指定したパッケージにどのようなファイルが含まれているかを調べる

先ほどとは逆に、指定したパッケージにどのようなファイルが含まれているかリストにして出力する場合。 yumで調べる場合、残念ながらCentOS 7までのyumだとyum-utilsが必要になるようだ(dnfでは機能が組み込まれているので、RHEL8/CentOS 8以降ならいらないと思われる)。

yum-utilsは以下のコマンドでインストールできる。

sudo yum install yum-utils

後は、以下のコマンドを実行すればパッケージに含まれるファイルの一覧が取得できる。

repoquery -l パッケージ名
dnf repoquery -l パッケージ名 # dnfの場合
[root@BS-PUB-CENT7-01 ~]# repoquery -l httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
...

インストール済のrpmパッケージから調べる場合は、以下のようにする。

rpm -ql パッケージ名
[root@BS-PUB-CENT7-01 ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
...