Linuxのインストール済みバージョンは、Debian/Ubuntuならdpkg-query、RPM系ならrpm -qで確認します。リポジトリにある更新候補、PATHで選ばれる実行ファイル、現在動作中のプロセスは別の情報です。通常の照会にsudoやパッケージ更新は不要です。この記事では読み取り中心で確認し、状態・アーキテクチャ・配布版のリビジョンも記録します。
Linuxシステムでソフトウェアのバージョンを把握することは、セキュリティのアップデート、依存関係の管理、または単にシステムの状態を知るために非常に重要です。さまざまなディストリビューションで使用される複数のパッケージマネージャを理解することは、効果的なシステム管理の基礎を形成します。本記事では、最も一般的に利用されるパッケージマネージャーを使って、インストール済みのパッケージのバージョンをどのように確認するかを詳細に説明します。このガイドを通じて、初心者でも簡単にパッケージのバージョンを確認できるようになることを目指します。
DebianおよびUbuntuシステムでの確認方法
Debian系のLinuxディストリビューション(Ubuntuを含む)では、aptコマンドラインツールがパッケージ管理に広く使用されています。インストール済みのパッケージのバージョンを確認する最も一般的な方法は、dpkgコマンドを利用することです。以下はその具体的な手順です。
dpkgコマンドを使用する方法
インストール済みのパッケージのバージョンを調べるには、ターミナルを開いて以下のコマンドを入力します:
dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\t${db:Status-Status}\n' パッケージ名ここで、[パッケージ名]にはバージョンを知りたいパッケージの名前を入力します。例えば、nginxのバージョンを確認するには、以下のように入力します:
dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\t${db:Status-Status}\n' nginxこのコマンドはnginxというパッケージ名を照会します。最後の状態がinstalledか確認してください。config-filesは削除後の設定ファイルだけが残った状態であり、現在インストール済みとは区別します。nginx-coreなど別名のパッケージやメタパッケージもあるので、関連名だけで実体の版を判断しません。
dpkg-query公式マニュアルは、-lの表示が状態の異なる項目を含み、人間向けであることを説明しています。dpkg -l | grep nginxは部分一致や状態の取り違えを起こすので、機械処理では-Wと書式指定を使います。詳細を見る場合はdpkg-query -s nginxでStatusやVersionを確認できます。
Red Hat系列のシステムでの確認方法
Red Hat Enterprise Linux、Fedora、CentOS StreamなどのRPM系では、rpmおよび環境に応じたDNF/DNF5等が使われます。コマンド名がdnfでも実体や世代が違う場合があるので、その環境のヘルプを確認します。これらのツールを使ってインストール済みのパッケージのバージョンを確認する方法を解説します。
rpmコマンドを使用する方法
rpmはRPMパッケージのデータベースを照会するための基本ツールです。インストール済みのパッケージのバージョンを確認するには、以下のコマンドを実行します:
rpm -q [パッケージ名]例えば、httpd(Apacheサーバ)のバージョンを確認する場合、次のように入力します:
rpm -q httpdこのコマンドは、インストール済みのhttpdパッケージのバージョン情報を表示します。
yumまたはdnfコマンドを使用する方法
yumやdnfは、依存関係の解決を自動で行う高機能なパッケージマネージャです。これらのツールを使用してパッケージのバージョンを確認する方法も簡単です。旧来のyumとDNF、DNF5では構文が異なる部分があります。インストール済みの情報だけならrpm -qで確認する方法が共通して使えます。
以下にyumおよびdnfでのバージョン確認手順を示します:
yum list installed [パッケージ名]または
dnf list --installed パッケージ名これにより、指定したパッケージのインストールされているバージョンとリポジトリ情報が表示されます。例として、wgetパッケージの情報を確認する場合、以下のようになります:
yum list installed wgetまたは
dnf list --installed wgetDNF5を明示的に使う環境ではdnf5 list –installed wgetです。DNF5の–installedはインストール済みに限定します。表示される@Systemや記録されたリポジトリ情報だけで、現在も同じ配布元から再取得できることまでは保証しません。
パッケージ情報の詳細表示
さらに詳しい情報を得たい場合は、rpmコマンドを使ってパッケージの詳細を表示することができます。例えば:
rpm -qi wgetこのコマンドはwgetパッケージに関する詳細な情報、例えばライセンス、インストール日、ビルド情報などを提供します。これにより、システムのセキュリティやパッケージ管理に関するより深い理解が可能になります。
Installedと更新候補を分ける
apt-cache policy nginx
apt-cache policyではInstalledとCandidateを区別します。Candidateは手元のAPTメタデータに基づく候補で、インストール済みの版ではありません。バージョン確認のためだけにapt upgradeやdnf upgradeを実行しないでください。
RPMのEpoch・Version・Release・Architectureを記録する
rpm -q --queryformat '%{NAME}\t%{EPOCH}\t%{VERSION}\t%{RELEASE}\t%{ARCH}\n' httpd
RPMのqueryformatで項目を分けて取得できます。Epoch未設定では(none)等の表示になる場合があります。配布版のReleaseを省くと、同じ上流バージョンに適用された修正の違いを見落とします。複数アーキテクチャや複数版が存在する場合もあるため、複数行を勝手に1つへまとめません。
実行ファイルとパッケージの版が違うとき
command -v python3
type -a python3
python3 --version
上はBashでPATH上の候補を確認する例です。エイリアス、仮想環境、/usr/localの手動導入、別コンテナーでは別の実体が選ばれます。信頼できるコマンドだけを実行し、表示されたパスのパッケージ所有者を調べます。
# 実際に確認したファイルパスへ置き換える
# Debian/Ubuntu
dpkg-query -S /usr/bin/python3
# RPM系
rpm -qf /usr/bin/python3
シンボリックリンク、alternatives、ラッパーの先が別パッケージの場合があります。所有者が見つからなくても、ソフトが存在しないとは限りません。Snap、Flatpak、言語の仮想環境、ソース導入はそれぞれの管理方法で確認します。また、パッケージを更新しても既存プロセスが旧コードを使い続ける場合があり、インストール済み版だけでは稼働中の版を証明できません。
ソースからインストールしたパッケージのバージョン確認
Linuxシステムにおいて、パッケージマネージャを使用せずにソースコードから直接インストールしたソフトウェアのバージョンを確認する方法は、少し複雑になることがあります。こうしたインストール方法は、パッケージマネージャにない最新の機能が必要な場合や特定のカスタマイズが求められる場合に選択されます。以下に、一般的な手法を説明します。
インストールされたソフトウェアのバージョン情報を確認するコマンド
多くのソフトウェアでは、バージョン情報を表示するためのオプションがコマンドラインツールに組み込まれています。通常は以下のようなコマンドを使用します:
[ソフトウェア名] --versionなお、-vはバージョン表示とは限りません。
# バージョン表示オプションは対象ソフトの公式ヘルプで確認例えば、Pythonがソースからインストールされている場合、そのバージョンを確認するには以下のように入力します:
python3 --versionこれにより、現在のPATHで選択されたpython3の実行ファイルが示すバージョンを確認できます。すべてのPython環境や、サービスが実行中のPythonの版を一覧にするものではありません。
Makefileを確認する
ソースからインストールした場合、バージョン情報がMakefileやその他の設定ファイルに記載されていることがあります。これらはビルド元の資料であり、現在実行されるバイナリと一致する証拠にはなりません。インストール先の実体、ビルド記録、公式のバージョン表示を照合します。
設定ファイルの例を確認する
ソースコードのディレクトリ内にあるREADMEやINSTALLファイルにも、しばしばバージョン情報が記載されています。これらのドキュメントはインストールプロセスだけでなく、バージョン情報を得るための重要な資料となり得ます。
これらの方法を通じて、ソースからインストールしたソフトウェアのバージョンを確認し、システムの整合性とセキュリティを保つための情報を得ることができます。
バージョン確認の自動化
Linuxシステムにおけるパッケージ管理では、手動でのバージョン確認作業を自動化することで、管理の効率を向上させることができます。特に、複数のサーバーや大規模な環境で作業する際には、自動化が大きな役割を果たします。以下に、シェルスクリプトを使用してパッケージのバージョンを自動的にチェックする方法を示します。
シェルスクリプトによる自動化
シェルスクリプトを利用してインストールされているパッケージのバージョンを一括で確認する簡単な例を以下に示します。このスクリプトは、特定のパッケージのバージョン情報を集約し、報告書として出力します。
#!/bin/bash
# Debian/Ubuntu用。指定名を照会するだけで更新しない。
packages=("nginx" "apache2" "mysql-server")
printf 'package\tversion\tarchitecture\tstate\n'
for pkg in "${packages[@]}"; do
if row=$(LC_ALL=C dpkg-query -W \
-f='${binary:Package}\t${Version}\t${Architecture}\t${db:Status-Status}\n' \
"$pkg"); then
printf '%s\n' "$row"
else
printf '%s\t-\t-\tQUERY_FAILED_OR_NOT_FOUND\n' "$pkg"
fi
done
状態がinstalledの行をインストール済みとして扱います。照会できない場合はエラーメッセージも確認し、未導入とデータベース照会失敗を同一視しないでください。対象名はこのシステムの実際のパッケージ名へ置換します。nginxとnginx-coreのような部分一致をgrepで拾う方式にはしていません。
定期的なバージョンチェックのスケジューリング
手動実行と出力の保存を検証してから、必要な場合に限り定期実行します。以下はcronが利用可能な環境で毎日午前3時に動かす例です。実行時刻はcron環境のタイムゾーンに依存します。自動的な更新処理ではありません:
0 3 * * * /path/to/your/script.shcronの例だけでは差分比較や通知は行いません。PATH、実行権限、出力の保管先、保持期間を決め、前回との差分を比較する処理を別に設計します。標準出力がメールになる構成もあるため、サーバーのパッケージ一覧を意図しない宛先へ送らないよう確認します。
GUIツールを使用したパッケージ管理
Linuxディストリビューションの多くは、コマンドラインツールだけでなく、グラフィカルユーザーインターフェイス(GUI)ツールも提供しています。これにより、特に新しいユーザーやコマンドラインに慣れていないユーザーが、より直感的にシステムの管理を行えるようになります。以下では、主要なLinuxディストリビューションにおけるGUIツールを使ったパッケージ管理方法について説明します。
Ubuntuのソフトウェアセンター
Ubuntuのリリースや構成によってGUIストアの名称とバックエンドは異なります。画面のアプリ版がSnapなのかdebパッケージなのかを確認してください。GUIにすべてのライブラリやCLIパッケージが表示されるとは限りません。正確なdebの状態はdpkg-queryへ戻って確認します。
FedoraとRed HatのGNOMEソフトウェア
FedoraやRed Hat Enterprise Linuxでは、GNOMEソフトウェアを使用してパッケージ管理を行うことができます。このツールでは、ユーザーはパッケージのバージョン情報を含む詳細な情報を閲覧できるだけでなく、ソフトウェアのインストールや更新もGUIを通じて直感的に行うことが可能です。
openSUSEのYaST
openSUSEでは、YaST(Yet another Setup Tool)がシステム管理ツールとして提供されています。YaSTを使用すると、ソフトウェアの管理だけでなく、システム設定の変更、ネットワークの設定、ユーザー管理など、幅広い管理作業をグラフィカルに行うことができます。パッケージ管理においても、YaSTは非常に強力で、詳細なフィルタリングや検索機能を備えています。
これらのGUIツールを活用することで、Linuxのパッケージ管理がよりアクセスしやすく、使いやすくなります。特に新規ユーザーや、コマンドライン操作に不慣れなユーザーにとって、GUIツールは非常に便利です。
バージョン番号だけで脆弱性の有無を断定しない
ディストリビューションは上流の大きなバージョンを変えずに修正をバックポートすることがあります。Red Hatのバックポート説明のように、配布元のセキュリティ勧告とパッケージの完全な版を照合してください。文字列として新旧を並べたり、上流番号だけを見て「未修正」と結論づけたりしないことが重要です。
まとめ
Linuxシステムにおけるパッケージのバージョン確認は、システムのセキュリティと安定性を保つために不可欠です。この記事では、DebianやUbuntuのdpkg、Red Hat系のrpmやyum(dnf)、ソースからインストールされたソフトウェアのバージョン確認方法、そしてバージョン確認の自動化方法について解説しました。また、GUIツールを使用したパッケージ管理の便利さも紹介しました。これらの方法を適切に使用することで、Linuxシステム管理の効率を向上させ、問題が発生した際に迅速に対応することが可能になります。各ツールの選択や使用法を理解し、自身のニーズに合わせて最適な管理手法を採用してください。
検証範囲:掲載Bashスクリプトはbash -nで構文確認し、installed行の実取得は未検証です。RPM/DNF環境での実機テストや、本番サーバーの調査を行ったものではありません。


コメント