【 dnf 】コマンド(応用編その2)――複雑な条件を付けてソフトウェア(パッケージ)を探す:Linux基本コマンドTips(370)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「dnf」コマンドでソフトウェア(パッケージ)を検索する方法です。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、基礎編、応用編その1に続き、「dnf」コマンドでソフトウェア(パッケージ)を検索する方法です。
dnfコマンドとは?
「dnf」は、Red Hat系のLinuxディストリビューションで使われている“RPMパッケージ”を扱うためのパッケージ管理コマンドです。ソフトウェアのインストール(install)や更新(update)、アンインストール(remove)の際に利用します。
CentOS 7が採用している「yum」の後継となるコマンドという位置付けで、yumと同じサブコマンド、オプションを使用可能です(※1)。パッケージ管理システム「RPM」と「Yum」について、さらに「RPMデータベース」や「リポジトリ」という用語については、連載第42回を参照してください。
※1 CentOS 8では/usr/bin/dnfと/usr/bin/yumはともに/usr/bin/dnf-3へのシンボリックリンクとなっている。/usr/bin/dnf-3の実態はPythonスクリプト。なお、dnfのオプションのうち、従来の「yum」コマンドから廃止されたものはChanges in DNF CLI compared to YUM(外部サイト)で確認可能。
コマンドの書式
dnf [オプション] コマンド [パッケージ名など]
※ [ ]は省略可能な引数を示しています。
※パッケージ名には「?」記号(任意の1文字)や「*」記号を使用可能
※長いオプションはコマンドラインの最後に指定することも可能
dnfの主なオプション
| 短いオプション | 長いオプション | 意味 |
|---|---|---|
| -y | --assumeyes | 全ての問い合わせに対して「yes」を選択したと見なして実行する |
| --assumeno | 全ての問い合わせに対して「no」を選択したと見なして実行する | |
| -C | --cacheonly | パッケージの情報を全くダウンロードせずに、キャッシュだけを使用する |
| --refresh | コマンド実行前にパッケージ情報のキャッシュを強制的に更新する(※2) | |
| -R 分 | --randomwait=分 | 最大待ち時間(分)を指定する |
| -c 構成ファイル名 | --config=構成ファイル名 | 構成ファイルを指定する |
| --enablerepo リポジトリID | 指定したリポジトリを有効にする | |
| --disablerepo リポジトリID | 指定したリポジトリを無効にする | |
| --repo リポジトリID | 指定したリポジトリだけを有効にする(複数ある場合は「--repo」「--repoid」を複数回使用する) | |
| --repoid リポジトリID | --repoと同じ | |
| --nodocs | ドキュメントをインストールしない | |
| --allowerasing | 依存関係を解決するためにインストール済みパッケージの削除を許可する | |
| --installroot=場所 | インストール先を指定する | |
| --downloaddir=場所 | ダウンロード先を指定する | |
| --downloadonly | ファイルのダウンロードだけを行う | |
| -x パッケージ名 | --exclude=パッケージ名 | 除外するパッケージを指定する |
| --showduplicates | dnfのサブコマンド「info」「search」で重複しているものも表示する | |
| --color=指定 | 出力メッセージを色付きにするかどうかを「always」「auto」「never」のいずれかで指定する | |
| -q | --quiet | 実行時にメッセージを出力しない |
| -v | --verbose | 詳しいメッセージを出力する |
※2 通常、キャッシュが古い場合は自動更新がかかる。更新までの残り時間は/etc/dnf/dnf.confの「metadata_expire」で変更可能。デフォルトは48時間。
dnfの主なコマンド(パッケージ操作関係)
| コマンド | 実行内容 |
|---|---|
| install | 指定したパッケージに加え、依存関係があるパッケージもインストールする(既にインストールされていた場合は更新する) |
| reinstall | パッケージを再インストールする |
| downgrade | パッケージを以前のバージョンのものにダウングレードする |
| remove | パッケージを依存関係のあるパッケージとともに削除する |
| autoremove | 依存関係のためにインストールされていた不要なパッケージを削除する |
| upgrade | パッケージを更新する(※3) |
| upgrade-minimal | 不具合の修正や機能追加、セキュリティ対応など「重要な更新」だけを更新する(※3) |
| distro-sync | 最新の利用可能なバージョンへインストール済みパッケージを同期する |
| mark install | 指定したパッケージを手動でインストールしたものとする(autoremoveの対象外となることが利点、「dnf mark remove パッケージ名」でマークを削除) |
※3 パッケージを指定しなかった場合はインストール済みの全パッケージが対象となる。
dnfの主なコマンド(情報関係)
| コマンド | 実行内容 |
|---|---|
| info | パッケージの情報を表示する(「--installed」「--upgrade」などのオプションが使用可能) |
| list | パッケージを一覧表示する(「--installed」「--upgrade」などのオプションが使用可能) |
| deplist | パッケージの依存性の一覧を表示する |
| group | パッケージグループのサマリーを表示する(※4) |
| search | 指定した文字列でパッケージの詳細を検索する |
| repoquery | キーワードに一致するパッケージを検索する(※5、本文を参照) |
| provides | ファイル名などを指定して、該当するファイルを提供するパッケージを検索する |
| repolist | ソフトウェアリポジトリの構成を表示する |
※4 サブコマンドとして「list」「info」「remove」「install」「upgrade」「summary」「mark」を使用可能。「dnf group list」のように使用する。デフォルトはsummaryで、インストール済みのグループの個数やインストール可能なグループの個数を表示する。
※5 例えば「dnf repoquery --requires パッケージ名」で指定したパッケージが依存するパッケージを表示する。
dnfの主なコマンド(メンテナンス関係/その他)
| コマンド | 実行内容 |
|---|---|
| makecache | パッケージリストを格納したデータベース(リポメタデータ)をダウンロードし、キャッシュを作成/更新する |
| check | ローカルのパッケージデータベースに問題がないかどうか確認する |
| check-update | 更新に利用できるパッケージを確認する |
| clean | キャッシュデータを削除する |
| shell | 対話型のシェル(DNFシェル)を実行する |
| updateinfo | リポジトリの更新情報を表示する |
| history | パッケージのインストールや削除の履歴を表示する |
複雑な条件を付けてパッケージを探す
パッケージを探す際、「dnf repoquery 選択対象」で、「選択対象」を指定できます。例えば、「dnf repoquery --whatrequires iptables」で、iptablesを必要とするパッケージを表示します(画面1)。
さらに表示内容を限定するオプションもあります。例えば、「dnf repoquery --whatrequires python3 --qf "%{name}"」で、iptablesを必要とするパッケージの名前だけを表示します。
なお、コマンドを実行する際、ソフトウェアのリストを必要に応じて自動更新します(※6)。
※6 dnfコマンドはソフトウェアの最新リストを常時使うのではなく、前回リストを更新してからデフォルトの有効期限(48時間)が経過するまでは、過去のリストを使う。有効期限を変更するには/etc/dnf/dnf.confで「metadata_expire」を設定する(「man dnf.conf」参照)。経過時間を問わず、リストを最新版に更新してから実行したい場合は「--refresh」オプションを使用。
コマンド実行例
dnf repoquery --whatrequires パッケージ名
(指定したパッケージを必要とするパッケージを表示する)
dnf repoquery --whatrequires iptables
(iptablesを必要とするパッケージを表示する)
dnf repoquery --whatrequires iptables --installed
(システムにインストール済みのパッケージのうち、iptablesを必要とするパッケージを表示する)
dnf repoquery --whatrequires iptables --qf "%{name}"
(iptablesを必要とするパッケージの名前だけを表示する)
dnf repoquery --installed --qf "%{name}"
(システムにインストール済みのパッケージの名前を一覧表示する)
repoqueryコマンドで使用可能なオプション(選択対象)
| 短いオプション | 長いオプション | 意味 |
|---|---|---|
| --available | 使用可能なパッケージを対象とする(デフォルト) | |
| --extras | リポジトリに存在しないパッケージを対象とする | |
| --arch=種類 | 対象とするアーキテクチャ(x86_64、i686、noarchなど)を指定する | |
| --installed | インストール済みのパッケージを対象とする | |
| --installonly | 「installonly」としてインストール済みのパッケージ(カーネルパッケージなど)を対象とする | |
| --latest-limit 個数 | 複数のバージョンがある場合、指定した個数分を対象とする。負の値を指定すると最新版以外が対象になる(「--latest-limit=-1」のように指定) | |
| --duplicates | 重複しているものだけを対象とする | |
| --unneeded | 依存関係などでインストールされたが現在は不要となっているパッケージを対象とする | |
| --upgrades | 更新版があるパッケージを対象とする | |
| --whatrequires パッケージ名 | 指定したパッケージを必要とするパッケージを対象とする | |
| --whatdepends パッケージ名 | 指定したパッケージが依存する、またはインストールが推奨されるパッケージを対象とする(require、enhance、recommend、suggest、supplement全てを含む) | |
| --whatconflicts パッケージ名 | 指定したパッケージと競合するパッケージを対象とする | |
| --whatobsoletes パッケージ名 | 指定したパッケージと置き換わるパッケージを対象とする | |
| --whatprovides 機能 | 指定した機能を提供するパッケージを対象とする | |
| -f ファイル | --file ファイル名 | 指定したファイルを含むパッケージを対象とする |
| -a | --all | 全てのパッケージを対象とする(rpmqueryコマンドとの互換性維持用のオプション) |
repoqueryコマンドで使用可能なオプション(表示内容)
| 短いオプション | 長いオプション | 意味 |
|---|---|---|
| -i | --info | パッケージの詳細な情報を表示する |
| -l | --list | パッケージに収録されているファイルのリストを表示する |
| -s | --source | ソースパッケージの名前を表示する |
| --changelogs | パッケージの変更履歴を表示する | |
| --location | パッケージのダウンロード元を表示する | |
| --requires | 指定したパッケージに依存するパッケージを表示する | |
| --depends | 指定したパッケージが依存するか、インストールが推奨されたパッケージを表示する(enhances、recommends、suggests、supplements) | |
| --tree | 依存関係をツリー形式で表示する(--whatrequires、--requires、--conflicts、--enhances、--suggests、--provides、--supplements、--recommendsと一緒に指定する) | |
| --recursive | パッケージを再帰的に探す(--whatrequires、--requires、--resolveと一緒に指定する) | |
| --qf 形式、--queryformat 形式 | 表示結果をタグの組み合わせで指定する(使用可能なタグは「dnf repoquery --querytags」で確認) | |
| --nvr | 「パッケージ名-バージョン-リリース」という形式で表示する(「--qf "%{name}-%{version}-%{release}"」相当) |
指定したファイルがどのパッケージからインストールされるのかを表示する
「dnf repoquery -f ファイル名」で、指定したファイルやディレクトリがどのパッケージからインストールされるのかを表示します(画面2)。
この「-f」オプションは「指定したファイルを含むパッケージを表示する」という意味です。従って、存在しないファイル(インストールされていないファイル)を指定して検索できます。なお、指定時にはフルパスが必要です。
逆に、インストール済みのパッケージだけを対象に探したい場合は、「dnf repoquery -f ファイル --installed」のように「--installed」を指定します。「rpm」コマンドを使って同様の処理を行うには「rpm -rf ファイル名」(連載第245回)とします。
コマンド実行例
dnf repoquery -f ファイル名
(指定したファイルがどのパッケージからインストールされるのかを表示する)
dnf repoquery -f /etc/sysconfig/iptables
(「/etc/sysconfig/iptables」がどのパッケージからインストールされるのかを表示する)
dnf repoquery -f ファイル名 --installed
(指定したファイルがどのパッケージからインストールされたのかを表示する)
指定したパッケージが含むファイルを一覧表示する
「dnf repoquery パッケージ名 -l」で、指定したパッケージが含むファイルを表示できます(画面3)。
コマンド実行例
dnf repoquery パッケージ名 -l
(指定したパッケージが含むファイルを表示する)
dnf repoquery iptables-services -l
(「iptables-services」を含むファイルを表示する)
筆者紹介
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.


