【 dnf 】コマンド(応用編その2)――複雑な条件を付けてソフトウェア(パッケージ)を探すLinux基本コマンドTips(370)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「dnf」コマンドでソフトウェア(パッケージ)を検索する方法です。

» 2020年01月16日 05時00分 公開
[西村めぐみ@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、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}"

(システムにインストール済みのパッケージの名前を一覧表示する)


画面1 画面1 「iptables」を必要とするパッケージを検索したところ

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)。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。