変更要約: 初版(主題1.04・副主題1.04.1〜1.04.4に対応)
4.2Debianパッケージ管理
リポジトリを介さないdeb パッケージの直接操作を学びます。dpkg によるインストール・アップグレード・アンインストール、インストール済みパッケージの一覧(-l)・所属ファイル(-L)・逆引き(-S)、dpkg-reconfigure による再設定を押さえます。
apt の下では dpkg が働いています。ベンダーから直接 .deb ファイルを渡されたときや、インストール済みパッケージを調べるときは dpkg を直接使います。dpkg は依存関係を自動解決しない——この一点が apt との決定的な違いです。
4.2.1dpkg の基本操作
- インストール/アップグレード=
dpkg -i package.deb(同名パッケージがあれば上書き更新)/アンインストール=dpkg -r(設定は残す)・dpkg -P(purge=設定ごと)。 - 照会=
dpkg -l(インストール済み一覧)・dpkg -L パッケージ(そのパッケージが持つファイル一覧)・dpkg -S ファイル(ファイル→所属パッケージの逆引き・インストール済みが対象)。 - dpkg-reconfigure=インストール時の対話設定をやり直す(
dpkg-reconfigure tzdataでタイムゾーン再設定が代表例)。
「dpkg -i は依存関係を解決しない(依存でエラーになったら apt で入れ直すのが定石)」「-L=パッケージ→ファイル・-S=ファイル→パッケージ」「設定のやり直し=dpkg-reconfigure」 が定番です。-L と -S の向きの取り違えが最頻出のひっかけです。
apt と dpkg の関係は「フロント(受付・調達)とバックヤード(実作業)」です。apt install nginx の裏では、リポジトリから nginx と依存パッケージの deb ファイル群が取得され、最終的に dpkg が展開・登録しています。だから dpkg -i single.deb はその1個しか扱わず、依存が欠けていれば「依存関係の問題」で止まります(現代の環境では apt install ./single.deb とすれば依存ごと解決できます)。照会系は監査・トラブルシュートの武器で、「このサーバーに何が入っている?」= dpkg -l、「nginx はどこに何を置いた?」= dpkg -L nginx、「この見知らぬファイルはどのパッケージの持ち物?」= dpkg -S /etc/nginx/nginx.conf と、質問の向きでオプションを選びます。
| 質問 | コマンド | 向き |
|---|---|---|
| 何が入っている? | dpkg -l | 一覧 |
| このパッケージのファイルは? | dpkg -L nginx | パッケージ→ファイル |
| このファイルの持ち主は? | dpkg -S /path/file | ファイル→パッケージ |
| 設定をやり直したい | dpkg-reconfigure pkg | 対話設定の再実行 |
ひっかけ: 「dpkg -i は必要な依存パッケージを自動的にダウンロードして解決する」は誤りです。dpkg はリポジトリを知らず、指定された deb ファイルだけを扱います。依存解決までやるのは apt 側です。また -S を「パッケージの中身一覧」と説明する選択肢も誤り=それは -L です。
4.2.2この節のまとめ
- dpkg=deb 直接操作(依存解決なし):-i 導入・-r 削除・-P 設定ごと
- 照会は質問の向きで:-l 一覧・-L pkg→files・-S file→pkg。設定やり直しは dpkg-reconfigure
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. ベンダーから受け取った app.deb を dpkg -i でインストールしようとしたら依存関係のエラーで失敗した。dpkg の動作の説明として正しいのはどれ?
Q2. インストール済みの nginx パッケージが「どのファイルをどこに配置したか」を一覧したい。適切なコマンドは?
Q3. インストール時に選んだタイムゾーン設定を対話画面からやり直したい。適切なコマンドは?

