【Ubuntu/Debian】dpkgコマンド完全入門:debパッケージの導入・確認・完全削除からトラブルシューティングまで

はじめに

Debian系LinuxやUbuntuにおいて、ソフトウェアパッケージの根幹を担っているのが低レベル管理ツールであるdpkgです。APTのような高水準ツールと異なり、ローカルの.debファイルをダイレクトに操作する場面で不可欠な知識となります。本稿では、パッケージのインストール、配置ファイルの追跡、メタデータの検証、設定ファイルを含めた完全消去(purge)、さらに手動導入時に生じやすい依存関係エラーの自動修復まで、実践的なコマンド例を交えて体系的に解説します。

1. 検証用環境のセットアップと導入済みパッケージのステータス把握

実機環境を汚さずに検証作業を進めるため、まずは一時的な作業ディレクトリを作成してそこへ移動します。

mkdir -p /tmp/dpkg-demo && cd /tmp/dpkg-demo

作業用ディレクトリの作成と移動

今回の検証素材として、軽量なアスキーアート表示ツールであるslパッケージを選択します。システムへの自動インストールを避け、純粋に.debファイル本体のみを作業フォルダへ取得します。

apt-get update -qq && apt-get download -y sl

slパッケージファイルのダウンロード

OSに登録されているパッケージ一覧をサマリ形式で俯瞰したい場合は、dpkg -lを使用します。出力行頭のステータス記号に注目してください。2文字のフラグがiiとなっていれば、導入と設定が正常に完了していることを示します。grepやheadと組み合わせることで、特定パッケージの状態を素早くフィルタリングできます。

⚙️ [頻出オプション一覧]

  • -i (--install) : 指定した.debアーカイブをシステムへ展開・構成します。
  • -r (--remove) : 設定ファイルをディスク上に保持したまま、バイナリ等のみを削除します。
  • -P (--purge) : 設定ファイルや関連設定を含め、パッケージの全痕跡を根こそぎ抹消します。
  • -l (--list) : 登録済みパッケージの一覧および現在の導入ステータスを表示します。
  • -s (--status) : 特定パッケージの依存関係や詳細な導入ステータスを照会します。
  • -L (--listfiles) : パッケージによってシステムへ展開されたファイル一覧をリストアップします。
  • -c (--contents) : 未導入の.debファイル内に含まれるファイル構成を事前展開なしで確認します。
  • -I (--info) : 未導入の.debファイルが保持する制御フィールドやメタデータを表示します。
  • --unpack : アーカイブの展開のみを実施し、初期化構成(configure)は保留します。
  • --configure : 展開済みで未構成状態のパッケージに対して設定スクリプトを実行します。

dpkg -lによる導入済みパッケージ一覧の確認

特定ソフトウェアの詳細なメタ情報を調べたいときは、-sオプションを指定します。出力結果のStatus: install ok installedという行は、パッケージが壊れることなく正常にシステムに組み込まれている証拠です。

dpkg -s bash

dpkg -sによるbashパッケージの詳細ステータス確認

2. アーカイブの事前検証と手動インストール手順

先ほどダウンロードした.debファイルが存在する作業ディレクトリを起点として操作を進めます。

cd /tmp/dpkg-demo

作業ディレクトリへ移動

外部から入手したパッケージを安易にインストールする前に、内容のメタデータを確認する習慣が重要です。-Iオプションを活用すれば、前提となる必須ライブラリ(Depends)やバージョン情報をインストール前に精査できます。

dpkg -I sl_*.deb

dpkg -Iによるアーカイブのメタ情報確認

さらに-cオプションを実行することで、そのパッケージを展開した際にファイルシステム上のどのパス(/usr/games/やマニュアル配置先など)にファイルが書き込まれるかを事前にシミュレーション把握できます。

dpkg -c sl_*.deb

dpkg -cによる格納ファイルパスの事前一覧表示

安全性が確認できたら、-iオプションを付与してアーカイブをシステムに反映させます。内部処理としてアンパック(解凍)が行われた後、構成スクリプトがトリガーされて利用可能な状態にセットアップされます。

dpkg -i sl_*.deb

dpkg -iによるパッケージのインストール実行

プログラムが無事に機能するか、バイナリを直接呼び出して動作確認を実施します。

/usr/games/sl -a || true

インストールしたプログラムの実行テスト

3. システム内リソースの追跡:構成ファイル一覧と逆引き検索

ソフトウェアを導入した後、関連ファイルがどこに散らばっているかを把握するには-Lオプションが最適です。実行バイナリだけでなく、各種ドキュメントやライセンス表記が配置されたディレクトリパスが一目瞭然になります。

dpkg -L sl

dpkg -Lによる展開ファイル群のフルパス表示

逆に、「ディスク上に存在するこのコマンドはどのパッケージに由来するものか?」を突き止めたい局面では、逆引き検索用の-Sオプションが威力を発揮します。

dpkg -S /usr/games/sl

出力結果にsl: /usr/games/slと表示され、対象ファイルが間違いなくslパッケージの管理下にあることが確認できます。

dpkg -Sによるファイルの所属元パッケージ逆引き

なお、近年のUbuntu環境では「UsrMerge」仕様が標準化されており、/binなどの伝統的ディレクトリは/usr/binへのシンボリックリンクとなっています。そのため、リンク元のパス(例: /bin/ls)をそのまま指定するとヒットしないケースがあります。所属パッケージを正確に特定するには、シンボリックリンクを解決した正規の実体パス(/usr/bin/ls)を指定してクエリを実行してください。

dpkg -S /bin/ls

UsrMerge環境下におけるシンボリックリンクの検索挙動

4. アンインストール手法の違い(removeとpurge)および依存関係の修復

不要になったパッケージを取り除く際、状況に応じて2つの削除レベルを使い分ける必要があります。

バイナリ本体のみを削り、設定ファイルを将来の再導入に備えて残しておきたい場合は、-r(remove)を使用します。

dpkg -r sl

コンソールにRemoving slと出力され、実行ファイル群が安全に除外されます。

dpkg -rによる設定維持アンインストール

一方、設定ファイルも含めて完全に初期状態へリセットしたい、あるいは残骸ファイルを一切残したくないケースでは、-P(purge)を指定します。

dpkg -P sl

これにより、システムレジストリおよび設定ディレクトリから該当パッケージの構成要素が完全に消去されます。

dpkg -Pによる完全消去(パージ)の実行

dpkgによる手動インストールでは、依存する共有ライブラリが自動ダウンロードされないため、依存関係が破損(Broken Dependencies)した状態に陥ることがあります。そのような不整合が発生した際は、APTの修復コマンドを実行することで、不足している前提パッケージを自動検知して一括解決してくれます。

apt-get install -f -y

破損した依存関係の自動修復

一連の動作検証が完了したら、作成したテンポラリディレクトリを破棄して作業スペースを綺麗に戻します。

rm -rf /tmp/dpkg-demo

一時検証ディレクトリのクリーンアップ

APTのバックエンドとしても機能しているdpkgの仕様やオプションを深く理解しておくことは、ネットワークが遮断されたオフライン環境での作業や、トラブル発生時の障害調査において極めて強力な武器となります。状況に応じて適切なフラグを選択し、堅牢でクリーンなLinuxシステム運用にお役立てください。