Rocky Linux / インストールされているパッケージを確認する方法

Rocky Linuxでインストールされたパッケージはdnfとrpmで確認できます。普段はリポジトリ情報と依存関係を一緒に表示するdnfを使用し、正確なRPMデータベースの照会やファイル所有パッケージの確認にはrpmを使用すると便利です。

インストール済みパッケージ全体の確認

DNF(Dandified YUM)はRocky Linuxのパッケージマネージャーです。次のコマンドはインストール済みパッケージの名前、バージョンとリポジトリ情報を表形式で表示します。保存された情報が不足したり@Systemと表示されたりする場合もあり、表示だけで正確な取得経路を証明できるとは限りません。

dnf list --installed

RPMデータベースに登録されたパッケージを、名前・バージョン・リリースなどを含む形式で列挙します。パッケージ名だけが必要なら、後述のクエリフォーマットで%{NAME}だけを指定します。

rpm -qa | sort

結果が長い場合はlessでページ分けしたり、grepで必要な名前だけを探せます。

rpm -qa | sort | less
rpm -qa | grep -i postgresql

特定パッケージのインストール状況と情報の確認

名前が分かっている場合

rpm -qはパッケージがインストールされていると正確な名前とバージョンを出力し、インストールされていない場合はエラーメッセージと0以外の終了ステータスを返します。

rpm -q curl
dnf info --installed curl

コマンドやファイルのパッケージを探すとき

存在するファイルの所有パッケージはrpm -qfで確認します。シンボリックリンクのファイルと実体は別のパッケージに属する場合があるので、両方を区別します。次のpython3の例は、command -v python3がインストール済みの外部実行ファイルを返す場合に使います。見つからない場合や関数・エイリアスの場合はそのまま実行せず、実際のファイルパスを確認してください。詳しくはrpmの照会方法も参照できます。

rpm -qf /usr/bin/curl
rpm -qf "$(readlink -f "$(command -v python3)")"

まだインストールされていないコマンドやファイルを提供するリポジトリパッケージはdnf providesで探します。

dnf provides '*/semanage'

バージョン、インストール時刻と出所を詳しく見る

RPMのクエリフォーマットを利用すると、必要な項目だけを希望の順序で出力できます。下記の例はパッケージ名、エポック・バージョン・リリース、アーキテクチャをタブで区切ります。

rpm -qa --qf '%{NAME}\t%{EPOCHNUM}:%{VERSION}-%{RELEASE}\t%{ARCH}\n' | sort

最近インストールされたパッケージの順序は次のように確認します。

rpm -qa --last | head -n 30
確認目的 推奨コマンド
全体インストールリスト dnf list --installed または rpm -qa
特定パッケージの確認 rpm -q パッケージ名
パッケージ詳細情報 dnf info --installed パッケージ名
ファイル所有パッケージ rpm -qf ファイルパス
ファイル提供パッケージ検索 dnf provides '*/ファイル名'
最近のインストール順 rpm -qa --last

直接インストールしたパッケージと変更履歴の確認

ユーザーがインストールした項目

DNFがユーザー要求によるインストールと記録したパッケージは、次のDNF4のコマンドで確認できます。dnf --versionとdnf history --helpで実装と対応構文を確認してください。依存関係で自動的にインストールされた項目を除外して、サーバーの用途を把握したり、整理対象を検討する際に便利です。

dnf history userinstalled

ただし、過去にRPMファイルを直接インストールしたり、システムをマイグレーションした場合には記録が完全でないことがあります。この結果だけでパッケージを自動削除せず、サービスや依存関係も合わせて確認してください。

DNFトランザクション履歴

インストール・アップデート・削除作業の履歴および特定のトランザクションの詳細は、次のように確認します。トランザクション_IDは一覧に表示された実際の数値IDへ置き換えます。

dnf history
dnf history info トランザクション_ID

インストールファイルと設定変更の確認

rpm -Vは、インストール時の記録と現在のファイルのサイズ、チェックサム、権限、所有者などを比較します。エラーなく終了し、終了状態が0で差異も出力されなければ、検査対象に差異が見つからなかったという意味です。これは全ファイルの安全性やRPMデータベース自体の信頼性まで保証するものではありません。

sudo rpm -V openssh-server

/etc以下の設定ファイルは、管理者が意図的に変更した場合でも差異として表示されます。結果が出たからといってすぐに復元せず、変更管理記録やバックアップと照合してください。

サーバーパッケージ一覧をファイルに保存する

障害対応や移行のため、名前・バージョン・アーキテクチャを保存すると、2つの時点や2つのサーバーを比較できます。以下の出力先は既存ファイルを上書きするため、新しい名前を選びます。シェルスクリプトで使う場合はBashのset -o pipefailなどでパイプ途中の失敗も検出し、標準エラーと保存内容を確認してください。

rpm -qa --qf '%{NAME}\t%{EPOCHNUM}:%{VERSION}-%{RELEASE}\t%{ARCH}\n' | sort > installed-packages.tsv

この一覧は当時の状態の記録であり、他のサーバーでそのまま実行するインストールスクリプトではありません。Rocky Linuxのメジャーバージョン、アクティブなリポジトリとモジュールストリームが異なれば、同じバージョンを入手できるとは限らないため、復旧手順は別途試す必要があります。

よくある問題

  • コマンドがないと表示される場合:最小インストールでは、一部のDNFプラグインが欠落することがあります。まずコマンドを提供するパッケージを確認してください。
  • 名前が予想と異なる場合:実行ファイル名とパッケージ名は同じでないことがあるため、rpm -qfまたはdnf providesを使用します。
  • 一覧が互いに異なって見える場合:dnfはリポジトリメタデータを組み合わせて表示し、rpmはローカルRPMデータベースを直接照会します。比較目的に合ったツールを選択してください。
  • データベースエラーが発生する場合:他のパッケージ作業が進行中かをまず確認し、ロックファイルやデータベースを勝手に削除しないでください。

参考文書